native macOS codings agent orchestrator prowl.onev.cat
Something went wrong. Try again.
4.1 kB · 111 lines
Swift
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112import ComposableArchitectureimport DependenciesTestSupportimport Foundationimport Testing
@testable import supacode
@MainActorstruct AppFeatureWorkspaceEditingTests { private func makeWorkspaceRepository(id: String) -> Repository { Repository( id: id, rootURL: URL(fileURLWithPath: id), name: "Workspace", kind: .plain, worktrees: [], workspace: ProjectWorkspace( title: "Workspace", repositories: [ProjectWorkspaceRepositoryEntry(id: "app", name: "App", path: "app")]) ) }
@Test(.dependencies) func settingsEditWorkspaceSurfacesMainWindowAndOpensEditor() async { var repositoriesState = RepositoriesFeature.State() repositoriesState.repositories = [makeWorkspaceRepository(id: "/tmp/ws")] let surfaced = LockIsolated(false) let store = TestStore( initialState: AppFeature.State(repositories: repositoriesState, settings: SettingsFeature.State()) ) { AppFeature() } withDependencies: { $0.uuid = .incrementing $0.appLifecycleClient.surfaceMainWindow = { surfaced.withValue { $0 = true } return true } } store.exhaustivity = .off
await store.send(.settings(.delegate(.editWorkspace("/tmp/ws")))) // Surfacing must already have happened when the request is dispatched, // so the sheet never attaches to a hidden or minimized main window. #expect(surfaced.value) await store.receive(\.repositories.workspaceEditing.promptRequested) await store.finish() }
@Test(.dependencies) func settingsEditWorkspaceIgnoresNonWorkspaceRepositories() async { var repositoriesState = RepositoriesFeature.State() repositoriesState.repositories = [ Repository(id: "/tmp/git", rootURL: URL(fileURLWithPath: "/tmp/git"), name: "Git", kind: .git, worktrees: []) ] let store = TestStore( initialState: AppFeature.State(repositories: repositoriesState, settings: SettingsFeature.State()) ) { AppFeature() }
await store.send(.settings(.delegate(.editWorkspace("/tmp/git")))) }
@Test(.dependencies) func repositorySettingsEditTappedBubblesToSettingsDelegate() async { let store = TestStore( initialState: RepositorySettingsFeature.State( rootURL: URL(fileURLWithPath: "/tmp/ws"), repositoryID: "/tmp/ws", repositoryKind: .plain, workspace: ProjectWorkspace(title: "Workspace"), settings: .default, userSettings: .default) ) { RepositorySettingsFeature() }
await store.send(.editWorkspaceTapped) await store.receive(\.delegate.editWorkspace) }
@Test(.dependencies) func paletteEditWorkspaceDispatchesPromptRequest() async { var repositoriesState = RepositoriesFeature.State() repositoriesState.repositories = [makeWorkspaceRepository(id: "/tmp/ws")] let store = TestStore( initialState: AppFeature.State(repositories: repositoriesState, settings: SettingsFeature.State()) ) { AppFeature() } withDependencies: { $0.uuid = .incrementing } store.exhaustivity = .off
await store.send(.commandPalette(.delegate(.editWorkspace("/tmp/ws")))) await store.receive(\.repositories.workspaceEditing.promptRequested) }
@Test func paletteOffersEditWorkspaceOnlyForSelectedWorkspace() { var repositoriesState = RepositoriesFeature.State() repositoriesState.repositories = [ makeWorkspaceRepository(id: "/tmp/ws"), Repository(id: "/tmp/git", rootURL: URL(fileURLWithPath: "/tmp/git"), name: "Git", kind: .git, worktrees: []), ] repositoriesState.selection = .repository("/tmp/ws")
let workspaceItems = CommandPaletteFeature.commandPaletteItems(from: repositoriesState) #expect(workspaceItems.contains { $0.kind == .editWorkspace("/tmp/ws") })
repositoriesState.selection = .repository("/tmp/git") let repositoryItems = CommandPaletteFeature.commandPaletteItems(from: repositoriesState) #expect(!repositoryItems.contains { $0.kind == .editWorkspace("/tmp/git") }) #expect(!repositoryItems.contains { $0.kind == .editWorkspace("/tmp/ws") }) }}