Skip to content

Commit f69dc52

Browse files
test: All types in provider
1 parent 8ebb9c2 commit f69dc52

File tree

1 file changed

+129
-0
lines changed

1 file changed

+129
-0
lines changed

Tests/ConfidenceProviderTests/ConfidenceProviderTest.swift

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -532,6 +532,135 @@ class ConfidenceProviderTest: XCTestCase {
532532
error.localizedDescription.contains("error"))
533533
}
534534
}
535+
536+
// swiftlint:disable:next function_body_length
537+
func testProviderResolveStructAllValueTypes() async throws {
538+
let context = MutableContext(targetingKey: "user2")
539+
let storage = StorageMock()
540+
541+
let testDate = Date(timeIntervalSince1970: 1640995200) // 2022-01-01 00:00:00 UTC
542+
543+
let resolvedValue = createResolvedValue(
544+
structure: [
545+
"booleanValue": .init(boolean: true),
546+
"stringValue": .init(string: "resolved string"),
547+
"integerValue": .init(integer: 42),
548+
"doubleValue": .init(double: 3.14159),
549+
"dateValue": .init(timestamp: testDate),
550+
"booleanList": .init(booleanList: [true, false, true]),
551+
"stringList": .init(stringList: ["a", "b", "c"]),
552+
"integerList": .init(integerList: [1, 2, 3]),
553+
"doubleList": .init(doubleList: [1.1, 2.2, 3.3]),
554+
"timestampList": .init(timestampList: [testDate, testDate]),
555+
"nestedStruct": .init(structure: [
556+
"nestedString": .init(string: "nested value"),
557+
"nestedInteger": .init(integer: 100),
558+
"nestedBoolean": .init(boolean: false)
559+
])
560+
]
561+
)
562+
let client = createFakeClient(resolvedValues: [resolvedValue])
563+
564+
let confidence = Confidence.Builder(clientSecret: "test")
565+
.withContext(initialContext: ["targeting_key": .init(string: "user2")])
566+
.withFlagResolverClient(flagResolver: client)
567+
.withStorage(storage: storage)
568+
.build()
569+
570+
let cancellable = await setupProviderAndWaitForReady(confidence: confidence)
571+
cancellable.cancel()
572+
573+
let provider = ConfidenceFeatureProvider(confidence: confidence, initializationStrategy: .fetchAndActivate)
574+
let evaluation = try provider.getObjectEvaluation(
575+
key: "flag",
576+
defaultValue: Value.structure([
577+
"booleanValue": .boolean(false),
578+
"stringValue": .string("default string"),
579+
"integerValue": .integer(0),
580+
"doubleValue": .double(0.0),
581+
"dateValue": .date(testDate),
582+
"booleanList": .list([.boolean(false)]),
583+
"stringList": .list([.string("default")]),
584+
"integerList": .list([.integer(0)]),
585+
"doubleList": .list([.double(0.0)]),
586+
"timestampList": .list([.date(testDate)]),
587+
"nestedStruct": .structure([
588+
"nestedString": .string("default nested"),
589+
"nestedInteger": .integer(0),
590+
"nestedBoolean": .boolean(true)
591+
])
592+
]),
593+
context: context)
594+
595+
guard case let .structure(resultMap) = evaluation.value else {
596+
XCTFail("Expected structure value")
597+
return
598+
}
599+
600+
XCTAssertEqual(resultMap["booleanValue"], .boolean(true))
601+
XCTAssertEqual(resultMap["stringValue"], .string("resolved string"))
602+
XCTAssertEqual(resultMap["integerValue"], .integer(42))
603+
XCTAssertEqual(resultMap["doubleValue"], .double(3.14159))
604+
XCTAssertEqual(resultMap["dateValue"], .date(testDate))
605+
606+
// Test lists
607+
guard case let .list(booleanList) = resultMap["booleanList"] else {
608+
XCTFail("Expected boolean list")
609+
return
610+
}
611+
XCTAssertEqual(booleanList.count, 3)
612+
XCTAssertEqual(booleanList[0], .boolean(true))
613+
XCTAssertEqual(booleanList[1], .boolean(false))
614+
XCTAssertEqual(booleanList[2], .boolean(true))
615+
616+
guard case let .list(stringList) = resultMap["stringList"] else {
617+
XCTFail("Expected string list")
618+
return
619+
}
620+
XCTAssertEqual(stringList.count, 3)
621+
XCTAssertEqual(stringList[0], .string("a"))
622+
XCTAssertEqual(stringList[1], .string("b"))
623+
XCTAssertEqual(stringList[2], .string("c"))
624+
625+
guard case let .list(integerList) = resultMap["integerList"] else {
626+
XCTFail("Expected integer list")
627+
return
628+
}
629+
XCTAssertEqual(integerList.count, 3)
630+
XCTAssertEqual(integerList[0], .integer(1))
631+
XCTAssertEqual(integerList[1], .integer(2))
632+
XCTAssertEqual(integerList[2], .integer(3))
633+
634+
guard case let .list(doubleList) = resultMap["doubleList"] else {
635+
XCTFail("Expected double list")
636+
return
637+
}
638+
XCTAssertEqual(doubleList.count, 3)
639+
XCTAssertEqual(doubleList[0], .double(1.1))
640+
XCTAssertEqual(doubleList[1], .double(2.2))
641+
XCTAssertEqual(doubleList[2], .double(3.3))
642+
643+
guard case let .list(timestampList) = resultMap["timestampList"] else {
644+
XCTFail("Expected timestamp list")
645+
return
646+
}
647+
XCTAssertEqual(timestampList.count, 2)
648+
XCTAssertEqual(timestampList[0], .date(testDate))
649+
XCTAssertEqual(timestampList[1], .date(testDate))
650+
651+
guard case let .structure(nestedStruct) = resultMap["nestedStruct"] else {
652+
XCTFail("Expected nested structure value")
653+
return
654+
}
655+
XCTAssertEqual(nestedStruct["nestedString"], .string("nested value"))
656+
XCTAssertEqual(nestedStruct["nestedInteger"], .integer(100))
657+
XCTAssertEqual(nestedStruct["nestedBoolean"], .boolean(false))
658+
659+
XCTAssertEqual(evaluation.variant, "control")
660+
XCTAssertEqual(evaluation.reason, "RESOLVE_REASON_MATCH")
661+
XCTAssertNil(evaluation.errorCode)
662+
XCTAssertNil(evaluation.errorMessage)
663+
}
535664
}
536665

537666
private class StorageMock: Storage {

0 commit comments

Comments
 (0)