Skip to content

Commit c868c29

Browse files
wip: HoldoutConfig test cases added
1 parent 528aa0d commit c868c29

File tree

3 files changed

+120
-4
lines changed

3 files changed

+120
-4
lines changed

OptimizelySwiftSDK.xcodeproj/project.pbxproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2050,6 +2050,8 @@
20502050
98AC97EF2DAE4579001405DD /* HoldoutConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98AC97E12DAE4579001405DD /* HoldoutConfig.swift */; };
20512051
98AC97F02DAE4579001405DD /* HoldoutConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98AC97E12DAE4579001405DD /* HoldoutConfig.swift */; };
20522052
98AC97F12DAE4579001405DD /* HoldoutConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98AC97E12DAE4579001405DD /* HoldoutConfig.swift */; };
2053+
98AC97F32DAE9685001405DD /* HoldoutConfigTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98AC97F22DAE9685001405DD /* HoldoutConfigTests.swift */; };
2054+
98AC97F42DAE9685001405DD /* HoldoutConfigTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98AC97F22DAE9685001405DD /* HoldoutConfigTests.swift */; };
20532055
BD1C3E8524E4399C0084B4DA /* SemanticVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B97DD93249D327F003DE606 /* SemanticVersion.swift */; };
20542056
BD64853C2491474500F30986 /* Optimizely.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E75167A22C520D400B2B157 /* Optimizely.h */; settings = {ATTRIBUTES = (Public, ); }; };
20552057
BD64853E2491474500F30986 /* Audience.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E75169822C520D400B2B157 /* Audience.swift */; };
@@ -2494,6 +2496,7 @@
24942496
984FE5102CC8AA88004F6F41 /* UserProfileTracker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserProfileTracker.swift; sourceTree = "<group>"; };
24952497
987F11D92AF3F56F0083D3F9 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
24962498
98AC97E12DAE4579001405DD /* HoldoutConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HoldoutConfig.swift; sourceTree = "<group>"; };
2499+
98AC97F22DAE9685001405DD /* HoldoutConfigTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HoldoutConfigTests.swift; sourceTree = "<group>"; };
24972500
BD6485812491474500F30986 /* Optimizely.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Optimizely.framework; sourceTree = BUILT_PRODUCTS_DIR; };
24982501
C78CAF572445AD8D009FE876 /* OptimizelyJSON.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OptimizelyJSON.swift; sourceTree = "<group>"; };
24992502
C78CAF652446DB91009FE876 /* OptimizelyClientTests_OptimizelyJSON.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OptimizelyClientTests_OptimizelyJSON.swift; sourceTree = "<group>"; };
@@ -3066,6 +3069,7 @@
30663069
6E7519A622C5211100B2B157 /* AttributeValueTests_Evaluate.swift */,
30673070
6E7519A722C5211100B2B157 /* RolloutTests.swift */,
30683071
6E7519A822C5211100B2B157 /* ProjectConfigTests.swift */,
3072+
98AC97F22DAE9685001405DD /* HoldoutConfigTests.swift */,
30693073
6E7519A922C5211100B2B157 /* UserAttributeTests.swift */,
30703074
6E7519AA22C5211100B2B157 /* GroupTests.swift */,
30713075
6E7519AB22C5211100B2B157 /* VariationTests.swift */,
@@ -5085,6 +5089,7 @@
50855089
6E8A3D522637408500DAEA13 /* MockDatafileHandler.swift in Sources */,
50865090
6E75180E22C520D400B2B157 /* DataStoreFile.swift in Sources */,
50875091
6E9B11B822C5489600C22D81 /* OTUtils.swift in Sources */,
5092+
98AC97F42DAE9685001405DD /* HoldoutConfigTests.swift in Sources */,
50885093
6E9B119022C5488300C22D81 /* AttributeValueTests.swift in Sources */,
50895094
6E994B4025A3E6EA00999262 /* DecisionResponse.swift in Sources */,
50905095
84E2E9802855875E001114AB /* OdpEventManager.swift in Sources */,
@@ -5361,6 +5366,7 @@
53615366
6E8A3D4D2637408500DAEA13 /* MockDatafileHandler.swift in Sources */,
53625367
6E75180922C520D400B2B157 /* DataStoreFile.swift in Sources */,
53635368
6E9B11AE22C5489300C22D81 /* OTUtils.swift in Sources */,
5369+
98AC97F32DAE9685001405DD /* HoldoutConfigTests.swift in Sources */,
53645370
6E9B117A22C5488100C22D81 /* AttributeValueTests.swift in Sources */,
53655371
6E994B3B25A3E6EA00999262 /* DecisionResponse.swift in Sources */,
53665372
84E2E97B2855875E001114AB /* OdpEventManager.swift in Sources */,
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
//
2+
// Copyright 2022, Optimizely, Inc. and contributors
3+
//
4+
// Licensed under the Apache License, Version 2.0 (the "License");
5+
// you may not use this file except in compliance with the License.
6+
// You may obtain a copy of the License at
7+
//
8+
// http://www.apache.org/licenses/LICENSE-2.0
9+
//
10+
// Unless required by applicable law or agreed to in writing, software
11+
// distributed under the License is distributed on an "AS IS" BASIS,
12+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
// See the License for the specific language governing permissions and
14+
// limitations under the License.
15+
//
16+
17+
import XCTest
18+
19+
class HoldoutConfigTests: XCTestCase {
20+
21+
func testHoldoutMap() {
22+
let holdout0: Holdout = try! OTUtils.model(from: HoldoutTests.sampleData)
23+
let holdout1: Holdout = try! OTUtils.model(from: HoldoutTests.sampleDataWithIncludedFlags)
24+
let holdout2: Holdout = try! OTUtils.model(from: HoldoutTests.sampleDataWithExcludedFlags)
25+
26+
let allHoldouts = [holdout0, holdout1, holdout2]
27+
28+
29+
let holdoutConfig = HoldoutConfig(allholdouts: allHoldouts)
30+
31+
XCTAssertEqual(holdoutConfig.holdoutIdMap["11111"]?.includedFlags, [])
32+
XCTAssertEqual(holdoutConfig.holdoutIdMap["11111"]?.excludedFlags, [])
33+
34+
XCTAssertEqual(holdoutConfig.holdoutIdMap["55555"]?.includedFlags, ["4444", "5555"])
35+
XCTAssertEqual(holdoutConfig.holdoutIdMap["55555"]?.excludedFlags, [])
36+
37+
XCTAssertEqual(holdoutConfig.holdoutIdMap["3333"]?.includedFlags, [])
38+
XCTAssertEqual(holdoutConfig.holdoutIdMap["3333"]?.excludedFlags, ["8888", "9999"])
39+
40+
41+
XCTAssertEqual(holdoutConfig.global, [holdout0])
42+
XCTAssertEqual(holdoutConfig.others, [holdout2])
43+
44+
XCTAssertEqual(holdoutConfig.includedHoldouts["4444"], [holdout1])
45+
XCTAssertEqual(holdoutConfig.excludedHoldouts["8888"], [holdout2])
46+
47+
}
48+
49+
func testGetHoldoutById() {
50+
var holdout0: Holdout = try! OTUtils.model(from: HoldoutTests.sampleData)
51+
holdout0.id = "00000"
52+
53+
var holdout1: Holdout = try! OTUtils.model(from: HoldoutTests.sampleDataWithIncludedFlags)
54+
holdout1.id = "11111"
55+
56+
var holdout2: Holdout = try! OTUtils.model(from: HoldoutTests.sampleDataWithExcludedFlags)
57+
holdout2.id = "22222"
58+
59+
let allHoldouts = [holdout0, holdout1, holdout2]
60+
61+
62+
let holdoutConfig = HoldoutConfig(allholdouts: allHoldouts)
63+
64+
XCTAssertEqual(holdoutConfig.getHoldout(id: "00000"), holdout0)
65+
XCTAssertEqual(holdoutConfig.getHoldout(id: "11111"), holdout1)
66+
XCTAssertEqual(holdoutConfig.getHoldout(id: "22222"), holdout2)
67+
68+
}
69+
70+
func testGetHoldoutForFlag() {
71+
72+
let flag1 = "11111"
73+
let flag2 = "22222"
74+
let flag3 = "33333"
75+
let flag4 = "44444"
76+
77+
var holdout1: Holdout = try! OTUtils.model(from: HoldoutTests.sampleData)
78+
holdout1.id = "11"
79+
holdout1.includedFlags = [flag1]
80+
holdout1.excludedFlags = []
81+
82+
var holdout2: Holdout = try! OTUtils.model(from: HoldoutTests.sampleData)
83+
holdout2.id = "22"
84+
holdout2.includedFlags = []
85+
holdout2.excludedFlags = [flag2]
86+
87+
var holdout3: Holdout = try! OTUtils.model(from: HoldoutTests.sampleData)
88+
holdout3.id = "33"
89+
holdout3.includedFlags = []
90+
holdout3.excludedFlags = []
91+
92+
var holdout4: Holdout = try! OTUtils.model(from: HoldoutTests.sampleData)
93+
holdout4.id = "44"
94+
holdout4.includedFlags = []
95+
holdout4.excludedFlags = []
96+
97+
98+
let allHoldouts = [holdout1, holdout2, holdout3, holdout4]
99+
var holdoutConfig = HoldoutConfig(allholdouts: allHoldouts)
100+
101+
// Should maintain order. Global first then lcoal
102+
XCTAssertEqual(holdoutConfig.getHoldoutForFlag(id: flag1), [holdout3, holdout4, holdout1])
103+
XCTAssertEqual(holdoutConfig.getHoldoutForFlag(id: flag2), [holdout3, holdout4])
104+
XCTAssertEqual(holdoutConfig.getHoldoutForFlag(id: flag3), [holdout3, holdout4, holdout2])
105+
XCTAssertEqual(holdoutConfig.getHoldoutForFlag(id: flag4), [holdout3, holdout4, holdout2])
106+
107+
}
108+
109+
110+
111+
}

Tests/OptimizelyTests-DataModel/HoldoutTests.swift

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,15 +52,14 @@ class HoldoutTests: XCTestCase {
5252
"audienceConditions": HoldoutTests.conditionHolderData,
5353
"includedFlags": ["4444", "5555"]]
5454

55-
static var sampleDataWithIncludedAndExcludedFlags: [String: Any] = ["id": "3333",
55+
static var sampleDataWithExcludedFlags: [String: Any] = ["id": "3333",
5656
"key": "background",
5757
"status": "Running",
5858
"layerId": "22222",
5959
"variations": [HoldoutTests.variationData],
6060
"trafficAllocation": [HoldoutTests.trafficAllocationData],
6161
"audienceIds": ["33333"],
6262
"audienceConditions": HoldoutTests.conditionHolderData,
63-
"includedFlags": ["4444", "5555"],
6463
"excludedFlags": ["8888", "9999"]]
6564

6665

@@ -102,11 +101,11 @@ extension HoldoutTests {
102101
}
103102

104103
func testDecodeSuccessWithIncludedAndExcludedFlags() {
105-
let data: [String: Any] = HoldoutTests.sampleDataWithIncludedAndExcludedFlags
104+
let data: [String: Any] = HoldoutTests.sampleDataWithExcludedFlags
106105

107106
let model: Holdout = try! OTUtils.model(from: data)
108107

109-
XCTAssert(model.id == "11111")
108+
XCTAssert(model.id == "3333")
110109
XCTAssert(model.key == "background")
111110
XCTAssert(model.status == .running)
112111
XCTAssert(model.layerId == "22222")

0 commit comments

Comments
 (0)