Skip to content

Commit 8acea8a

Browse files
author
Yasir Ali
committed
Test-cases implemented.
1 parent 5400f31 commit 8acea8a

File tree

4 files changed

+133
-8
lines changed

4 files changed

+133
-8
lines changed

OptimizelySDK/Optimizely/OptimizelyManager.swift

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -324,21 +324,24 @@ open class OptimizelyManager: NSObject {
324324
throw OptimizelyError.experimentUnknown
325325
}
326326

327-
// fix DecisionService to throw error
328-
guard let variation = decisionService.getVariation(config: config, userId: userId, experiment: experiment, attributes: attributes ?? OptimizelyAttributes()) else {
329-
throw OptimizelyError.variationUnknown
330-
}
331-
332327
var args = Array<Any?>()
333328
args.append(Constants.NotificationKeys.OptimizelyDecisionTypeExperiment)
334329
args.append(userId)
335330
args.append(attributes ?? OptimizelyAttributes())
336-
337331
var decisionInfo = Dictionary<String,Any>()
332+
decisionInfo[Constants.NotificationKeys.OptimizelyNotificationExperiment] = nil
333+
decisionInfo[Constants.NotificationKeys.OptimizelyNotificationVariation] = nil
334+
335+
// fix DecisionService to throw error
336+
guard let variation = decisionService.getVariation(config: config, userId: userId, experiment: experiment, attributes: attributes ?? OptimizelyAttributes()) else {
337+
args.append(decisionInfo)
338+
self.notificationCenter.sendNotifications(type: NotificationType.Decision.rawValue, args: args)
339+
throw OptimizelyError.variationUnknown
340+
}
341+
338342
decisionInfo[Constants.NotificationKeys.OptimizelyNotificationExperiment] = experimentKey
339343
decisionInfo[Constants.NotificationKeys.OptimizelyNotificationVariation] = variation.key
340344
args.append(decisionInfo)
341-
342345
self.notificationCenter.sendNotifications(type: NotificationType.Decision.rawValue, args: args)
343346

344347
return variation

OptimizelySDK/OptimizelySwiftSDK.xcodeproj/project.pbxproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1076,6 +1076,8 @@
10761076
6EF4B51C2239C7D9002DE8B6 /* BatchEventBuilderTests_Corners.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EF4B51B2239C7D9002DE8B6 /* BatchEventBuilderTests_Corners.swift */; };
10771077
6EF4B51D2239C7D9002DE8B6 /* BatchEventBuilderTests_Corners.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EF4B51B2239C7D9002DE8B6 /* BatchEventBuilderTests_Corners.swift */; };
10781078
825A305DA92576A5327962F4 /* Pods_OptimizelyTests_Common_tvOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8093F8A983E68BDB49E29737 /* Pods_OptimizelyTests_Common_tvOS.framework */; };
1079+
C79F9D862251F58F002B0BC9 /* DecisionListenerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C79F9D852251F58F002B0BC9 /* DecisionListenerTests.swift */; };
1080+
C79F9D872251F597002B0BC9 /* DecisionListenerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C79F9D852251F58F002B0BC9 /* DecisionListenerTests.swift */; };
10791081
/* End PBXBuildFile section */
10801082

10811083
/* Begin PBXContainerItemProxy section */
@@ -1299,6 +1301,7 @@
12991301
7C392E11ABAA00DDA1F864B9 /* Pods_OptimizelyTests_APIs_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_OptimizelyTests_APIs_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; };
13001302
8093F8A983E68BDB49E29737 /* Pods_OptimizelyTests_Common_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_OptimizelyTests_Common_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; };
13011303
AED4B61B2F7C775E23D39EBB /* Pods-OptimizelyTests-Common-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OptimizelyTests-Common-iOS.release.xcconfig"; path = "Target Support Files/Pods-OptimizelyTests-Common-iOS/Pods-OptimizelyTests-Common-iOS.release.xcconfig"; sourceTree = "<group>"; };
1304+
C79F9D852251F58F002B0BC9 /* DecisionListenerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DecisionListenerTests.swift; sourceTree = "<group>"; };
13021305
EAF81B0DD7CB1C74984C7538 /* Pods-OptimizelyTests-Common-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OptimizelyTests-Common-iOS.debug.xcconfig"; path = "Target Support Files/Pods-OptimizelyTests-Common-iOS/Pods-OptimizelyTests-Common-iOS.debug.xcconfig"; sourceTree = "<group>"; };
13031306
/* End PBXFileReference section */
13041307

@@ -1707,6 +1710,7 @@
17071710
0B894EBB224163FF004A2ADB /* EventDispatcherTest.swift */,
17081711
0BC47BD52242F7EF00E5C2CD /* DatafileHandlerTests.swift */,
17091712
0BC47BE42243012E00E5C2CD /* MurmurTests.swift */,
1713+
C79F9D852251F58F002B0BC9 /* DecisionListenerTests.swift */,
17101714
);
17111715
path = "OptimizelyTests-Common";
17121716
sourceTree = "<group>";
@@ -2881,6 +2885,7 @@
28812885
6EA4253E2218E4A300B074B5 /* Audience.swift in Sources */,
28822886
6EA425532218E4A300B074B5 /* Result.swift in Sources */,
28832887
0B77D05F22370526005AA83F /* BackgroundingCallbacks.swift in Sources */,
2888+
C79F9D872251F597002B0BC9 /* DecisionListenerTests.swift in Sources */,
28842889
6EA4254F2218E4A300B074B5 /* EventForDispatch+Extension.swift in Sources */,
28852890
6EA425262218E4A300B074B5 /* DefaultLogger.swift in Sources */,
28862891
6EA425282218E4A300B074B5 /* DefaultUserProfileService.swift in Sources */,
@@ -3357,6 +3362,7 @@
33573362
6E4DD8F321E530A900B0C2C7 /* OptimizelyResult.swift in Sources */,
33583363
6E4DD8A721E5260600B0C2C7 /* OPTUserProfileService.swift in Sources */,
33593364
6E4DD8A521E5260600B0C2C7 /* OPTEventDispatcher.swift in Sources */,
3365+
C79F9D862251F58F002B0BC9 /* DecisionListenerTests.swift in Sources */,
33603366
6E4DD8BD21E5261500B0C2C7 /* TrafficAllocation.swift in Sources */,
33613367
0B7B18882232DB8300A1F85D /* DataStoreMemory.swift in Sources */,
33623368
6EA4265122191EEC00B074B5 /* Array+Extension.swift in Sources */,
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
//
2+
/****************************************************************************
3+
* Copyright 2019, Optimizely, Inc. and contributors *
4+
* *
5+
* Licensed under the Apache License, Version 2.0 (the "License"); *
6+
* you may not use this file except in compliance with the License. *
7+
* You may obtain a copy of the License at *
8+
* *
9+
* http://www.apache.org/licenses/LICENSE-2.0 *
10+
* *
11+
* Unless required by applicable law or agreed to in writing, software *
12+
* distributed under the License is distributed on an "AS IS" BASIS, *
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
14+
* See the License for the specific language governing permissions and *
15+
* limitations under the License. *
16+
***************************************************************************/
17+
18+
19+
import XCTest
20+
21+
class DecisionListenerTests: XCTestCase {
22+
23+
func testDecisionListenerWithActivateWhenUserInExperiment() {
24+
let attributes: [String: Any?] = ["s_foo": "foo",
25+
"b_true": "N/A",
26+
"i_42": 44,
27+
"d_4_2": "N/A"]
28+
let optimizely = OTUtils.createOptimizely(datafileName: "audience_targeting", clearUserProfileService: true)
29+
var notificationVariation : String?
30+
var notificationExperiment : String?
31+
var notificationType: String?
32+
33+
_ = optimizely?.notificationCenter.addDecisionNotificationListener(decisionListener: { (type, userId, attributes, decisionInfo) in
34+
notificationExperiment = decisionInfo[Constants.NotificationKeys.OptimizelyNotificationExperiment] as? String
35+
notificationVariation = decisionInfo[Constants.NotificationKeys.OptimizelyNotificationVariation] as? String
36+
notificationType = type
37+
})
38+
39+
let variation = try? optimizely?.activate(experimentKey:
40+
"ab_running_exp_audience_combo_empty_conditions",
41+
userId: "test_user_1",
42+
attributes: attributes)
43+
44+
XCTAssertEqual(variation, "all_traffic_variation")
45+
XCTAssertEqual(notificationExperiment, "ab_running_exp_audience_combo_empty_conditions")
46+
XCTAssertEqual(notificationVariation, "all_traffic_variation")
47+
XCTAssertEqual(notificationType, Constants.NotificationKeys.OptimizelyDecisionTypeExperiment)
48+
}
49+
50+
func testDecisionListenerWithActivateWhenUserNotInExperiment() {
51+
let optimizely = OTUtils.createOptimizely(datafileName: "audience_targeting", clearUserProfileService: true)
52+
var notificationVariation : String?
53+
var notificationExperiment : String?
54+
var notificationType: String?
55+
56+
_ = optimizely?.notificationCenter.addDecisionNotificationListener(decisionListener: { (type, userId, attributes, decisionInfo) in
57+
notificationExperiment = decisionInfo[Constants.NotificationKeys.OptimizelyNotificationExperiment] as? String
58+
notificationVariation = decisionInfo[Constants.NotificationKeys.OptimizelyNotificationVariation] as? String
59+
notificationType = type
60+
})
61+
62+
_ = try? optimizely?.activate(experimentKey:
63+
"ab_running_exp_audience_combo_exact_foo_or_true__and__42_or_4_2",
64+
userId: "test_user_1",
65+
attributes: nil)
66+
67+
XCTAssertEqual(notificationExperiment, nil)
68+
XCTAssertEqual(notificationVariation, nil)
69+
XCTAssertEqual(notificationType, Constants.NotificationKeys.OptimizelyDecisionTypeExperiment)
70+
}
71+
72+
func testDecisionListenerWithGetVariationWhenUserInExperiment() {
73+
let attributes: [String: Any?] = ["s_foo": "foo",
74+
"b_true": "N/A",
75+
"i_42": 44,
76+
"d_4_2": "N/A"]
77+
let optimizely = OTUtils.createOptimizely(datafileName: "audience_targeting", clearUserProfileService: true)
78+
var notificationVariation : String?
79+
var notificationExperiment : String?
80+
var notificationType: String?
81+
82+
_ = optimizely?.notificationCenter.addDecisionNotificationListener(decisionListener: { (type, userId, _attributes, decisionInfo) in
83+
notificationExperiment = decisionInfo[Constants.NotificationKeys.OptimizelyNotificationExperiment] as? String
84+
notificationVariation = decisionInfo[Constants.NotificationKeys.OptimizelyNotificationVariation] as? String
85+
notificationType = type
86+
})
87+
88+
_ = try? optimizely?.getVariation(experimentKey: "ab_running_exp_audience_combo_empty_conditions",
89+
userId: "test_user_1",
90+
attributes: attributes)
91+
92+
XCTAssertEqual(notificationExperiment, "ab_running_exp_audience_combo_empty_conditions")
93+
XCTAssertEqual(notificationVariation, "all_traffic_variation")
94+
XCTAssertEqual(notificationType, Constants.NotificationKeys.OptimizelyDecisionTypeExperiment)
95+
}
96+
97+
func testDecisionListenerWithGetVariationWhenUserNotInExperiment() {
98+
let optimizely = OTUtils.createOptimizely(datafileName: "audience_targeting", clearUserProfileService: true)
99+
var notificationVariation : String?
100+
var notificationExperiment : String?
101+
var notificationType: String?
102+
103+
_ = optimizely?.notificationCenter.addDecisionNotificationListener(decisionListener: { (type, userId, attributes, decisionInfo) in
104+
notificationExperiment = decisionInfo[Constants.NotificationKeys.OptimizelyNotificationExperiment] as? String
105+
notificationVariation = decisionInfo[Constants.NotificationKeys.OptimizelyNotificationVariation] as? String
106+
notificationType = type
107+
})
108+
109+
_ = try? optimizely?.getVariation(experimentKey: "ab_running_exp_audience_combo_exact_foo_or_true__and__42_or_4_2", userId: "test_user_1")
110+
111+
XCTAssertEqual(notificationExperiment, nil)
112+
XCTAssertEqual(notificationVariation, nil)
113+
XCTAssertEqual(notificationType, Constants.NotificationKeys.OptimizelyDecisionTypeExperiment)
114+
}
115+
116+
}

Podfile.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,4 @@ SPEC CHECKSUMS:
5757

5858
PODFILE CHECKSUM: 4f4ce5504801dbc19d61fee45d7740aa732a995c
5959

60-
COCOAPODS: 1.6.1
60+
COCOAPODS: 1.6.0

0 commit comments

Comments
 (0)