@@ -70,6 +70,12 @@ class OptimizelyUserContextTests_ODP: XCTestCase {
7070 user. qualifiedSegments = [ ]
7171 XCTAssertFalse ( user. isQualifiedFor ( segment: " a " ) )
7272 }
73+
74+ }
75+
76+ // MARK: - fetchQualifiedSegments (non-blocking)
77+
78+ extension OptimizelyUserContextTests_ODP {
7379
7480 // MARK: - Success
7581
@@ -78,10 +84,9 @@ class OptimizelyUserContextTests_ODP: XCTestCase {
7884 user = optimizely. createUserContext ( userId: kUserId)
7985
8086 let sem = DispatchSemaphore ( value: 0 )
81- user. fetchQualifiedSegments { segments , error in
87+ user. fetchQualifiedSegments { error in
8288 XCTAssertNil ( error)
83- XCTAssertEqual ( [ " odp-segment-1 " ] , segments)
84- XCTAssertEqual ( self . user. qualifiedSegments, segments)
89+ XCTAssertEqual ( self . user. qualifiedSegments, [ " odp-segment-1 " ] )
8590 sem. signal ( )
8691 }
8792 XCTAssertEqual ( . success, sem. wait ( timeout: . now( ) + . seconds( 3 ) ) )
@@ -95,9 +100,8 @@ class OptimizelyUserContextTests_ODP: XCTestCase {
95100 user. qualifiedSegments = [ " dummy " ]
96101
97102 let sem = DispatchSemaphore ( value: 0 )
98- user. fetchQualifiedSegments { segments , error in
103+ user. fetchQualifiedSegments { error in
99104 XCTAssertEqual ( OptimizelyError . sdkNotReady. reason, error? . reason)
100- XCTAssertNil ( segments)
101105 XCTAssertNil ( self . user. qualifiedSegments)
102106 sem. signal ( )
103107 }
@@ -111,9 +115,8 @@ class OptimizelyUserContextTests_ODP: XCTestCase {
111115 // ODP apiKey is not available
112116
113117 let sem = DispatchSemaphore ( value: 0 )
114- user. fetchQualifiedSegments { segments , error in
118+ user. fetchQualifiedSegments { error in
115119 XCTAssertNotNil ( error)
116- XCTAssertNil ( segments)
117120 XCTAssertNil ( self . user. qualifiedSegments)
118121 sem. signal ( )
119122 }
@@ -127,7 +130,7 @@ class OptimizelyUserContextTests_ODP: XCTestCase {
127130 user = optimizely. createUserContext ( userId: kUserId)
128131
129132 let sem = DispatchSemaphore ( value: 0 )
130- user. fetchQualifiedSegments { _, _ in
133+ user. fetchQualifiedSegments { _ in
131134 sem. signal ( )
132135 }
133136 XCTAssertEqual ( . success, sem. wait ( timeout: . now( ) + . seconds( 3 ) ) )
@@ -141,16 +144,68 @@ class OptimizelyUserContextTests_ODP: XCTestCase {
141144 user = optimizely. createUserContext ( userId: kUserId)
142145
143146 let sem = DispatchSemaphore ( value: 0 )
144- user. fetchQualifiedSegments { segments , error in
147+ user. fetchQualifiedSegments { error in
145148 XCTAssertNil ( error)
146- XCTAssertEqual ( segments, [ ] )
147149 sem. signal ( )
148150 }
149151 XCTAssertEqual ( . success, sem. wait ( timeout: . now( ) + . seconds( 3 ) ) )
150152 }
151153
152154}
153155
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+
154209// MARK: - Optional parameters
155210
156211extension OptimizelyUserContextTests_ODP {
@@ -160,9 +215,9 @@ extension OptimizelyUserContextTests_ODP {
160215 user = optimizely. createUserContext ( userId: kUserId)
161216
162217 let sem = DispatchSemaphore ( value: 0 )
163- user. fetchQualifiedSegments ( options: [ . ignoreCache] ) { segments , error in
218+ user. fetchQualifiedSegments ( options: [ . ignoreCache] ) { error in
164219 XCTAssertNil ( error)
165- XCTAssertEqual ( segments , [ " odp-segment-1 " ] )
220+ XCTAssertEqual ( self . user . qualifiedSegments , [ " odp-segment-1 " ] )
166221 sem. signal ( )
167222 }
168223 XCTAssertEqual ( . success, sem. wait ( timeout: . now( ) + . seconds( 3 ) ) )
@@ -212,9 +267,9 @@ extension OptimizelyUserContextTests_ODP {
212267 let user = optimizely. createUserContext ( userId: testOdpUserId)
213268
214269 let sem = DispatchSemaphore ( value: 0 )
215- user. fetchQualifiedSegments { segments , error in
270+ user. fetchQualifiedSegments { error in
216271 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 " )
218273 sem. signal ( )
219274 }
220275 XCTAssertEqual ( . success, sem. wait ( timeout: . now( ) + . seconds( 30 ) ) )
0 commit comments