@@ -75,4 +75,104 @@ class TestVariationTests: XCTestCase {
75
75
XCTAssert ( !feature. isEnabled ( ) , " Pass " )
76
76
}
77
77
78
+ func testWhenTestVariationsAreEnabledAndDisabledThenTypeIsFeatureFlagAB( ) {
79
+ let featureConfiguration =
80
+ """
81
+ [{
82
+ " name " : " Example Feature A/B Test " ,
83
+ " enabled " : false,
84
+ " test-variations " : [ " Enabled " , " Disabled " ]
85
+ }]
86
+ """
87
+ let decoder = JSONDecoder ( )
88
+ guard let featuresData = featureConfiguration. data ( using: . utf8) ,
89
+ let features = try ? decoder. decode ( [ Feature ] . self, from: featuresData) ,
90
+ let feature = features. first else {
91
+ XCTAssert ( false , " Fail " )
92
+ return
93
+ }
94
+ XCTAssertEqual ( feature. type, . featureTest( . featureFlagAB) )
95
+ }
96
+
97
+ func testWhenTestVariationsAreEnabled_DisabledAndBiasesAre80_20ThenEnabledBiasIs80( ) {
98
+ let featureConfiguration =
99
+ """
100
+ [{
101
+ " name " : " Example Feature A/B Test " ,
102
+ " enabled " : true,
103
+ " test-biases " : [80, 20],
104
+ " test-variations " : [ " Enabled " , " Disabled " ]
105
+ }]
106
+ """
107
+ let decoder = JSONDecoder ( )
108
+ guard let featuresData = featureConfiguration. data ( using: . utf8) ,
109
+ let features = try ? decoder. decode ( [ Feature ] . self, from: featuresData) ,
110
+ let feature = features. first else {
111
+ XCTAssert ( false , " Fail " )
112
+ return
113
+ }
114
+ XCTAssertEqual ( feature. testVariations. count, 2 )
115
+ XCTAssertEqual ( feature. testBias ( . enabled) ? . rawValue, 80 )
116
+ XCTAssertEqual ( feature. testBias ( . disabled) ? . rawValue, 20 )
117
+ }
118
+
119
+ func testWhenTestVariationsAreDisabledAndEnabledThenTypeIsFeatureFlagAB( ) {
120
+ let featureConfiguration =
121
+ """
122
+ [{
123
+ " name " : " Example Feature A/B Test " ,
124
+ " enabled " : false,
125
+ " test-variations " : [ " Disabled " , " Enabled " ]
126
+ }]
127
+ """
128
+ let decoder = JSONDecoder ( )
129
+ guard let featuresData = featureConfiguration. data ( using: . utf8) ,
130
+ let features = try ? decoder. decode ( [ Feature ] . self, from: featuresData) ,
131
+ let feature = features. first else {
132
+ XCTAssert ( false , " Fail " )
133
+ return
134
+ }
135
+ XCTAssertEqual ( feature. type, . featureTest( . featureFlagAB) )
136
+ }
137
+
138
+ func testWhenTestVariationsAreDisabled_EnabledAndBiasesAre80_20ThenEnabledBiasIs20( ) {
139
+ let featureConfiguration =
140
+ """
141
+ [{
142
+ " name " : " Example Feature A/B Test " ,
143
+ " enabled " : true,
144
+ " test-biases " : [80, 20],
145
+ " test-variations " : [ " Disabled " , " Enabled " ]
146
+ }]
147
+ """
148
+ let decoder = JSONDecoder ( )
149
+ guard let featuresData = featureConfiguration. data ( using: . utf8) ,
150
+ let features = try ? decoder. decode ( [ Feature ] . self, from: featuresData) ,
151
+ let feature = features. first else {
152
+ XCTAssert ( false , " Fail " )
153
+ return
154
+ }
155
+ XCTAssertEqual ( feature. testVariations. count, 2 )
156
+ XCTAssertEqual ( feature. testBias ( . enabled) ? . rawValue, 20 )
157
+ XCTAssertEqual ( feature. testBias ( . disabled) ? . rawValue, 80 )
158
+ }
159
+
160
+ func testWhenTestVariationsAreAAndBThenTypeIsFeatureTestAB( ) {
161
+ let featureConfiguration =
162
+ """
163
+ [{
164
+ " name " : " Example Feature A/B Test " ,
165
+ " enabled " : false,
166
+ " test-variations " : [ " A " , " B " ]
167
+ }]
168
+ """
169
+ let decoder = JSONDecoder ( )
170
+ guard let featuresData = featureConfiguration. data ( using: . utf8) ,
171
+ let features = try ? decoder. decode ( [ Feature ] . self, from: featuresData) ,
172
+ let feature = features. first else {
173
+ XCTAssert ( false , " Fail " )
174
+ return
175
+ }
176
+ XCTAssertEqual ( feature. type, . featureTest( . ab) )
177
+ }
78
178
}
0 commit comments