Files
swift-composable-architectu…/Examples/SyncUps/SyncUpsTests/SyncUpsListTests.swift
Stephen Celis 57e804f1cc Macro bonanza (#2553)
* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Silence test warnings

* wip

* wip

* wip

* update a bunch of docs

* wip

* wip

* fix

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Kill integration tests for now

* wip

* wip

* wip

* wip

* updating docs for @Reducer macro

* replaced more Reducer protocols with @Reducer

* Fixed some broken docc references

* wip

* Some @Reducer docs

* more docs

* convert some old styles to new style

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* bump

* update tutorials to use body

* update tutorials to use DML on destination state enum

* Add diagnostic

* wip

* updated a few more tests

* wip

* wip

* Add another gotcha

* wip

* wip

* wip

* fixes

* wip

* wip

* wip

* wip

* wip

* fix

* wip

* remove for now

* wip

* wip

* updated some docs

* migration guides

* more migration guide

* fix ci

* fix

* soft deprecate all apis using AnyCasePath

* wip

* Fix

* fix tests

* swift-format 509 compatibility

* wip

* wip

* Update Sources/ComposableArchitecture/Macros.swift

Co-authored-by: Mateusz Bąk <bakmatthew@icloud.com>

* wip

* wip

* update optional state case study

* remove initializer

* Don't use @State for BasicsView integration demo

* fix tests

* remove reduce diagnostics for now

* diagnose error not warning

* Update Sources/ComposableArchitecture/Macros.swift

Co-authored-by: Jesse Tipton <jesse@jessetipton.com>

* wip

* move integration tests to cron

* Revert "move integration tests to cron"

This reverts commit f9bdf2f04b.

* disable flakey tests on CI

* wip

* wip

* Revert "Revert "move integration tests to cron""

This reverts commit 66aafa7327.

* fix

* wip

* fix

---------

Co-authored-by: Brandon Williams <mbrandonw@hey.com>
Co-authored-by: Mateusz Bąk <bakmatthew@icloud.com>
Co-authored-by: Brandon Williams <135203+mbrandonw@users.noreply.github.com>
Co-authored-by: Jesse Tipton <jesse@jessetipton.com>
2023-11-13 12:57:35 -08:00

114 lines
2.9 KiB
Swift

import ComposableArchitecture
import XCTest
@testable import SyncUps
@MainActor
final class SyncUpsListTests: XCTestCase {
func testAdd() async throws {
let store = TestStore(initialState: SyncUpsList.State()) {
SyncUpsList()
} withDependencies: {
$0.continuousClock = ImmediateClock()
$0.dataManager = .mock()
$0.uuid = .incrementing
}
var syncUp = SyncUp(
id: SyncUp.ID(UUID(0)),
attendees: [
Attendee(id: Attendee.ID(UUID(1)))
]
)
await store.send(.addSyncUpButtonTapped) {
$0.destination = .add(SyncUpForm.State(syncUp: syncUp))
}
syncUp.title = "Engineering"
await store.send(.destination(.presented(.add(.set(\.$syncUp, syncUp))))) {
$0.$destination[case: \.add]?.syncUp.title = "Engineering"
}
await store.send(.confirmAddSyncUpButtonTapped) {
$0.destination = nil
$0.syncUps = [syncUp]
}
}
func testAdd_ValidatedAttendees() async throws {
@Dependency(\.uuid) var uuid
let store = TestStore(
initialState: SyncUpsList.State(
destination: .add(
SyncUpForm.State(
syncUp: SyncUp(
id: SyncUp.ID(uuidString: "deadbeef-dead-beef-dead-beefdeadbeef")!,
attendees: [
Attendee(id: Attendee.ID(uuid()), name: ""),
Attendee(id: Attendee.ID(uuid()), name: " "),
],
title: "Design"
)
)
)
)
) {
SyncUpsList()
} withDependencies: {
$0.continuousClock = ImmediateClock()
$0.dataManager = .mock()
$0.uuid = .incrementing
}
await store.send(.confirmAddSyncUpButtonTapped) {
$0.destination = nil
$0.syncUps = [
SyncUp(
id: SyncUp.ID(uuidString: "deadbeef-dead-beef-dead-beefdeadbeef")!,
attendees: [
Attendee(id: Attendee.ID(UUID(0)))
],
title: "Design"
)
]
}
}
func testLoadingDataDecodingFailed() async throws {
let store = TestStore(initialState: SyncUpsList.State()) {
SyncUpsList()
} withDependencies: {
$0.continuousClock = ImmediateClock()
$0.dataManager = .mock(
initialData: Data("!@#$ BAD DATA %^&*()".utf8)
)
}
XCTAssertEqual(store.state.destination, .alert(.dataFailedToLoad))
await store.send(.destination(.presented(.alert(.confirmLoadMockData)))) {
$0.destination = nil
$0.syncUps = [
.mock,
.designMock,
.engineeringMock,
]
}
}
func testLoadingDataFileNotFound() async throws {
let store = TestStore(initialState: SyncUpsList.State()) {
SyncUpsList()
} withDependencies: {
$0.continuousClock = ImmediateClock()
$0.dataManager.load = { _ in
struct FileNotFound: Error {}
throw FileNotFound()
}
}
XCTAssertEqual(store.state.destination, nil)
}
}