Skip to content

Commit 25415e7

Browse files
authored
Merge pull request #138 from optimizely/jae/dispatcher2
add tests for events batching
2 parents 1b7c98a + 439e908 commit 25415e7

File tree

10 files changed

+689
-120
lines changed

10 files changed

+689
-120
lines changed

OptimizelySDK/Customization/DefaultEventDispatcher.swift

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,11 @@ open class DefaultEventDispatcher : BackgroundingCallbacks, OPTEventDispatcher {
7373
unsubscribe()
7474
}
7575

76-
open func dispatchEvent(event: EventForDispatch, completionHandler: @escaping DispatchCompletionHandler) {
77-
76+
open func dispatchEvent(event: EventForDispatch, completionHandler: DispatchCompletionHandler?) {
7877
dataStore.save(item: event)
7978

79+
// TODO: use or clean up completionHandler
80+
8081
setTimer()
8182
}
8283

@@ -221,29 +222,29 @@ open class DefaultEventDispatcher : BackgroundingCallbacks, OPTEventDispatcher {
221222
}
222223

223224
func setTimer() {
224-
if let _ = timer.property {
225-
return // already set....
225+
// timer is activated only for iOS10+ and non-zero interval value
226+
guard #available(iOS 10.0, tvOS 10.0, *), timerInterval > 0 else {
227+
flushEvents()
228+
return
226229
}
227230

228-
if timerInterval == 0 { return }
231+
guard self.timer.property == nil else { return }
229232

230-
if #available(iOS 10.0, tvOS 10.0, *) {
231-
DispatchQueue.main.async {
232-
self.timer.property = Timer.scheduledTimer(withTimeInterval: self.timerInterval, repeats: true) { (timer) in
233-
if self.dataStore.count == 0 {
234-
self.timer.performAtomic() { (timer) in
235-
timer.invalidate()
236-
}
237-
self.timer.property = nil
238-
}
239-
else {
240-
self.flushEvents()
233+
DispatchQueue.main.async {
234+
// should check here again
235+
guard self.timer.property == nil else { return }
236+
237+
self.timer.property = Timer.scheduledTimer(withTimeInterval: self.timerInterval, repeats: true) { (timer) in
238+
if self.dataStore.count == 0 {
239+
self.timer.performAtomic() { (timer) in
240+
timer.invalidate()
241241
}
242+
self.timer.property = nil
243+
}
244+
else {
245+
self.flushEvents()
242246
}
243247
}
244-
} else {
245-
// Fallback on earlier versions
246-
flushEvents()
247248
}
248249
}
249250
}

OptimizelySDK/Customization/Protocols/OPTEventDispatcher.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public protocol OPTEventDispatcher {
3535
- Parameter event: EventForDispatch object which contains the url to send to and the body.
3636
- Parameter completionHandler: Called when the event has been sent or if an error occured. This may not be called in the case where the dispatcher is doing batch events. It is up to the implementor of the protocol.
3737
*/
38-
func dispatchEvent(event:EventForDispatch, completionHandler: @escaping DispatchCompletionHandler)
38+
func dispatchEvent(event:EventForDispatch, completionHandler: DispatchCompletionHandler?)
3939

4040
/// Attempts to flush the event queue if there are any events to process.
4141
func flushEvents()

OptimizelySDK/Data Model/DispatchEvents/BatchEvent.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,9 @@ struct Snapshot: Codable, Equatable {
7272
}
7373

7474
struct Decision: Codable, Equatable {
75-
let variationID, campaignID, experimentID: String
75+
let variationID: String
76+
let campaignID: String
77+
let experimentID: String
7678

7779
enum CodingKeys: String, CodingKey {
7880
case variationID = "variation_id"

OptimizelySDK/OptimizelySwiftSDK.xcodeproj/project.pbxproj

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,8 @@
104104
0B7B9EC521F51AF600056589 /* DataStoreFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B7B9EC221F2ACB100056589 /* DataStoreFile.swift */; };
105105
0B7B9EC621F51AF700056589 /* DataStoreFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B7B9EC221F2ACB100056589 /* DataStoreFile.swift */; };
106106
0B8F537E223FFB0500C56082 /* OptimizelyManagerTests_Group.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B8F537B223FFB0500C56082 /* OptimizelyManagerTests_Group.swift */; };
107-
0BAB9AFE22567E21000DC388 /* EventDispatcherTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B894EBB224163FF004A2ADB /* EventDispatcherTest.swift */; };
108-
0BAB9AFF22567E24000DC388 /* EventDispatcherTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B894EBB224163FF004A2ADB /* EventDispatcherTest.swift */; };
107+
0BAB9AFE22567E21000DC388 /* EventDispatcherTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B894EBB224163FF004A2ADB /* EventDispatcherTests.swift */; };
108+
0BAB9AFF22567E24000DC388 /* EventDispatcherTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B894EBB224163FF004A2ADB /* EventDispatcherTests.swift */; };
109109
0BAB9B0122567E34000DC388 /* (null) in Sources */ = {isa = PBXBuildFile; };
110110
0BC47BD62242F7EF00E5C2CD /* DatafileHandlerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BC47BD52242F7EF00E5C2CD /* DatafileHandlerTests.swift */; };
111111
0BC47BD72242F7EF00E5C2CD /* DatafileHandlerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BC47BD52242F7EF00E5C2CD /* DatafileHandlerTests.swift */; };
@@ -530,8 +530,8 @@
530530
6E8B6A49221CBBC5006EA8A6 /* GroupTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E8B6A47221CBBC5006EA8A6 /* GroupTests.swift */; };
531531
6E8B6A4B221CC2D6006EA8A6 /* ProjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E8B6A4A221CC2D6006EA8A6 /* ProjectTests.swift */; };
532532
6E8B6A4C221CC2D6006EA8A6 /* ProjectTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E8B6A4A221CC2D6006EA8A6 /* ProjectTests.swift */; };
533-
6E8CB59E224BF4BE00B8CB7A /* DecisionServiceTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E8CB598224BF4BE00B8CB7A /* DecisionServiceTest.swift */; };
534-
6E8CB59F224BF4BE00B8CB7A /* DecisionServiceTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E8CB598224BF4BE00B8CB7A /* DecisionServiceTest.swift */; };
533+
6E8CB59E224BF4BE00B8CB7A /* DecisionServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E8CB598224BF4BE00B8CB7A /* DecisionServiceTests.swift */; };
534+
6E8CB59F224BF4BE00B8CB7A /* DecisionServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E8CB598224BF4BE00B8CB7A /* DecisionServiceTests.swift */; };
535535
6E8CB5A0224BF4BE00B8CB7A /* DecisionServiceTests_Others.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E8CB599224BF4BE00B8CB7A /* DecisionServiceTests_Others.swift */; };
536536
6E8CB5A1224BF4BE00B8CB7A /* DecisionServiceTests_Others.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E8CB599224BF4BE00B8CB7A /* DecisionServiceTests_Others.swift */; };
537537
6E8CB5A2224BF4BE00B8CB7A /* DecisionServiceTests_Features.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E8CB59A224BF4BE00B8CB7A /* DecisionServiceTests_Features.swift */; };
@@ -1037,6 +1037,8 @@
10371037
6EBAEB7C21E3FEF900D13AA9 /* Optimizely.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EBAEB6E21E3FEF800D13AA9 /* Optimizely.h */; settings = {ATTRIBUTES = (Public, ); }; };
10381038
6EC126172218D97E00C1FC97 /* OTUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E7FC6A222121D27009A171F /* OTUtils.swift */; };
10391039
6EC126182218D97F00C1FC97 /* OTUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E7FC6A222121D27009A171F /* OTUtils.swift */; };
1040+
6EC8D011225CFAB2000B20A4 /* EventDispatcherTests_Batch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EC8D010225CFAB2000B20A4 /* EventDispatcherTests_Batch.swift */; };
1041+
6EC8D012225CFAB2000B20A4 /* EventDispatcherTests_Batch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EC8D010225CFAB2000B20A4 /* EventDispatcherTests_Batch.swift */; };
10401042
6ED1B8FA2225AA6500C4C774 /* DefaultUserProfileServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6ED1B8F92225AA6500C4C774 /* DefaultUserProfileServiceTests.swift */; };
10411043
6ED1B8FB2225AA6500C4C774 /* DefaultUserProfileServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6ED1B8F92225AA6500C4C774 /* DefaultUserProfileServiceTests.swift */; };
10421044
6EDE910B2225F7DB00840112 /* AudienceTests_Evaluate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EDE910A2225F7DB00840112 /* AudienceTests_Evaluate.swift */; };
@@ -1210,7 +1212,7 @@
12101212
0B807B1021C2DD4E0090DDC8 /* BatchEventBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BatchEventBuilder.swift; sourceTree = "<group>"; };
12111213
0B807B1521C312390090DDC8 /* DefaultEventDispatcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultEventDispatcher.swift; sourceTree = "<group>"; };
12121214
0B807B1B21C44E000090DDC8 /* DefaultDatafileHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultDatafileHandler.swift; sourceTree = "<group>"; };
1213-
0B894EBB224163FF004A2ADB /* EventDispatcherTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventDispatcherTest.swift; sourceTree = "<group>"; };
1215+
0B894EBB224163FF004A2ADB /* EventDispatcherTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventDispatcherTests.swift; sourceTree = "<group>"; };
12141216
0B8F537B223FFB0500C56082 /* OptimizelyManagerTests_Group.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OptimizelyManagerTests_Group.swift; sourceTree = "<group>"; };
12151217
0BC47BD52242F7EF00E5C2CD /* DatafileHandlerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DatafileHandlerTests.swift; sourceTree = "<group>"; };
12161218
0BC47BE42243012E00E5C2CD /* MurmurTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MurmurTests.swift; sourceTree = "<group>"; };
@@ -1267,7 +1269,7 @@
12671269
6E852C69221A7E3300C41F94 /* ExperimentTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExperimentTests.swift; sourceTree = "<group>"; };
12681270
6E8B6A47221CBBC5006EA8A6 /* GroupTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupTests.swift; sourceTree = "<group>"; };
12691271
6E8B6A4A221CC2D6006EA8A6 /* ProjectTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProjectTests.swift; sourceTree = "<group>"; };
1270-
6E8CB598224BF4BE00B8CB7A /* DecisionServiceTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DecisionServiceTest.swift; sourceTree = "<group>"; };
1272+
6E8CB598224BF4BE00B8CB7A /* DecisionServiceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DecisionServiceTests.swift; sourceTree = "<group>"; };
12711273
6E8CB599224BF4BE00B8CB7A /* DecisionServiceTests_Others.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DecisionServiceTests_Others.swift; sourceTree = "<group>"; };
12721274
6E8CB59A224BF4BE00B8CB7A /* DecisionServiceTests_Features.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DecisionServiceTests_Features.swift; sourceTree = "<group>"; };
12731275
6E8CB59B224BF4BE00B8CB7A /* DecisionServiceTests_Experiments.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DecisionServiceTests_Experiments.swift; sourceTree = "<group>"; };
@@ -1305,6 +1307,7 @@
13051307
6EC2FE9E2243F729005A94F7 /* x-optimizely_6372300739.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "x-optimizely_6372300739.json"; sourceTree = "<group>"; };
13061308
6EC2FE9F2243F729005A94F7 /* x-test_data_50_experiments.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "x-test_data_50_experiments.json"; sourceTree = "<group>"; };
13071309
6EC5D3612231C19200BF9D77 /* OptimizelyManagerTests_Invalid.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OptimizelyManagerTests_Invalid.swift; sourceTree = "<group>"; };
1310+
6EC8D010225CFAB2000B20A4 /* EventDispatcherTests_Batch.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EventDispatcherTests_Batch.swift; sourceTree = "<group>"; };
13081311
6ED1B8F92225AA6500C4C774 /* DefaultUserProfileServiceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultUserProfileServiceTests.swift; sourceTree = "<group>"; };
13091312
6EDE910A2225F7DB00840112 /* AudienceTests_Evaluate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudienceTests_Evaluate.swift; sourceTree = "<group>"; };
13101313
6EDE919822273DD700840112 /* optimizely_6372300739_v4.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = optimizely_6372300739_v4.json; sourceTree = "<group>"; };
@@ -1720,7 +1723,7 @@
17201723
0B626D602242B98D00E4F7DA /* NotificationCenterTests.swift */,
17211724
6ED1B8F92225AA6500C4C774 /* DefaultUserProfileServiceTests.swift */,
17221725
6E4DD99121E6BAA700B0C2C7 /* OptimizelySwiftSDKiOSTests.swift */,
1723-
6E8CB598224BF4BE00B8CB7A /* DecisionServiceTest.swift */,
1726+
6E8CB598224BF4BE00B8CB7A /* DecisionServiceTests.swift */,
17241727
6E8CB59B224BF4BE00B8CB7A /* DecisionServiceTests_Experiments.swift */,
17251728
6E8CB59A224BF4BE00B8CB7A /* DecisionServiceTests_Features.swift */,
17261729
6E8CB599224BF4BE00B8CB7A /* DecisionServiceTests_Others.swift */,
@@ -1734,7 +1737,8 @@
17341737
6E24C4AE2257F5E500DF3D71 /* BatchEventBuilderTests_Attributes.swift */,
17351738
6E24C4B02257F5E500DF3D71 /* BatchEventBuilderTests_Events.swift */,
17361739
6E24C4AD2257F5E500DF3D71 /* BatchEventBuilderTests_EventTags.swift */,
1737-
0B894EBB224163FF004A2ADB /* EventDispatcherTest.swift */,
1740+
0B894EBB224163FF004A2ADB /* EventDispatcherTests.swift */,
1741+
6EC8D010225CFAB2000B20A4 /* EventDispatcherTests_Batch.swift */,
17381742
0BC47BD52242F7EF00E5C2CD /* DatafileHandlerTests.swift */,
17391743
0BC47BE42243012E00E5C2CD /* MurmurTests.swift */,
17401744
C79F9D852251F58F002B0BC9 /* DecisionListenerTests.swift */,
@@ -2803,6 +2807,7 @@
28032807
6E0AFBC22257C49800BC7665 /* BucketTests_GroupToExp.swift in Sources */,
28042808
6EA425252218E46C00B074B5 /* OptimizelyLogLevel.swift in Sources */,
28052809
6EA425462218E4A300B074B5 /* Variable.swift in Sources */,
2810+
6EC8D012225CFAB2000B20A4 /* EventDispatcherTests_Batch.swift in Sources */,
28062811
6EA4254A2218E4A300B074B5 /* Variation.swift in Sources */,
28072812
6EA4252F2218E4A300B074B5 /* BatchEventBuilder.swift in Sources */,
28082813
0B77D04722331E12005AA83F /* OptimizelyManager+Extension.swift in Sources */,
@@ -2856,9 +2861,9 @@
28562861
6EA425262218E4A300B074B5 /* DefaultLogger.swift in Sources */,
28572862
6EA425282218E4A300B074B5 /* DefaultUserProfileService.swift in Sources */,
28582863
6E8CB5A1224BF4BE00B8CB7A /* DecisionServiceTests_Others.swift in Sources */,
2859-
6E8CB59F224BF4BE00B8CB7A /* DecisionServiceTest.swift in Sources */,
2864+
6E8CB59F224BF4BE00B8CB7A /* DecisionServiceTests.swift in Sources */,
28602865
6EA425292218E4A300B074B5 /* OPTLogger.swift in Sources */,
2861-
0BAB9AFF22567E24000DC388 /* EventDispatcherTest.swift in Sources */,
2866+
0BAB9AFF22567E24000DC388 /* EventDispatcherTests.swift in Sources */,
28622867
6EA4254C2218E4A300B074B5 /* Experiment.swift in Sources */,
28632868
6EA4253F2218E4A300B074B5 /* ConditionHolder.swift in Sources */,
28642869
6EA425882218E69800B074B5 /* OptimizelySwiftSDKiOSTests.swift in Sources */,
@@ -2976,6 +2981,7 @@
29762981
6EA425D02218E74D00B074B5 /* Attribute.swift in Sources */,
29772982
6E0AFBBF2257C49800BC7665 /* BucketTests_Base.swift in Sources */,
29782983
6EA425B32218E74D00B074B5 /* DefaultUserProfileService.swift in Sources */,
2984+
6EC8D011225CFAB2000B20A4 /* EventDispatcherTests_Batch.swift in Sources */,
29792985
6E8CB5A4224BF4BE00B8CB7A /* DecisionServiceTests_Experiments.swift in Sources */,
29802986
6EA425AF2218E74D00B074B5 /* OptimizelyError.swift in Sources */,
29812987
6E24C4B32257F5E600DF3D71 /* BatchEventBuilderTests_Attributes.swift in Sources */,
@@ -3012,7 +3018,7 @@
30123018
6EA425BF2218E74D00B074B5 /* OPTBucketer.swift in Sources */,
30133019
6EA425DF2218E74D00B074B5 /* Constants.swift in Sources */,
30143020
6EA425842218E69700B074B5 /* OptimizelySwiftSDKiOSTests.swift in Sources */,
3015-
6E8CB59E224BF4BE00B8CB7A /* DecisionServiceTest.swift in Sources */,
3021+
6E8CB59E224BF4BE00B8CB7A /* DecisionServiceTests.swift in Sources */,
30163022
6EA425B12218E74D00B074B5 /* DefaultLogger.swift in Sources */,
30173023
6EA425E02218E74D00B074B5 /* HandlerRegistryService.swift in Sources */,
30183024
6EA425C32218E74D00B074B5 /* OPTNotificationCenter.swift in Sources */,
@@ -3030,7 +3036,7 @@
30303036
6E0AFBC32257C49800BC7665 /* BucketTests_Others.swift in Sources */,
30313037
6EA425C22218E74D00B074B5 /* OPTDatafileHandler.swift in Sources */,
30323038
6E24C4B12257F5E600DF3D71 /* BatchEventBuilderTests_EventTags.swift in Sources */,
3033-
0BAB9AFE22567E21000DC388 /* EventDispatcherTest.swift in Sources */,
3039+
0BAB9AFE22567E21000DC388 /* EventDispatcherTests.swift in Sources */,
30343040
6EA425BB2218E74D00B074B5 /* DefaultBucketer.swift in Sources */,
30353041
6EA425D52218E74D00B074B5 /* Variation.swift in Sources */,
30363042
6EA425C42218E74D00B074B5 /* JSONParse.swift in Sources */,

OptimizelySDK/OptimizelyTests/OptimizelyTests-APIs/OptimizelyManagerTests_Threading.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ class OptimizelyManagerTests_Threading: XCTestCase {
289289

290290
dispatchGroup.wait()
291291

292-
XCTAssertTrue(atomicBackground.property!.count == 101, "Count should be 101 but was \(atomicBackground.property!.count)")
292+
XCTAssertTrue(atomicBackground.property!.count == 101)
293293

294294
for index in 0...100 where index < atomicBackground.property!.count {
295295
XCTAssertTrue(atomicBackground.property![index].enabled!)
@@ -337,7 +337,7 @@ class OptimizelyManagerTests_Threading: XCTestCase {
337337

338338
func makeEventHandler() -> OPTEventDispatcher {
339339
class NoOpEventHandler : OPTEventDispatcher {
340-
func dispatchEvent(event: EventForDispatch, completionHandler: @escaping DispatchCompletionHandler) {
340+
func dispatchEvent(event: EventForDispatch, completionHandler: DispatchCompletionHandler?) {
341341

342342
}
343343

OptimizelySDK/OptimizelyTests/OptimizelyTests-Common/BatchEventBuilderTest.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//
2-
// BatchEventBuilderTest.swift
2+
// BatchEventBuilderTests.swift
33
// OptimizelySwiftSDK
44
//
55
// Created by Thomas Zurkan on 2/28/19.
@@ -8,7 +8,7 @@
88

99
import XCTest
1010

11-
class BatchEventBuilderTest: XCTestCase {
11+
class BatchEventBuilderTests: XCTestCase {
1212

1313
let datafileName = "feature_experiments"
1414
let featureExperimentKey = "feature_targeted_exp"

OptimizelySDK/OptimizelyTests/OptimizelyTests-Common/DecisionServiceTest.swift renamed to OptimizelySDK/OptimizelyTests/OptimizelyTests-Common/DecisionServiceTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//
2-
// DecisionServiceTest.swift
2+
// DecisionServiceTests.swift
33
// OptimizelySDKTests
44
//
55
// Created by Thomas Zurkan on 12/5/18.
@@ -8,7 +8,7 @@
88

99
import XCTest
1010

11-
class DecisionServiceTest: XCTestCase {
11+
class DecisionServiceTests: XCTestCase {
1212

1313
override func setUp() {
1414
// Put setup code here. This method is called before the invocation of each test method in the class.

0 commit comments

Comments
 (0)