@@ -70,6 +70,12 @@ class OptimizelyUserContextTests_ODP: XCTestCase {
70
70
user. qualifiedSegments = [ ]
71
71
XCTAssertFalse ( user. isQualifiedFor ( segment: " a " ) )
72
72
}
73
+
74
+ }
75
+
76
+ // MARK: - fetchQualifiedSegments (non-blocking)
77
+
78
+ extension OptimizelyUserContextTests_ODP {
73
79
74
80
// MARK: - Success
75
81
@@ -78,10 +84,9 @@ class OptimizelyUserContextTests_ODP: XCTestCase {
78
84
user = optimizely. createUserContext ( userId: kUserId)
79
85
80
86
let sem = DispatchSemaphore ( value: 0 )
81
- user. fetchQualifiedSegments { segments , error in
87
+ user. fetchQualifiedSegments { error in
82
88
XCTAssertNil ( error)
83
- XCTAssertEqual ( [ " odp-segment-1 " ] , segments)
84
- XCTAssertEqual ( self . user. qualifiedSegments, segments)
89
+ XCTAssertEqual ( self . user. qualifiedSegments, [ " odp-segment-1 " ] )
85
90
sem. signal ( )
86
91
}
87
92
XCTAssertEqual ( . success, sem. wait ( timeout: . now( ) + . seconds( 3 ) ) )
@@ -95,9 +100,8 @@ class OptimizelyUserContextTests_ODP: XCTestCase {
95
100
user. qualifiedSegments = [ " dummy " ]
96
101
97
102
let sem = DispatchSemaphore ( value: 0 )
98
- user. fetchQualifiedSegments { segments , error in
103
+ user. fetchQualifiedSegments { error in
99
104
XCTAssertEqual ( OptimizelyError . sdkNotReady. reason, error? . reason)
100
- XCTAssertNil ( segments)
101
105
XCTAssertNil ( self . user. qualifiedSegments)
102
106
sem. signal ( )
103
107
}
@@ -111,9 +115,8 @@ class OptimizelyUserContextTests_ODP: XCTestCase {
111
115
// ODP apiKey is not available
112
116
113
117
let sem = DispatchSemaphore ( value: 0 )
114
- user. fetchQualifiedSegments { segments , error in
118
+ user. fetchQualifiedSegments { error in
115
119
XCTAssertNotNil ( error)
116
- XCTAssertNil ( segments)
117
120
XCTAssertNil ( self . user. qualifiedSegments)
118
121
sem. signal ( )
119
122
}
@@ -127,7 +130,7 @@ class OptimizelyUserContextTests_ODP: XCTestCase {
127
130
user = optimizely. createUserContext ( userId: kUserId)
128
131
129
132
let sem = DispatchSemaphore ( value: 0 )
130
- user. fetchQualifiedSegments { _, _ in
133
+ user. fetchQualifiedSegments { _ in
131
134
sem. signal ( )
132
135
}
133
136
XCTAssertEqual ( . success, sem. wait ( timeout: . now( ) + . seconds( 3 ) ) )
@@ -141,16 +144,68 @@ class OptimizelyUserContextTests_ODP: XCTestCase {
141
144
user = optimizely. createUserContext ( userId: kUserId)
142
145
143
146
let sem = DispatchSemaphore ( value: 0 )
144
- user. fetchQualifiedSegments { segments , error in
147
+ user. fetchQualifiedSegments { error in
145
148
XCTAssertNil ( error)
146
- XCTAssertEqual ( segments, [ ] )
147
149
sem. signal ( )
148
150
}
149
151
XCTAssertEqual ( . success, sem. wait ( timeout: . now( ) + . seconds( 3 ) ) )
150
152
}
151
153
152
154
}
153
155
156
+ // MARK: - fetchQualifiedSegments (blocking)
157
+
158
+ extension OptimizelyUserContextTests_ODP {
159
+
160
+ // MARK: - Success
161
+
162
+ func testFetchQualifiedSegments_blocking_successDefaultUser( ) {
163
+ try ? optimizely. start ( datafile: datafile)
164
+ user = optimizely. createUserContext ( userId: kUserId)
165
+
166
+ do {
167
+ try user. fetchQualifiedSegments ( )
168
+ XCTAssertEqual ( user. qualifiedSegments, [ " odp-segment-1 " ] )
169
+ } catch {
170
+ XCTFail ( error. localizedDescription)
171
+ }
172
+ }
173
+
174
+ // MARK: - Failure
175
+
176
+ func testFetchQualifiedSegments_blocking_sdkNotReady( ) {
177
+ user = optimizely. createUserContext ( userId: kUserId)
178
+ user. optimizely = nil
179
+ user. qualifiedSegments = [ " dummy " ]
180
+
181
+ do {
182
+ try user. fetchQualifiedSegments ( )
183
+ XCTFail ( " expected to fail " )
184
+ } catch OptimizelyError . sdkNotReady {
185
+ XCTAssertNil ( user. qualifiedSegments)
186
+ } catch {
187
+ XCTFail ( error. localizedDescription)
188
+ }
189
+ }
190
+
191
+ func testFetchQualifiedSegments_blocking_fetchFailed( ) {
192
+ user = optimizely. createUserContext ( userId: kUserId)
193
+ user. qualifiedSegments = [ " dummy " ]
194
+
195
+ // ODP apiKey is not available
196
+
197
+ do {
198
+ try user. fetchQualifiedSegments ( )
199
+ XCTFail ( " expected to fail " )
200
+ } catch OptimizelyError . fetchSegmentsFailed {
201
+ XCTAssertNil ( self . user. qualifiedSegments)
202
+ } catch {
203
+ XCTFail ( error. localizedDescription)
204
+ }
205
+ }
206
+
207
+ }
208
+
154
209
// MARK: - Optional parameters
155
210
156
211
extension OptimizelyUserContextTests_ODP {
@@ -160,9 +215,9 @@ extension OptimizelyUserContextTests_ODP {
160
215
user = optimizely. createUserContext ( userId: kUserId)
161
216
162
217
let sem = DispatchSemaphore ( value: 0 )
163
- user. fetchQualifiedSegments ( options: [ . ignoreCache] ) { segments , error in
218
+ user. fetchQualifiedSegments ( options: [ . ignoreCache] ) { error in
164
219
XCTAssertNil ( error)
165
- XCTAssertEqual ( segments , [ " odp-segment-1 " ] )
220
+ XCTAssertEqual ( self . user . qualifiedSegments , [ " odp-segment-1 " ] )
166
221
sem. signal ( )
167
222
}
168
223
XCTAssertEqual ( . success, sem. wait ( timeout: . now( ) + . seconds( 3 ) ) )
@@ -212,9 +267,9 @@ extension OptimizelyUserContextTests_ODP {
212
267
let user = optimizely. createUserContext ( userId: testOdpUserId)
213
268
214
269
let sem = DispatchSemaphore ( value: 0 )
215
- user. fetchQualifiedSegments { segments , error in
270
+ user. fetchQualifiedSegments { error in
216
271
XCTAssertNil ( error)
217
- XCTAssertEqual ( [ ] , segments , " none of the test segments in the live ODP server " )
272
+ XCTAssertEqual ( [ ] , user . qualifiedSegments , " none of the test segments in the live ODP server " )
218
273
sem. signal ( )
219
274
}
220
275
XCTAssertEqual ( . success, sem. wait ( timeout: . now( ) + . seconds( 30 ) ) )
0 commit comments