-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathAppCoreTests.swift
101 lines (90 loc) · 3.36 KB
/
AppCoreTests.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
//
// AppCoreTests.swift
// AppCoreTests
//
// Created by Igor Bidiniuc on 17/03/2021.
//
import XCTest
import ComposableArchitecture
import SettingsService
import SettingsCore
import NewGameCore
import GameCore
import TCAminesweeperCommon
import HighScoreService
import HighScoresCore
@testable import AppCore
class AppCoreTests: XCTestCase {
func testFlow_Settings() {
let userSettingsMock = UserSettings(otherThanCustom: .easy)
let settingsMock = SettingsState(userSettings: userSettingsMock)
let settingsServiceMock = SettingsService.mock(userSettings: { Effect(value: userSettingsMock) })
let store = TestStore(
initialState: AppState(newGame: NewGameState(game: GameState(difficulty: .easy, minefieldState: .oneMine))),
reducer: appReducer,
environment: .mock(
newGame: .mock(
minefieldGenerator: { _ in .none },
settingsService: settingsServiceMock
),
settings: .mock(settingsService: settingsServiceMock)
)
)
let openSettings: TestStore<AppState, AppState, AppAction, AppAction, AppEnvironment>.Step =
.sequence([
.send(.settingsButtonTapped),
.receive(.showSettings(settingsMock)) {
$0.settings = settingsMock
$0.sheet = .settings
},
.receive(.newGameAction(.gameAction(.onDisappear)))
])
store.assert(
openSettings,
.send(.settingsAction(.cancelButtonTapped)) {
$0.sheet = nil
},
openSettings,
.send(.dismiss) {
$0.settings = nil
$0.sheet = nil
},
.receive(.newGameAction(.gameAction(.onAppear)))
)
}
func testFlow_HighScore() {
let scoresMock = [UserHighScore(id: .init(), score: 0, userName: nil, date: Date())]
let highScoresMock = HighScoreState(difficulty: .easy, scores: scoresMock)
let store = TestStore(
initialState: AppState(newGame: NewGameState(game: GameState(difficulty: .easy, minefieldState: .oneMine))),
reducer: appReducer,
environment: .mock(
highScores: .mock(highScoreService: HighScoreService.mock(scores: { difficulty in
XCTAssertEqual(difficulty, .easy)
return Effect(value: scoresMock)
}))
)
)
let openHighScores: TestStore<AppState, AppState, AppAction, AppAction, AppEnvironment>.Step =
.sequence([
.send(.highScoresButtonTapped),
.receive(.showHighScores(highScoresMock)) {
$0.highScores = highScoresMock
$0.sheet = .highScores
},
.receive(.newGameAction(.gameAction(.onDisappear)))
])
store.assert(
openHighScores,
.send(.highScoresAction(.cancelButtonTapped)) {
$0.sheet = nil
},
openHighScores,
.send(.dismiss) {
$0.highScores = nil
$0.sheet = nil
},
.receive(.newGameAction(.gameAction(.onAppear)))
)
}
}