|
| 1 | +import Combine |
1 | 2 | import Foundation |
2 | 3 | import XCTest |
3 | | -import Combine |
4 | 4 |
|
5 | 5 | @testable import OpenFeature |
6 | 6 |
|
@@ -129,35 +129,40 @@ final class FlagEvaluationTests: XCTestCase { |
129 | 129 | wait(for: [readyExpectation], timeout: 5) |
130 | 130 | let client = OpenFeatureAPI.shared.getClient() |
131 | 131 | let key = "key" |
132 | | - let booleanDetails = FlagEvaluationDetails(flagKey: key, value: true, variant: nil) |
| 132 | + let booleanDetails = FlagEvaluationDetails( |
| 133 | + flagKey: key, value: true, flagMetadata: DoSomethingProvider.flagMetadataMap, variant: nil) |
133 | 134 | XCTAssertEqual(client.getDetails(key: key, defaultValue: false), booleanDetails) |
134 | 135 | XCTAssertEqual(client.getDetails(key: key, defaultValue: false), booleanDetails) |
135 | 136 | XCTAssertEqual( |
136 | 137 | client.getDetails( |
137 | 138 | key: key, defaultValue: false, options: FlagEvaluationOptions()), booleanDetails) |
138 | 139 |
|
139 | | - let stringDetails = FlagEvaluationDetails(flagKey: key, value: "tset", variant: nil) |
| 140 | + let stringDetails = FlagEvaluationDetails( |
| 141 | + flagKey: key, value: "tset", flagMetadata: DoSomethingProvider.flagMetadataMap, variant: nil) |
140 | 142 | XCTAssertEqual(client.getDetails(key: key, defaultValue: "test"), stringDetails) |
141 | 143 | XCTAssertEqual(client.getDetails(key: key, defaultValue: "test"), stringDetails) |
142 | 144 | XCTAssertEqual( |
143 | 145 | client.getDetails( |
144 | 146 | key: key, defaultValue: "test", options: FlagEvaluationOptions()), stringDetails) |
145 | 147 |
|
146 | | - let integerDetails = FlagEvaluationDetails(flagKey: key, value: Int64(400), variant: nil) |
| 148 | + let integerDetails = FlagEvaluationDetails( |
| 149 | + flagKey: key, value: Int64(400), flagMetadata: DoSomethingProvider.flagMetadataMap, variant: nil) |
147 | 150 | XCTAssertEqual(client.getDetails(key: key, defaultValue: 4), integerDetails) |
148 | 151 | XCTAssertEqual(client.getDetails(key: key, defaultValue: 4), integerDetails) |
149 | 152 | XCTAssertEqual( |
150 | 153 | client.getDetails( |
151 | 154 | key: key, defaultValue: 4, options: FlagEvaluationOptions()), integerDetails) |
152 | 155 |
|
153 | | - let doubleDetails = FlagEvaluationDetails(flagKey: key, value: 40.0, variant: nil) |
| 156 | + let doubleDetails = FlagEvaluationDetails( |
| 157 | + flagKey: key, value: 40.0, flagMetadata: DoSomethingProvider.flagMetadataMap, variant: nil) |
154 | 158 | XCTAssertEqual(client.getDetails(key: key, defaultValue: 0.4), doubleDetails) |
155 | 159 | XCTAssertEqual(client.getDetails(key: key, defaultValue: 0.4), doubleDetails) |
156 | 160 | XCTAssertEqual( |
157 | 161 | client.getDetails( |
158 | 162 | key: key, defaultValue: 0.4, options: FlagEvaluationOptions()), doubleDetails) |
159 | 163 |
|
160 | | - let objectDetails = FlagEvaluationDetails(flagKey: key, value: Value.null, variant: nil) |
| 164 | + let objectDetails = FlagEvaluationDetails( |
| 165 | + flagKey: key, value: Value.null, flagMetadata: DoSomethingProvider.flagMetadataMap, variant: nil) |
161 | 166 | XCTAssertEqual(client.getDetails(key: key, defaultValue: .structure([:])), objectDetails) |
162 | 167 | XCTAssertEqual( |
163 | 168 | client.getDetails(key: key, defaultValue: .structure([:])), objectDetails) |
@@ -272,4 +277,22 @@ final class FlagEvaluationTests: XCTestCase { |
272 | 277 | let client = OpenFeatureAPI.shared.getClient(name: "test", version: nil) |
273 | 278 | XCTAssertEqual(client.metadata.name, "test") |
274 | 279 | } |
| 280 | + |
| 281 | + func testFlagMetadata() { |
| 282 | + OpenFeatureAPI.shared.setProvider(provider: DoSomethingProvider()) |
| 283 | + let client = OpenFeatureAPI.shared.getClient() |
| 284 | + let details = client.getDetails(key: "testkey", defaultValue: false) |
| 285 | + |
| 286 | + // These test values are hard coded for all evaluations from the DoSomethingProvider |
| 287 | + XCTAssertEqual(details.flagMetadata["int-metadata"]?.asInteger(), 99) |
| 288 | + XCTAssertEqual(details.flagMetadata["double-metadata"]?.asDouble(), 98.4) |
| 289 | + XCTAssertEqual(details.flagMetadata["string-metadata"]?.asString(), "hello-world") |
| 290 | + XCTAssertEqual(details.flagMetadata["boolean-metadata"]?.asBoolean(), true) |
| 291 | + |
| 292 | + // Non existent key |
| 293 | + XCTAssertNil(details.flagMetadata["non-existent-key"]) |
| 294 | + |
| 295 | + // Invalid mapping an int to string returns nil |
| 296 | + XCTAssertNil(details.flagMetadata["int-metadata"]?.asString()) |
| 297 | + } |
275 | 298 | } |
0 commit comments