-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathPresentationViewTests.swift
More file actions
216 lines (161 loc) · 9.01 KB
/
Copy pathPresentationViewTests.swift
File metadata and controls
216 lines (161 loc) · 9.01 KB
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
import Foundation
import Testing
@testable import SwiftLens
@testable import SwiftLensTestSupport
struct PresentationViewTests {
@Suite("Sheets with Boolean Toggle")
struct DemoSheetBooleanTests {
@MainActor
@Test("Open when sheet position outside VStack")
func sheetDemoView_when_button_pressed_then_open_sheet() async throws {
// —— SYSTEM ——
let sut = LensWorkBench { sut in
DemoSheetBooleanView()
}
try await sut.observer.waitForViewVisible(withID: "ShowDetailsButton")
// ---- WHEN ----
sut.interactor.tapButton(withID: "ShowDetailsButton")
// ---- THEN ----
try await sut.observer.waitForViewVisible(withID: "sheet.content.group")
try await sut.observer.waitForViewVisible(withID: "FavoriteButton")
let sheetContent = sut.observer.view(withID: "sheet.content.group")
// sut.observer.printValues()
#expect(sheetContent?.children.findView(withID: "FavoriteButton") != nil,
"should see favorite button that is inside the sheet content")
}
@MainActor
@Test("Open when sheet position at button level")
func sheetDemoView_Two_when_ShowDetailsButton_then_open_sheet() async throws {
// —— SYSTEM SETUP ——
let sut = LensWorkBench { sut in
DemoSheetTwoView()
}
try await sut.observer.waitForViewVisible(withID: "ShowDetailsButton")
// ---- WHEN ----
sut.interactor.tapButton(withID: "ShowDetailsButton")
// ---- THEN ----
try await sut.observer.waitForViewVisible(withID: "sheet.content.group")
try await sut.observer.waitForViewVisible(withID: "FavoriteButton")
let sheetContent = sut.observer.view(withID: "sheet.content.group")
// sut.observer.printValues()
#expect(sheetContent?.children.findView(withID: "FavoriteButton") != nil,
"should see favorite button that is inside the sheet content")
}
@MainActor
@Test("Open when sheet position at untracked view")
func sheetDemoView_Three_when_ShowDetailsButton_then_open_sheet() async throws {
// —— SYSTEM SETUP ——
let sut = LensWorkBench { sut in
DemoSheetThreeView()
}
try await sut.observer.waitForViewVisible(withID: "ShowDetailsButton")
// ---- WHEN ----
sut.interactor.tapButton(withID: "ShowDetailsButton")
// ---- THEN ----
try await sut.observer.waitForViewVisible(withID: "sheet.content.group")
try await sut.observer.waitForViewVisible(withID: "FavoriteButton")
let sheetContent = sut.observer.view(withID: "sheet.content.group")
// sut.observer.printValues()
#expect(sheetContent?.children.findView(withID: "FavoriteButton") != nil,
"should see favorite button that is inside the sheet content")
}
@MainActor
@Test("Open and Close sheet")
func open_and_close_sheet() async throws {
// —— SYSTEM ——
let sut = LensWorkBench { sut in
DemoSheetBooleanView()
}
try await sut.observer.waitForViewVisible(withID: "ShowDetailsButton")
sut.interactor.tapButton(withID: "ShowDetailsButton")
// wait for sheet open:
try await sut.observer.waitForViewVisible(withID: "sheet.content.group")
try await sut.observer.waitForViewVisible(withID: "CloseSheetButton")
// ---- WHEN ----
sut.interactor.tapButton(withID: "CloseSheetButton")
// ---- THEN ----
try await sut.observer.waitForViewHidden(withID: "sheet.content.group")
#expect(sut.observer.containsNotView(withID: "FavoriteText"), "text inside sheet should not be shown")
#expect(sut.observer.containsNotView(withID: "CloseSheetButton"), "button inside sheet should not be shown")
#expect(sut.observer.containsNotView(withID: "FavoriteButton"),"button inside sheet should not be shown")
}
}
//DemoSheetItemView
@Suite("Sheet with Item Toggle")
struct DemoSheetItemTests {
@MainActor
@Test("Open when sheet position outside VStack")
func sheetDemoItemView_when_ShowDetailsButton_then_open_sheet() async throws {
// —— SYSTEM SETUP ——
let sut = LensWorkBench { sut in
DemoSheetItemView()
}
try await sut.observer.waitForViewVisible(withID: "ShowDetailsButton")
sut.observer.printValues()
// —— SHOW SHEET ——
sut.interactor.tapButton(withID: "ShowDetailsButton")
try await sut.observer.waitForViewVisible(withID: "FavoriteButton")
// —— ACTION: close the sheet ——
sut.interactor.tapButton(withID: "CloseSheetButton")
// —— ASSERT: sheet’s button is no longer in the hierarchy ——
try await sut.observer.waitForViewHidden(withID: "sheet.content.group")
sut.observer.printValues()
#expect(sut.observer.values.count == 2, "View should only have 2 views tracked")
}
@MainActor
@Test("Open when sheet position at button level")
func sheetDemoView_Two_when_ShowDetailsButton_then_open_sheet() async throws {
// —— SYSTEM SETUP ——
let sut = LensWorkBench { sut in
DemoSheetItemTwoView()
}
try await sut.observer.waitForViewVisible(withID: "ShowDetailsButton")
// —— SHOW SHEET ——
// sut.interactor.tapButton(withID: "ShowDetailsButton")
// try await sut.observer.waitForViewVisible(withID: "FavoriteButton")
try await sut.waitForAndTapButton("ShowDetailsButton")
// —— ACTION: close the sheet ——
sut.interactor.tapButton(withID: "CloseSheetButton")
// —— ASSERT: sheet’s button is no longer in the hierarchy ——
try await sut.observer.waitForViewHidden(withID: "FavoriteButton")
#expect(sut.observer.values.count == 2, "View should only have 2 views tracked")
}
@MainActor
@Test("Open when sheet position at untracked view")
func sheetDemoView_Three_when_ShowDetailsButton_then_open_sheet() async throws {
// —— SYSTEM SETUP ——
let sut = LensWorkBench { sut in
DemoSheetItemThreeView()
}
try await sut.observer.waitForViewVisible(withID: "ShowDetailsButton")
// —— SHOW SHEET ——
sut.interactor.tapButton(withID: "ShowDetailsButton")
try await sut.observer.waitForViewVisible(withID: "FavoriteButton")
// —— ACTION: close the sheet ——
sut.interactor.tapButton(withID: "CloseSheetButton")
// —— ASSERT: sheet’s button is no longer in the hierarchy ——
try await sut.observer.waitForViewHidden(withID: "FavoriteButton")
#expect(sut.observer.values.count == 2, "View should only have 2 views tracked")
}
@MainActor
@Test("Open and Close sheet")
func open_and_close_sheet() async throws {
// —— SYSTEM ——
let sut = LensWorkBench { sut in
DemoSheetItemView()
}
try await sut.observer.waitForViewVisible(withID: "ShowDetailsButton")
sut.interactor.tapButton(withID: "ShowDetailsButton")
// wait for sheet open:
try await sut.observer.waitForViewVisible(withID: "sheet.content.group")
try await sut.observer.waitForViewVisible(withID: "CloseSheetButton")
// ---- WHEN ----
sut.interactor.tapButton(withID: "CloseSheetButton")
// ---- THEN ----
try await sut.observer.waitForViewHidden(withID: "sheet.content.group")
#expect(sut.observer.containsNotView(withID: "FavoriteText"), "text inside sheet should not be shown")
#expect(sut.observer.containsNotView(withID: "CloseSheetButton"), "button inside sheet should not be shown")
#expect(sut.observer.containsNotView(withID: "FavoriteButton"),"button inside sheet should not be shown")
}
}
}