Skip to content

Commit 67a455d

Browse files
authored
Merge pull request #1444 from OneSignal/feat/combine_deltas
[Feat] Combine user property updates for network call improvements, fix purchase bug
2 parents 37ede25 + f88eb7d commit 67a455d

23 files changed

+531
-246
lines changed

iOS_SDK/OneSignalSDK/OneSignal.xcodeproj/project.pbxproj

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@
141141
3CC9A6362AFA26E7008F68FD /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 3CC9A6352AFA26E7008F68FD /* PrivacyInfo.xcprivacy */; };
142142
3CCF44BE299B17290021964D /* OneSignalWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CCF44BC299B17290021964D /* OneSignalWrapper.h */; settings = {ATTRIBUTES = (Public, ); }; };
143143
3CCF44BF299B17290021964D /* OneSignalWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CCF44BD299B17290021964D /* OneSignalWrapper.m */; };
144+
3CDE664C2BFC2A56006DA114 /* OneSignalUserObjcTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CDE664B2BFC2A56006DA114 /* OneSignalUserObjcTests.m */; };
144145
3CE5F9E3289D88DC004A156E /* OSModelStoreChangedHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CE5F9E2289D88DC004A156E /* OSModelStoreChangedHandler.swift */; };
145146
3CE795F928DB99B500736BD4 /* OSSubscriptionModelStoreListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CE795F828DB99B500736BD4 /* OSSubscriptionModelStoreListener.swift */; };
146147
3CE795FB28DBDCE700736BD4 /* OSSubscriptionOperationExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CE795FA28DBDCE700736BD4 /* OSSubscriptionOperationExecutor.swift */; };
@@ -153,6 +154,8 @@
153154
3CE8CC582911B2B2000DB0D3 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3CE8CC572911B2B2000DB0D3 /* SystemConfiguration.framework */; };
154155
3CE8CC5B29143F4B000DB0D3 /* NSDateFormatter+OneSignal.m in Sources */ = {isa = PBXBuildFile; fileRef = DE98772A2591655800DE07D5 /* NSDateFormatter+OneSignal.m */; };
155156
3CE9227A289FA88B001B1062 /* OSIdentityModelStoreListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CE92279289FA88B001B1062 /* OSIdentityModelStoreListener.swift */; };
157+
3CEE90A72BFE6ABD00B0FB5B /* OSPropertiesSupportedProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CEE90A62BFE6ABD00B0FB5B /* OSPropertiesSupportedProperty.swift */; };
158+
3CEE90A92C000BD500B0FB5B /* OneSignalRequest+UnitTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CEE90A82C000BD500B0FB5B /* OneSignalRequest+UnitTests.swift */; };
156159
3CEE93422B7C4174008440BD /* OneSignalUserMocks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3CC063DD2B6D7F2A002BB07F /* OneSignalUserMocks.framework */; };
157160
3CEE93432B7C4174008440BD /* OneSignalUserMocks.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3CC063DD2B6D7F2A002BB07F /* OneSignalUserMocks.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
158161
3CEE93462B7C73AB008440BD /* OneSignalCoreMocks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3CC0639A2B6D7A8C002BB07F /* OneSignalCoreMocks.framework */; };
@@ -461,6 +464,8 @@
461464
DEA4B4652888C59100E9FE12 /* OneSignalExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE7D17F927026BA3002D3A5D /* OneSignalExtension.framework */; };
462465
DEA4B4662888C59E00E9FE12 /* OneSignalExtension.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DE7D17F927026BA3002D3A5D /* OneSignalExtension.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
463466
DEA4B4672888C5F200E9FE12 /* OneSignalExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE7D17F927026BA3002D3A5D /* OneSignalExtension.framework */; };
467+
DEA69F452C190045009BB128 /* OneSignalCoreMocks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3CC0639A2B6D7A8C002BB07F /* OneSignalCoreMocks.framework */; };
468+
DEA69F462C190045009BB128 /* OneSignalCoreMocks.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3CC0639A2B6D7A8C002BB07F /* OneSignalCoreMocks.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
464469
DEA98C1928C90EE5000C6856 /* OneSignalCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE7D17E627026B95002D3A5D /* OneSignalCore.framework */; };
465470
DEA98C1C28C90EE6000C6856 /* OneSignalOSCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C115161289A259500565C41 /* OneSignalOSCore.framework */; };
466471
DEA98C1E28C90EE9000C6856 /* OneSignalCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE7D17E627026B95002D3A5D /* OneSignalCore.framework */; };
@@ -868,6 +873,13 @@
868873
remoteGlobalIDString = DE7D187F27037F43002D3A5D;
869874
remoteInfo = OneSignalOutcomes;
870875
};
876+
DEA69F472C190045009BB128 /* PBXContainerItemProxy */ = {
877+
isa = PBXContainerItemProxy;
878+
containerPortal = 37747F8B19147D6400558FAD /* Project object */;
879+
proxyType = 1;
880+
remoteGlobalIDString = 3CC063992B6D7A8C002BB07F;
881+
remoteInfo = OneSignalCoreMocks;
882+
};
871883
DEBAAE062A420C9800BF2C1C /* PBXContainerItemProxy */ = {
872884
isa = PBXContainerItemProxy;
873885
containerPortal = 37747F8B19147D6400558FAD /* Project object */;
@@ -1032,6 +1044,7 @@
10321044
files = (
10331045
3CEE93542B7C78EC008440BD /* OneSignalUser.framework in Embed Frameworks */,
10341046
3CA8B8832BEC2FCB0010ADA1 /* XCTest.framework in Embed Frameworks */,
1047+
DEA69F462C190045009BB128 /* OneSignalCoreMocks.framework in Embed Frameworks */,
10351048
3CEE934F2B7C787B008440BD /* OneSignalOSCore.framework in Embed Frameworks */,
10361049
);
10371050
name = "Embed Frameworks";
@@ -1174,6 +1187,8 @@
11741187
3CC9A6352AFA26E7008F68FD /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
11751188
3CCF44BC299B17290021964D /* OneSignalWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OneSignalWrapper.h; sourceTree = "<group>"; };
11761189
3CCF44BD299B17290021964D /* OneSignalWrapper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OneSignalWrapper.m; sourceTree = "<group>"; };
1190+
3CDE664A2BFC2A55006DA114 /* OneSignalUserTests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "OneSignalUserTests-Bridging-Header.h"; sourceTree = "<group>"; };
1191+
3CDE664B2BFC2A56006DA114 /* OneSignalUserObjcTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OneSignalUserObjcTests.m; sourceTree = "<group>"; };
11771192
3CE5F9E2289D88DC004A156E /* OSModelStoreChangedHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSModelStoreChangedHandler.swift; sourceTree = "<group>"; };
11781193
3CE795F828DB99B500736BD4 /* OSSubscriptionModelStoreListener.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSSubscriptionModelStoreListener.swift; sourceTree = "<group>"; };
11791194
3CE795FA28DBDCE700736BD4 /* OSSubscriptionOperationExecutor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSSubscriptionOperationExecutor.swift; sourceTree = "<group>"; };
@@ -1184,6 +1199,8 @@
11841199
3CE8CC552911B1E0000DB0D3 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.3.sdk/System/iOSSupport/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
11851200
3CE8CC572911B2B2000DB0D3 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.3.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; };
11861201
3CE92279289FA88B001B1062 /* OSIdentityModelStoreListener.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSIdentityModelStoreListener.swift; sourceTree = "<group>"; };
1202+
3CEE90A62BFE6ABD00B0FB5B /* OSPropertiesSupportedProperty.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSPropertiesSupportedProperty.swift; sourceTree = "<group>"; };
1203+
3CEE90A82C000BD500B0FB5B /* OneSignalRequest+UnitTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "OneSignalRequest+UnitTests.swift"; sourceTree = "<group>"; };
11871204
3CF8629D28A183F900776CA4 /* OSIdentityModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSIdentityModel.swift; sourceTree = "<group>"; };
11881205
3CF8629F28A1964F00776CA4 /* OSPropertiesModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSPropertiesModel.swift; sourceTree = "<group>"; };
11891206
3CF862A128A197D200776CA4 /* OSPropertiesModelStoreListener.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSPropertiesModelStoreListener.swift; sourceTree = "<group>"; };
@@ -1587,6 +1604,7 @@
15871604
files = (
15881605
3CEE93532B7C78EC008440BD /* OneSignalUser.framework in Frameworks */,
15891606
3CA8B8822BEC2FCB0010ADA1 /* XCTest.framework in Frameworks */,
1607+
DEA69F452C190045009BB128 /* OneSignalCoreMocks.framework in Frameworks */,
15901608
3CEE934E2B7C787B008440BD /* OneSignalOSCore.framework in Frameworks */,
15911609
);
15921610
runOnlyForDeploymentPostprocessing = 0;
@@ -1907,6 +1925,7 @@
19071925
isa = PBXGroup;
19081926
children = (
19091927
3C8706752BDEED75000D8CD2 /* NSDictionary+UnitTests.swift */,
1928+
3CEE90A82C000BD500B0FB5B /* OneSignalRequest+UnitTests.swift */,
19101929
);
19111930
path = Extensions;
19121931
sourceTree = "<group>";
@@ -1977,12 +1996,22 @@
19771996
3CC063EC2B6D7FE8002BB07F /* OneSignalUserTests */ = {
19781997
isa = PBXGroup;
19791998
children = (
1999+
3CDE664A2BFC2A55006DA114 /* OneSignalUserTests-Bridging-Header.h */,
19802000
3CC063ED2B6D7FE8002BB07F /* OneSignalUserTests.swift */,
19812001
3C67F7792BEB2B710085A0F0 /* SwitchUserIntegrationTests.swift */,
2002+
3CDE664B2BFC2A56006DA114 /* OneSignalUserObjcTests.m */,
19822003
);
19832004
path = OneSignalUserTests;
19842005
sourceTree = "<group>";
19852006
};
2007+
3CEE90A52BFE6A7700B0FB5B /* Support */ = {
2008+
isa = PBXGroup;
2009+
children = (
2010+
3CEE90A62BFE6ABD00B0FB5B /* OSPropertiesSupportedProperty.swift */,
2011+
);
2012+
path = Support;
2013+
sourceTree = "<group>";
2014+
};
19862015
3E2400391D4FFC31008BDE70 /* OneSignalFramework */ = {
19872016
isa = PBXGroup;
19882017
children = (
@@ -2258,6 +2287,7 @@
22582287
DE69E1A8282ED8360090BB3D /* Source */ = {
22592288
isa = PBXGroup;
22602289
children = (
2290+
3CEE90A52BFE6A7700B0FB5B /* Support */,
22612291
3C9AD6BA2B2284AB00BC1540 /* Executors */,
22622292
3C9AD6BD2B22877600BC1540 /* Requests */,
22632293
DE69E1A9282ED8790090BB3D /* UnitTestApp-Bridging-Header.h */,
@@ -3055,6 +3085,7 @@
30553085
dependencies = (
30563086
3CEE93512B7C787C008440BD /* PBXTargetDependency */,
30573087
3CEE93562B7C78EC008440BD /* PBXTargetDependency */,
3088+
DEA69F482C190045009BB128 /* PBXTargetDependency */,
30583089
);
30593090
name = OneSignalUserMocks;
30603091
productName = OneSignalUserMocks;
@@ -3384,6 +3415,7 @@
33843415
3CC063EA2B6D7FE8002BB07F = {
33853416
CreatedOnToolsVersion = 15.2;
33863417
DevelopmentTeam = 99SW8E36CT;
3418+
LastSwiftMigration = 1520;
33873419
ProvisioningStyle = Automatic;
33883420
TestTargetID = DEF5CCF02539321A0003E9CC;
33893421
};
@@ -3743,6 +3775,7 @@
37433775
4710EA552B8FD04400435356 /* MockOSDispatchQueue.swift in Sources */,
37443776
3CC063B22B6D7AD8002BB07F /* MockOneSignalClient.swift in Sources */,
37453777
3C8706762BDEED75000D8CD2 /* NSDictionary+UnitTests.swift in Sources */,
3778+
3CEE90A92C000BD500B0FB5B /* OneSignalRequest+UnitTests.swift in Sources */,
37463779
3CC063B42B6D7BA2002BB07F /* OneSignalCoreMocks.swift in Sources */,
37473780
);
37483781
runOnlyForDeploymentPostprocessing = 0;
@@ -3772,6 +3805,7 @@
37723805
files = (
37733806
3C67F77A2BEB2B710085A0F0 /* SwitchUserIntegrationTests.swift in Sources */,
37743807
3CC063EE2B6D7FE8002BB07F /* OneSignalUserTests.swift in Sources */,
3808+
3CDE664C2BFC2A56006DA114 /* OneSignalUserObjcTests.m in Sources */,
37753809
);
37763810
runOnlyForDeploymentPostprocessing = 0;
37773811
};
@@ -3926,6 +3960,7 @@
39263960
3C8E6E0128AC0BA10031E48A /* OSIdentityOperationExecutor.swift in Sources */,
39273961
3CF862A228A197D200776CA4 /* OSPropertiesModelStoreListener.swift in Sources */,
39283962
3C277D7E2BD76E0000857606 /* OSIdentityModelRepo.swift in Sources */,
3963+
3CEE90A72BFE6ABD00B0FB5B /* OSPropertiesSupportedProperty.swift in Sources */,
39293964
3C9AD6C12B22886600BC1540 /* OSRequestUpdateSubscription.swift in Sources */,
39303965
3C0EF49E28A1DBCB00E5434B /* OSUserInternalImpl.swift in Sources */,
39313966
3C8E6DFF28AB09AE0031E48A /* OSPropertyOperationExecutor.swift in Sources */,
@@ -4301,6 +4336,11 @@
43014336
target = DE7D187F27037F43002D3A5D /* OneSignalOutcomes */;
43024337
targetProxy = DE7D18D42703ADE0002D3A5D /* PBXContainerItemProxy */;
43034338
};
4339+
DEA69F482C190045009BB128 /* PBXTargetDependency */ = {
4340+
isa = PBXTargetDependency;
4341+
target = 3CC063992B6D7A8C002BB07F /* OneSignalCoreMocks */;
4342+
targetProxy = DEA69F472C190045009BB128 /* PBXContainerItemProxy */;
4343+
};
43044344
DEBAAE072A420C9800BF2C1C /* PBXTargetDependency */ = {
43054345
isa = PBXTargetDependency;
43064346
target = DE7D17E527026B95002D3A5D /* OneSignalCore */;
@@ -5102,6 +5142,7 @@
51025142
PRODUCT_NAME = "$(TARGET_NAME)";
51035143
SWIFT_COMPILATION_MODE = wholemodule;
51045144
SWIFT_EMIT_LOC_STRINGS = NO;
5145+
SWIFT_OBJC_BRIDGING_HEADER = "OneSignalUserTests/OneSignalUserTests-Bridging-Header.h";
51055146
SWIFT_VERSION = 5.0;
51065147
TARGETED_DEVICE_FAMILY = "1,2";
51075148
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/UnitTestApp.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/UnitTestApp";
@@ -5155,6 +5196,7 @@
51555196
PRODUCT_NAME = "$(TARGET_NAME)";
51565197
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
51575198
SWIFT_EMIT_LOC_STRINGS = NO;
5199+
SWIFT_OBJC_BRIDGING_HEADER = "OneSignalUserTests/OneSignalUserTests-Bridging-Header.h";
51585200
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
51595201
SWIFT_VERSION = 5.0;
51605202
TARGETED_DEVICE_FAMILY = "1,2";
@@ -5203,6 +5245,7 @@
52035245
PRODUCT_NAME = "$(TARGET_NAME)";
52045246
SWIFT_COMPILATION_MODE = wholemodule;
52055247
SWIFT_EMIT_LOC_STRINGS = NO;
5248+
SWIFT_OBJC_BRIDGING_HEADER = "OneSignalUserTests/OneSignalUserTests-Bridging-Header.h";
52065249
SWIFT_VERSION = 5.0;
52075250
TARGETED_DEVICE_FAMILY = "1,2";
52085251
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/UnitTestApp.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/UnitTestApp";

iOS_SDK/OneSignalSDK/OneSignalCore/Source/OneSignalCommonDefines.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -192,8 +192,6 @@ typedef enum {ATTRIBUTED, NOT_ATTRIBUTED} FocusAttributionState;
192192

193193
// OneSignal Background Task Identifiers
194194
#define ATTRIBUTED_FOCUS_TASK @"ATTRIBUTED_FOCUS_TASK"
195-
#define UNATTRIBUTED_FOCUS_TASK @"UNATTRIBUTED_FOCUS_TASK"
196-
#define SEND_SESSION_TIME_TO_USER_TASK @"SEND_SESSION_TIME_TO_USER_TASK"
197195
#define OPERATION_REPO_BACKGROUND_TASK @"OPERATION_REPO_BACKGROUND_TASK"
198196
#define IDENTITY_EXECUTOR_BACKGROUND_TASK @"IDENTITY_EXECUTOR_BACKGROUND_TASK_"
199197
#define PROPERTIES_EXECUTOR_BACKGROUND_TASK @"PROPERTIES_EXECUTOR_BACKGROUND_TASK_"

iOS_SDK/OneSignalSDK/OneSignalCoreMocks/Extensions/NSDictionary+UnitTests.swift

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,38 @@ extension NSDictionary {
6666
}
6767

6868
private func equals(_ x: Any, _ y: Any) -> Bool {
69-
guard x is AnyHashable else { return false }
70-
guard y is AnyHashable else { return false }
71-
return (x as! AnyHashable) == (y as! AnyHashable)
69+
switch (x, y) {
70+
case let (x as NSNumber, y as NSNumber):
71+
// Handle float equality imprecision
72+
return abs(x.floatValue - y.floatValue) <= .ulpOfOne
73+
default:
74+
guard x is AnyHashable else { return false }
75+
guard y is AnyHashable else { return false }
76+
return (x as! AnyHashable) == (y as! AnyHashable)
77+
}
78+
}
79+
80+
/**
81+
Returns a string representation of a dictionary in alphabetical order by key.
82+
If there are dictionaries within this dictionary, those will also be stringified in alphabetical order by key.
83+
This method is motivated by the need to compare two requests whose payloads may be unordered dictionaries.
84+
*/
85+
public func toSortedString() -> String {
86+
guard let dict = self as? [String: Any] else {
87+
return "[:]"
88+
}
89+
var result = "["
90+
let sortedKeys = Array(dict.keys).sorted(by: <)
91+
for key in sortedKeys {
92+
if let value = dict[key] as? NSDictionary {
93+
result += " \(key): \(value.toSortedString()),"
94+
} else {
95+
result += " \(key): \(String(describing: dict[key])),"
96+
}
97+
}
98+
// drop the last comma within a dictionary's items
99+
result = String(result.dropLast())
100+
result += "]"
101+
return result
72102
}
73103
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import OneSignalCore
2+
3+
extension OneSignalRequest {
4+
/// Returns alphabetically ordered string representation of request's parameters
5+
public func stringifyParams() -> String {
6+
guard let dict = self.parameters as? NSDictionary else {
7+
return "[:]"
8+
}
9+
return dict.toSortedString()
10+
}
11+
}

iOS_SDK/OneSignalSDK/OneSignalCoreMocks/MockOneSignalClient.swift

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,21 @@ public class MockOneSignalClient: NSObject, IOneSignalClient {
101101
}
102102
}
103103

104+
/// Helper method to stringify the name of a request for identification and comparison
105+
private func stringify(_ request: OneSignalRequest) -> String {
106+
var stringified = request.description
107+
108+
switch request.description {
109+
case let str where str.contains("OSRequestUpdateProperties"):
110+
// Return an ordered representation of the request parameters
111+
stringified = "<OSRequestUpdateProperties with parameters: \(request.stringifyParams())>"
112+
default:
113+
break
114+
}
115+
116+
return stringified
117+
}
118+
104119
func finishExecutingRequest(_ request: OneSignalRequest, onSuccess successBlock: OSResultSuccessBlock, onFailure failureBlock: OSFailureBlock) {
105120

106121
// TODO: This entire method needs to contained within the equivalent of @synchronized ❗️
@@ -110,18 +125,19 @@ public class MockOneSignalClient: NSObject, IOneSignalClient {
110125

111126
self.didCompleteRequest(request)
112127

128+
let stringifiedRequest = stringify(request)
113129
// Switch between types of requests with mock responses
114130
if request.isKind(of: OSRequestGetIosParams.self) {
115131
// send a mock remote params response
116132
successBlock(["mockTodo": "responseTodo"])
117133
}
118-
if (mockResponses[String(describing: request)]) != nil {
119-
successBlock(mockResponses[String(describing: request)])
120-
} else if (mockFailureResponses[String(describing: request)]) != nil {
121-
failureBlock(mockFailureResponses[String(describing: request)])
134+
if (mockResponses[stringifiedRequest]) != nil {
135+
successBlock(mockResponses[stringifiedRequest])
136+
} else if (mockFailureResponses[stringifiedRequest]) != nil {
137+
failureBlock(mockFailureResponses[stringifiedRequest])
122138
} else {
123139
allRequestsHandled = false
124-
print("🧪 cannot find a mock response for request: \(request)")
140+
print("🧪 cannot find a mock response for request: \(stringifiedRequest)")
125141
}
126142
}
127143

@@ -154,6 +170,7 @@ extension MockOneSignalClient {
154170
/**
155171
Checks if there is only one executed request that contains the payload provided, and the url matches the path provided.
156172
*/
173+
@objc
157174
public func onlyOneRequest(contains path: String, contains payload: [String: Any]) -> Bool {
158175
var found = false
159176

iOS_SDK/OneSignalSDK/OneSignalCoreMocks/OneSignalCoreMocks.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import XCTest
2626

2727
@objc
2828
public class OneSignalCoreMocks: NSObject {
29-
29+
@objc
3030
public static func clearUserDefaults() {
3131
guard let userDefaults = OneSignalUserDefaults.initStandard().userDefaults else {
3232
return
@@ -46,6 +46,7 @@ public class OneSignalCoreMocks: NSObject {
4646
}
4747

4848
/** Wait specified number of seconds for any async methods to run */
49+
@objc
4950
public static func waitForBackgroundThreads(seconds: Double) {
5051
let expectation = XCTestExpectation(description: "Wait for \(seconds) seconds")
5152
_ = XCTWaiter.wait(for: [expectation], timeout: seconds)

iOS_SDK/OneSignalSDK/OneSignalOSCore/Source/OSOperationRepo.swift

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,14 @@ public class OSOperationRepo: NSObject {
100100
}
101101
}
102102

103-
func enqueueDelta(_ delta: OSDelta) {
103+
/**
104+
Enqueueing is driven by model changes and called manually by the User Manager to
105+
add session time, session count and purchase data.
106+
107+
// TODO: We can make this method internal once there is no manual adding of a Delta except through stores.
108+
This can happen when session data and purchase data use the model / store / listener infrastructure.
109+
*/
110+
public func enqueueDelta(_ delta: OSDelta) {
104111
guard !OneSignalConfigManager.shouldAwaitAppIdAndLogMissingPrivacyConsent(forMethod: nil) else {
105112
return
106113
}

0 commit comments

Comments
 (0)