From 873976418f09f512a66af11161c4ceeefb78fbce Mon Sep 17 00:00:00 2001 From: Fuwn Date: Mon, 23 Feb 2026 11:55:43 -0800 Subject: feat: mark context menu delete actions as destructive --- SoraTests/ViewDerivedDataTests.swift | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'SoraTests') diff --git a/SoraTests/ViewDerivedDataTests.swift b/SoraTests/ViewDerivedDataTests.swift index 3a1d8df..32e9276 100644 --- a/SoraTests/ViewDerivedDataTests.swift +++ b/SoraTests/ViewDerivedDataTests.swift @@ -361,6 +361,42 @@ final class ViewDerivedDataTests: XCTestCase { // swiftlint:disable:this type_b ) } + func testFavoritesDeleteActionUsesDestructiveRole() throws { + let source = try loadSource(at: "Sora/Views/FavoritesView.swift") + let functionSource = try extractFunction( + named: "private func favoriteGridContent(", + from: source + ) + let destructiveDeleteActionCount = tokenCount( + matching: + #"role:\s*\.destructive[\s\S]*Label\(\s*"Delete"\s*,\s*systemImage:\s*"trash"\s*\)"#, + in: functionSource + ) + + // swiftlint:disable:next prefer_nimble + XCTAssertGreaterThan( + destructiveDeleteActionCount, + 0, + "Favorite context menu delete action should be explicitly destructive." + ) + } + + func testGenericListDeleteActionUsesDestructiveRole() throws { + let source = try loadSource(at: "Sora/Views/Generic/GenericListView.swift") + let destructiveDeleteActionCount = tokenCount( + matching: + #"role:\s*\.destructive[\s\S]*Label\(\s*"Delete"\s*,\s*systemImage:\s*"trash"\s*\)"#, + in: source + ) + + // swiftlint:disable:next prefer_nimble + XCTAssertGreaterThan( + destructiveDeleteActionCount, + 0, + "Generic list context menu delete action should be explicitly destructive." + ) + } + func testListViewsAvoidComparatorRandomShuffleSorting() throws { let listViewSource = try loadSource(at: "Sora/Views/Generic/GenericListView.swift") let favoritesViewSource = try loadSource(at: "Sora/Views/FavoritesView.swift") -- cgit v1.2.3