Skip to content

Commit a33bb3e

Browse files
test: OF testing with object evals
1 parent a260107 commit a33bb3e

File tree

1 file changed

+49
-3
lines changed

1 file changed

+49
-3
lines changed

Tests/ConfidenceProviderTests/ConfidenceProviderTest.swift

Lines changed: 49 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)