@@ -169,9 +169,55 @@ class ConfidenceProviderTest: XCTestCase {
169169 try provider. getIntegerEvaluation ( key: " flagName " , defaultValue: - 1 , context: context) )
170170 { error in
171171 if let specificError = error as? OpenFeatureError {
172- XCTAssertEqual ( specificError. errorCode ( ) , ErrorCode . parseError)
173- XCTAssertEqual ( specificError. description, " Parse error: Flag path " +
174- " must contain path to the field for non-object values " )
172+ XCTAssertEqual ( specificError. errorCode ( ) , ErrorCode . typeMismatch)
173+ XCTAssertEqual ( specificError. description, " Type mismatch " )
174+ } else {
175+ XCTFail ( " expected a flag not found error " )
176+ }
177+ }
178+ }
179+
180+ func testProviderObjectEval( ) async throws {
181+ let context = MutableContext ( targetingKey: " t " )
182+ let readyExpectation = XCTestExpectation ( description: " Ready " )
183+ let storage = StorageMock ( )
184+ class FakeClient : ConfidenceResolveClient {
185+ var resolvedValues : [ ResolvedValue ] = [
186+ ResolvedValue (
187+ variant: " variant1 " ,
188+ value: . init( structure: [ " int " : . init( integer: 42 ) ] ) ,
189+ flag: " flagName " ,
190+ resolveReason: . match,
191+ shouldApply: true )
192+ ]
193+ func resolve( ctx: ConfidenceStruct ) async throws -> ResolvesResult {
194+ return . init( resolvedValues: resolvedValues, resolveToken: " token " )
195+ }
196+ }
197+
198+ let confidence = Confidence . Builder ( clientSecret: " test " )
199+ . withContext ( initialContext: [ " targeting_key " : . init( string: " t " ) ] )
200+ . withFlagResolverClient ( flagResolver: FakeClient ( ) )
201+ . withStorage ( storage: storage)
202+ . build ( )
203+
204+ let provider = ConfidenceFeatureProvider ( confidence: confidence, initializationStrategy: . fetchAndActivate)
205+ OpenFeatureAPI . shared. setProvider ( provider: provider)
206+ let cancellable = OpenFeatureAPI . shared. observe ( ) . sink { event in
207+ if event == . ready {
208+ readyExpectation. fulfill ( )
209+ } else {
210+ print ( event. debugDescription)
211+ }
212+ }
213+ await fulfillment ( of: [ readyExpectation] , timeout: 1.0 )
214+ cancellable. cancel ( )
215+ XCTAssertThrowsError (
216+ try provider. getObjectEvaluation ( key: " flagName " , defaultValue: Value . structure ( [ " int " : . integer( 3 ) ] ) , context: context) )
217+ { error in
218+ if let specificError = error as? OpenFeatureError {
219+ XCTAssertEqual ( specificError. errorCode ( ) , ErrorCode . typeMismatch)
220+ XCTAssertEqual ( specificError. description, " Type mismatch " )
175221 } else {
176222 XCTFail ( " expected a flag not found error " )
177223 }
0 commit comments