Skip to content

Commit c5a7d1b

Browse files
Add prepareDependencies to Store.init (#1844)
* Add `prepareDependencies` to `Store.init`:wq * wip * test and doc * update TTT previews to use new trailing closure style" * wip Co-authored-by: Brandon Williams <[email protected]>
1 parent fd9ce8d commit c5a7d1b

36 files changed

+477
-366
lines changed

Examples/CaseStudies/SwiftUICaseStudiesTests/01-GettingStarted-AnimationsTests.swift

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@ import XCTest
77
@MainActor
88
final class AnimationTests: XCTestCase {
99
func testRainbow() async {
10+
let clock = TestClock()
11+
1012
let store = TestStore(
1113
initialState: Animations.State(),
1214
reducer: Animations()
13-
)
14-
15-
let clock = TestClock()
16-
store.dependencies.continuousClock = clock
15+
) {
16+
$0.continuousClock = clock
17+
}
1718

1819
await store.send(.rainbowButtonTapped)
1920
await store.receive(.setColor(.red)) {
@@ -59,13 +60,14 @@ final class AnimationTests: XCTestCase {
5960
}
6061

6162
func testReset() async {
63+
let clock = TestClock()
64+
6265
let store = TestStore(
6366
initialState: Animations.State(),
6467
reducer: Animations()
65-
)
66-
67-
let clock = TestClock()
68-
store.dependencies.continuousClock = clock
68+
) {
69+
$0.continuousClock = clock
70+
}
6971

7072
await store.send(.rainbowButtonTapped)
7173
await store.receive(.setColor(.red)) {

Examples/CaseStudies/SwiftUICaseStudiesTests/02-Effects-BasicsTests.swift

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ final class EffectsBasicsTests: XCTestCase {
99
let store = TestStore(
1010
initialState: EffectsBasics.State(),
1111
reducer: EffectsBasics()
12-
)
13-
14-
store.dependencies.continuousClock = ImmediateClock()
12+
) {
13+
$0.continuousClock = ImmediateClock()
14+
}
1515

1616
await store.send(.incrementButtonTapped) {
1717
$0.count = 1
@@ -25,10 +25,10 @@ final class EffectsBasicsTests: XCTestCase {
2525
let store = TestStore(
2626
initialState: EffectsBasics.State(),
2727
reducer: EffectsBasics()
28-
)
29-
30-
store.dependencies.factClient.fetch = { "\($0) is a good number Brent" }
31-
store.dependencies.continuousClock = ImmediateClock()
28+
) {
29+
$0.factClient.fetch = { "\($0) is a good number Brent" }
30+
$0.continuousClock = ImmediateClock()
31+
}
3232

3333
await store.send(.incrementButtonTapped) {
3434
$0.count = 1
@@ -46,9 +46,9 @@ final class EffectsBasicsTests: XCTestCase {
4646
let store = TestStore(
4747
initialState: EffectsBasics.State(),
4848
reducer: EffectsBasics()
49-
)
50-
51-
store.dependencies.continuousClock = ImmediateClock()
49+
) {
50+
$0.continuousClock = ImmediateClock()
51+
}
5252

5353
await store.send(.decrementButtonTapped) {
5454
$0.count = -1
@@ -62,9 +62,9 @@ final class EffectsBasicsTests: XCTestCase {
6262
let store = TestStore(
6363
initialState: EffectsBasics.State(),
6464
reducer: EffectsBasics()
65-
)
66-
67-
store.dependencies.continuousClock = TestClock()
65+
) {
66+
$0.continuousClock = TestClock()
67+
}
6868

6969
await store.send(.decrementButtonTapped) {
7070
$0.count = -1

Examples/CaseStudies/SwiftUICaseStudiesTests/02-Effects-CancellationTests.swift

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ final class EffectsCancellationTests: XCTestCase {
99
let store = TestStore(
1010
initialState: EffectsCancellation.State(),
1111
reducer: EffectsCancellation()
12-
)
13-
14-
store.dependencies.factClient.fetch = { "\($0) is a good number Brent" }
12+
) {
13+
$0.factClient.fetch = { "\($0) is a good number Brent" }
14+
}
1515

1616
await store.send(.stepperChanged(1)) {
1717
$0.count = 1
@@ -33,9 +33,9 @@ final class EffectsCancellationTests: XCTestCase {
3333
let store = TestStore(
3434
initialState: EffectsCancellation.State(),
3535
reducer: EffectsCancellation()
36-
)
37-
38-
store.dependencies.factClient.fetch = { _ in throw FactError() }
36+
) {
37+
$0.factClient.fetch = { _ in throw FactError() }
38+
}
3939

4040
await store.send(.factButtonTapped) {
4141
$0.isFactRequestInFlight = true
@@ -55,11 +55,11 @@ final class EffectsCancellationTests: XCTestCase {
5555
let store = TestStore(
5656
initialState: EffectsCancellation.State(),
5757
reducer: EffectsCancellation()
58-
)
59-
60-
store.dependencies.factClient.fetch = {
61-
try await Task.sleep(nanoseconds: NSEC_PER_SEC)
62-
return "\($0) is a good number Brent"
58+
) {
59+
$0.factClient.fetch = {
60+
try await Task.sleep(nanoseconds: NSEC_PER_SEC)
61+
return "\($0) is a good number Brent"
62+
}
6363
}
6464

6565
await store.send(.factButtonTapped) {
@@ -74,11 +74,11 @@ final class EffectsCancellationTests: XCTestCase {
7474
let store = TestStore(
7575
initialState: EffectsCancellation.State(),
7676
reducer: EffectsCancellation()
77-
)
78-
79-
store.dependencies.factClient.fetch = {
80-
try await Task.sleep(nanoseconds: NSEC_PER_SEC)
81-
return "\($0) is a good number Brent"
77+
) {
78+
$0.factClient.fetch = {
79+
try await Task.sleep(nanoseconds: NSEC_PER_SEC)
80+
return "\($0) is a good number Brent"
81+
}
8282
}
8383

8484
await store.send(.factButtonTapped) {

Examples/CaseStudies/SwiftUICaseStudiesTests/02-Effects-LongLivingTests.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ final class LongLivingEffectsTests: XCTestCase {
1111
let store = TestStore(
1212
initialState: LongLivingEffects.State(),
1313
reducer: LongLivingEffects()
14-
)
15-
16-
store.dependencies.screenshots = { screenshots }
14+
) {
15+
$0.screenshots = { screenshots }
16+
}
1717

1818
let task = await store.send(.task)
1919

Examples/CaseStudies/SwiftUICaseStudiesTests/02-Effects-RefreshableTests.swift

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ final class RefreshableTests: XCTestCase {
99
let store = TestStore(
1010
initialState: Refreshable.State(),
1111
reducer: Refreshable()
12-
)
13-
14-
store.dependencies.factClient.fetch = { "\($0) is a good number." }
15-
store.dependencies.continuousClock = ImmediateClock()
12+
) {
13+
$0.factClient.fetch = { "\($0) is a good number." }
14+
$0.continuousClock = ImmediateClock()
15+
}
1616

1717
await store.send(.incrementButtonTapped) {
1818
$0.count = 1
@@ -24,14 +24,15 @@ final class RefreshableTests: XCTestCase {
2424
}
2525

2626
func testUnhappyPath() async {
27+
struct FactError: Equatable, Error {}
28+
2729
let store = TestStore(
2830
initialState: Refreshable.State(),
2931
reducer: Refreshable()
30-
)
31-
32-
struct FactError: Equatable, Error {}
33-
store.dependencies.factClient.fetch = { _ in throw FactError() }
34-
store.dependencies.continuousClock = ImmediateClock()
32+
) {
33+
$0.factClient.fetch = { _ in throw FactError() }
34+
$0.continuousClock = ImmediateClock()
35+
}
3536

3637
await store.send(.incrementButtonTapped) {
3738
$0.count = 1
@@ -44,13 +45,13 @@ final class RefreshableTests: XCTestCase {
4445
let store = TestStore(
4546
initialState: Refreshable.State(),
4647
reducer: Refreshable()
47-
)
48-
49-
store.dependencies.factClient.fetch = {
50-
try await Task.sleep(nanoseconds: NSEC_PER_SEC)
51-
return "\($0) is a good number."
48+
) {
49+
$0.factClient.fetch = {
50+
try await Task.sleep(nanoseconds: NSEC_PER_SEC)
51+
return "\($0) is a good number."
52+
}
53+
$0.continuousClock = ImmediateClock()
5254
}
53-
store.dependencies.continuousClock = ImmediateClock()
5455

5556
await store.send(.incrementButtonTapped) {
5657
$0.count = 1

Examples/CaseStudies/SwiftUICaseStudiesTests/02-Effects-TimersTests.swift

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@ import XCTest
66
@MainActor
77
final class TimersTests: XCTestCase {
88
func testStart() async {
9+
let clock = TestClock()
10+
911
let store = TestStore(
1012
initialState: Timers.State(),
1113
reducer: Timers()
12-
)
13-
14-
let clock = TestClock()
15-
store.dependencies.continuousClock = clock
14+
) {
15+
$0.continuousClock = clock
16+
}
1617

1718
await store.send(.toggleTimerButtonTapped) {
1819
$0.isTimerActive = true

Examples/CaseStudies/SwiftUICaseStudiesTests/02-Effects-WebSocketTests.swift

Lines changed: 39 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,19 @@ import XCTest
66
@MainActor
77
final class WebSocketTests: XCTestCase {
88
func testWebSocketHappyPath() async {
9-
let store = TestStore(
10-
initialState: WebSocket.State(),
11-
reducer: WebSocket()
12-
)
13-
149
let actions = AsyncStream<WebSocketClient.Action>.streamWithContinuation()
1510
let messages = AsyncStream<TaskResult<WebSocketClient.Message>>.streamWithContinuation()
1611

17-
store.dependencies.continuousClock = ImmediateClock()
18-
store.dependencies.webSocket.open = { _, _, _ in actions.stream }
19-
store.dependencies.webSocket.receive = { _ in messages.stream }
20-
store.dependencies.webSocket.send = { _, _ in }
21-
store.dependencies.webSocket.sendPing = { _ in try await Task.never() }
12+
let store = TestStore(
13+
initialState: WebSocket.State(),
14+
reducer: WebSocket()
15+
) {
16+
$0.continuousClock = ImmediateClock()
17+
$0.webSocket.open = { _, _, _ in actions.stream }
18+
$0.webSocket.receive = { _ in messages.stream }
19+
$0.webSocket.send = { _, _ in }
20+
$0.webSocket.sendPing = { _ in try await Task.never() }
21+
}
2222

2323
// Connect to the socket
2424
await store.send(.connectButtonTapped) {
@@ -58,22 +58,22 @@ final class WebSocketTests: XCTestCase {
5858
}
5959

6060
func testWebSocketSendFailure() async {
61-
let store = TestStore(
62-
initialState: WebSocket.State(),
63-
reducer: WebSocket()
64-
)
65-
6661
let actions = AsyncStream<WebSocketClient.Action>.streamWithContinuation()
6762
let messages = AsyncStream<TaskResult<WebSocketClient.Message>>.streamWithContinuation()
6863

69-
store.dependencies.continuousClock = ImmediateClock()
70-
store.dependencies.webSocket.open = { _, _, _ in actions.stream }
71-
store.dependencies.webSocket.receive = { _ in messages.stream }
72-
store.dependencies.webSocket.send = { _, _ in
73-
struct SendFailure: Error, Equatable {}
74-
throw SendFailure()
64+
let store = TestStore(
65+
initialState: WebSocket.State(),
66+
reducer: WebSocket()
67+
) {
68+
$0.continuousClock = ImmediateClock()
69+
$0.webSocket.open = { _, _, _ in actions.stream }
70+
$0.webSocket.receive = { _ in messages.stream }
71+
$0.webSocket.send = { _, _ in
72+
struct SendFailure: Error, Equatable {}
73+
throw SendFailure()
74+
}
75+
$0.webSocket.sendPing = { _ in try await Task.never() }
7576
}
76-
store.dependencies.webSocket.sendPing = { _ in try await Task.never() }
7777

7878
// Connect to the socket
7979
await store.send(.connectButtonTapped) {
@@ -105,19 +105,19 @@ final class WebSocketTests: XCTestCase {
105105
}
106106

107107
func testWebSocketPings() async {
108-
let store = TestStore(
109-
initialState: WebSocket.State(),
110-
reducer: WebSocket()
111-
)
112-
113108
let actions = AsyncStream<WebSocketClient.Action>.streamWithContinuation()
114109
let clock = TestClock()
115110
var pingsCount = 0
116111

117-
store.dependencies.continuousClock = clock
118-
store.dependencies.webSocket.open = { _, _, _ in actions.stream }
119-
store.dependencies.webSocket.receive = { _ in try await Task.never() }
120-
store.dependencies.webSocket.sendPing = { @MainActor _ in pingsCount += 1 }
112+
let store = TestStore(
113+
initialState: WebSocket.State(),
114+
reducer: WebSocket()
115+
) {
116+
$0.continuousClock = clock
117+
$0.webSocket.open = { _, _, _ in actions.stream }
118+
$0.webSocket.receive = { _ in try await Task.never() }
119+
$0.webSocket.sendPing = { @MainActor _ in pingsCount += 1 }
120+
}
121121

122122
// Connect to the socket
123123
await store.send(.connectButtonTapped) {
@@ -140,17 +140,17 @@ final class WebSocketTests: XCTestCase {
140140
}
141141

142142
func testWebSocketConnectError() async {
143+
let actions = AsyncStream<WebSocketClient.Action>.streamWithContinuation()
144+
143145
let store = TestStore(
144146
initialState: WebSocket.State(),
145147
reducer: WebSocket()
146-
)
147-
148-
let actions = AsyncStream<WebSocketClient.Action>.streamWithContinuation()
149-
150-
store.dependencies.continuousClock = ImmediateClock()
151-
store.dependencies.webSocket.open = { _, _, _ in actions.stream }
152-
store.dependencies.webSocket.receive = { _ in try await Task.never() }
153-
store.dependencies.webSocket.sendPing = { _ in try await Task.never() }
148+
) {
149+
$0.continuousClock = ImmediateClock()
150+
$0.webSocket.open = { _, _, _ in actions.stream }
151+
$0.webSocket.receive = { _ in try await Task.never() }
152+
$0.webSocket.sendPing = { _ in try await Task.never() }
153+
}
154154

155155
// Attempt to connect to the socket
156156
await store.send(.connectButtonTapped) {

Examples/CaseStudies/SwiftUICaseStudiesTests/04-HigherOrderReducers-LifecycleTests.swift

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@ import XCTest
66
@MainActor
77
final class LifecycleTests: XCTestCase {
88
func testLifecycle() async {
9+
let clock = TestClock()
10+
911
let store = TestStore(
1012
initialState: LifecycleDemo.State(),
1113
reducer: LifecycleDemo()
12-
)
13-
14-
let clock = TestClock()
15-
store.dependencies.continuousClock = clock
14+
) {
15+
$0.continuousClock = clock
16+
}
1617

1718
await store.send(.toggleTimerButtonTapped) {
1819
$0.count = 0

Examples/CaseStudies/SwiftUICaseStudiesTests/04-HigherOrderReducers-RecursionTests.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ final class RecursionTests: XCTestCase {
99
let store = TestStore(
1010
initialState: Nested.State(id: UUID()),
1111
reducer: Nested()
12-
)
13-
14-
store.dependencies.uuid = .incrementing
12+
) {
13+
$0.uuid = .incrementing
14+
}
1515

1616
let id0 = UUID(uuidString: "00000000-0000-0000-0000-000000000000")!
1717
let id1 = UUID(uuidString: "00000000-0000-0000-0000-000000000001")!

0 commit comments

Comments
 (0)