Skip to content

Commit f06048f

Browse files
committed
[tests] add tests of new records / delays after create
1 parent 80d940f commit f06048f

File tree

8 files changed

+283
-12
lines changed

8 files changed

+283
-12
lines changed

iOS_SDK/OneSignalSDK/OneSignal.xcodeproj/project.pbxproj

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,8 @@
177177
3CEE93542B7C78EC008440BD /* OneSignalUser.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DE69E19B282ED8060090BB3D /* OneSignalUser.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
178178
3CEE93572B7C78FD008440BD /* OneSignalCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE7D17E627026B95002D3A5D /* OneSignalCore.framework */; };
179179
3CEE93582B7C78FE008440BD /* OneSignalCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DE7D17E627026B95002D3A5D /* OneSignalCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
180+
3CF11E3D2C6D6155002856F5 /* UserExecutorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CF11E3C2C6D6155002856F5 /* UserExecutorTests.swift */; };
181+
3CF11E402C6E6DE2002856F5 /* MockNewRecordsState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CF11E3F2C6E6DE2002856F5 /* MockNewRecordsState.swift */; };
180182
3CF1A5632C669EA40056B3AA /* OSNewRecordsState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CF1A5622C669EA40056B3AA /* OSNewRecordsState.swift */; };
181183
3CF8629E28A183F900776CA4 /* OSIdentityModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CF8629D28A183F900776CA4 /* OSIdentityModel.swift */; };
182184
3CF862A028A1964F00776CA4 /* OSPropertiesModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CF8629F28A1964F00776CA4 /* OSPropertiesModel.swift */; };
@@ -1295,6 +1297,8 @@
12951297
3CE92279289FA88B001B1062 /* OSIdentityModelStoreListener.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSIdentityModelStoreListener.swift; sourceTree = "<group>"; };
12961298
3CEE90A62BFE6ABD00B0FB5B /* OSPropertiesSupportedProperty.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSPropertiesSupportedProperty.swift; sourceTree = "<group>"; };
12971299
3CEE90A82C000BD500B0FB5B /* OneSignalRequest+UnitTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "OneSignalRequest+UnitTests.swift"; sourceTree = "<group>"; };
1300+
3CF11E3C2C6D6155002856F5 /* UserExecutorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserExecutorTests.swift; sourceTree = "<group>"; };
1301+
3CF11E3F2C6E6DE2002856F5 /* MockNewRecordsState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockNewRecordsState.swift; sourceTree = "<group>"; };
12981302
3CF1A5622C669EA40056B3AA /* OSNewRecordsState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSNewRecordsState.swift; sourceTree = "<group>"; };
12991303
3CF8629D28A183F900776CA4 /* OSIdentityModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSIdentityModel.swift; sourceTree = "<group>"; };
13001304
3CF8629F28A1964F00776CA4 /* OSPropertiesModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSPropertiesModel.swift; sourceTree = "<group>"; };
@@ -2073,6 +2077,7 @@
20732077
children = (
20742078
3C8544B82C5AEFF700F542A9 /* OneSignalOSCoreMocks.h */,
20752079
3C8544C22C5AF18B00F542A9 /* OSCoreMocks.swift */,
2080+
3CF11E3F2C6E6DE2002856F5 /* MockNewRecordsState.swift */,
20762081
);
20772082
path = OneSignalOSCoreMocks;
20782083
sourceTree = "<group>";
@@ -2153,6 +2158,7 @@
21532158
isa = PBXGroup;
21542159
children = (
21552160
3CDE664A2BFC2A55006DA114 /* OneSignalUserTests-Bridging-Header.h */,
2161+
3CF11E3E2C6D61AC002856F5 /* Executors */,
21562162
3CC063ED2B6D7FE8002BB07F /* OneSignalUserTests.swift */,
21572163
3CC890342C5BF9A7002CB4CC /* UserConcurrencyTests.swift */,
21582164
3C67F7792BEB2B710085A0F0 /* SwitchUserIntegrationTests.swift */,
@@ -2169,6 +2175,14 @@
21692175
path = Support;
21702176
sourceTree = "<group>";
21712177
};
2178+
3CF11E3E2C6D61AC002856F5 /* Executors */ = {
2179+
isa = PBXGroup;
2180+
children = (
2181+
3CF11E3C2C6D6155002856F5 /* UserExecutorTests.swift */,
2182+
);
2183+
path = Executors;
2184+
sourceTree = "<group>";
2185+
};
21722186
3E2400391D4FFC31008BDE70 /* OneSignalFramework */ = {
21732187
isa = PBXGroup;
21742188
children = (
@@ -4058,6 +4072,7 @@
40584072
buildActionMask = 2147483647;
40594073
files = (
40604074
3C8544C32C5AF18B00F542A9 /* OSCoreMocks.swift in Sources */,
4075+
3CF11E402C6E6DE2002856F5 /* MockNewRecordsState.swift in Sources */,
40614076
);
40624077
runOnlyForDeploymentPostprocessing = 0;
40634078
};
@@ -4096,6 +4111,7 @@
40964111
isa = PBXSourcesBuildPhase;
40974112
buildActionMask = 2147483647;
40984113
files = (
4114+
3CF11E3D2C6D6155002856F5 /* UserExecutorTests.swift in Sources */,
40994115
3C67F77A2BEB2B710085A0F0 /* SwitchUserIntegrationTests.swift in Sources */,
41004116
3CC063EE2B6D7FE8002BB07F /* OneSignalUserTests.swift in Sources */,
41014117
3CC890352C5BF9A7002CB4CC /* UserConcurrencyTests.swift in Sources */,

iOS_SDK/OneSignalSDK/OneSignalCoreMocks/MockOneSignalClient.swift

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,6 @@ public class MockOneSignalClient: NSObject, IOneSignalClient {
9393
public func execute(_ request: OneSignalRequest, onSuccess successBlock: @escaping OSResultSuccessBlock, onFailure failureBlock: @escaping OSFailureBlock) {
9494
print("🧪 MockOneSignalClient execute called")
9595

96-
lock.withLock {
97-
executedRequests.append(request)
98-
}
99-
10096
if executeInstantaneously {
10197
finishExecutingRequest(request, onSuccess: successBlock, onFailure: failureBlock)
10298
} else {
@@ -127,6 +123,9 @@ public class MockOneSignalClient: NSObject, IOneSignalClient {
127123
print("🧪 completing HTTP request: \(request)")
128124

129125
// TODO: Check for existence of app_id in the request and fail if not.
126+
lock.withLock {
127+
executedRequests.append(request)
128+
}
130129

131130
self.didCompleteRequest(request)
132131

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
/*
2+
Modified MIT License
3+
4+
Copyright 2024 OneSignal
5+
6+
Permission is hereby granted, free of charge, to any person obtaining a copy
7+
of this software and associated documentation files (the "Software"), to deal
8+
in the Software without restriction, including without limitation the rights
9+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
copies of the Software, and to permit persons to whom the Software is
11+
furnished to do so, subject to the following conditions:
12+
13+
1. The above copyright notice and this permission notice shall be included in
14+
all copies or substantial portions of the Software.
15+
16+
2. All copies of substantial portions of the Software may only be used in connection
17+
with services provided by OneSignal.
18+
19+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25+
THE SOFTWARE.
26+
*/
27+
28+
@testable import OneSignalOSCore
29+
30+
public class MockNewRecordsState: OSNewRecordsState {
31+
public struct MockNewRecord {
32+
let key: String
33+
let overwrite: Bool
34+
}
35+
36+
public var records: [MockNewRecord] = []
37+
38+
override public func add(_ key: String, _ overwrite: Bool = false) {
39+
let record = MockNewRecord(key: key, overwrite: overwrite)
40+
records.append(record)
41+
42+
super.add(key, overwrite)
43+
}
44+
45+
override public func canAccess(_ key: String) -> Bool {
46+
return super.canAccess(key)
47+
}
48+
49+
public func get(_ key: String?) -> [MockNewRecord] {
50+
return records.filter { $0.key == key }
51+
}
52+
53+
public func contains(_ key: String?) -> Bool {
54+
return get(key).count > 0
55+
}
56+
57+
public func wasOverwritten(_ key: String?) -> Bool {
58+
return records.filter { $0.key == key && $0.overwrite }.count > 0
59+
}
60+
}

iOS_SDK/OneSignalSDK/OneSignalUser/Source/OneSignalUserManagerImpl.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,7 @@ public class OneSignalUserManagerImpl: NSObject, OneSignalUserManager {
442442
/**
443443
Creates and sets a blank new SDK user with the provided externalId, if any.
444444
*/
445-
private func setNewInternalUser(externalId: String?, pushSubscriptionModel: OSSubscriptionModel?) -> OSUserInternal {
445+
func setNewInternalUser(externalId: String?, pushSubscriptionModel: OSSubscriptionModel?) -> OSUserInternal {
446446
let aliases: [String: String]?
447447
if let externalIdToUse = externalId {
448448
aliases = [OS_EXTERNAL_ID: externalIdToUse]

iOS_SDK/OneSignalSDK/OneSignalUser/Source/Requests/OSRequestAddAliases.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class OSRequestAddAliases: OneSignalRequest, OSUserRequest {
4242
func prepareForExecution(newRecordsState: OSNewRecordsState) -> Bool {
4343
if let onesignalId = identityModel.onesignalId,
4444
newRecordsState.canAccess(onesignalId),
45-
let appId = OneSignalConfigManager.getAppId()
45+
let appId = OneSignalConfigManager.getAppId()
4646
{
4747
self.addJWTHeader(identityModel: identityModel)
4848
self.path = "apps/\(appId)/users/by/\(OS_ONESIGNAL_ID)/\(onesignalId)/identity"

iOS_SDK/OneSignalSDK/OneSignalUser/Source/Requests/OSRequestRemoveAlias.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class OSRequestRemoveAlias: OneSignalRequest, OSUserRequest {
4141
func prepareForExecution(newRecordsState: OSNewRecordsState) -> Bool {
4242
if let onesignalId = identityModel.onesignalId,
4343
newRecordsState.canAccess(onesignalId),
44-
let appId = OneSignalConfigManager.getAppId()
44+
let appId = OneSignalConfigManager.getAppId()
4545
{
4646
self.addJWTHeader(identityModel: identityModel)
4747
self.path = "apps/\(appId)/users/by/\(OS_ONESIGNAL_ID)/\(onesignalId)/identity/\(labelToRemove)"

iOS_SDK/OneSignalSDK/OneSignalUserMocks/MockUserRequests.swift

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public class MockUserRequests: NSObject {
2020

2121
public static func testDefaultPushSubPayload(id: String) -> [String: Any] {
2222
return [
23-
"id": testPushSubId,
23+
"id": id,
2424
"app_id": "test-app-id",
2525
"type": "iOSPush",
2626
"token": "",
@@ -43,7 +43,7 @@ public class MockUserRequests: NSObject {
4343

4444
public static func testDefaultFullCreateUserResponse(onesignalId: String, externalId: String?, subscriptionId: String?) -> [String: Any] {
4545
let identity = testIdentityPayload(onesignalId: onesignalId, externalId: externalId)
46-
let subscription = testDefaultPushSubPayload(id: testPushSubId)
46+
let subscription = testDefaultPushSubPayload(id: subscriptionId ?? testPushSubId)
4747
let properties = [
4848
"language": "en",
4949
"timezone_id": "America/Los_Angeles",
@@ -84,11 +84,10 @@ extension MockUserRequests {
8484
response: anonCreateResponse)
8585
}
8686

87-
public static func setDefaultCreateUserResponses(with client: MockOneSignalClient, externalId: String) {
87+
public static func setDefaultCreateUserResponses(with client: MockOneSignalClient, externalId: String, subscriptionId: String? = nil) {
8888
let osid = getOneSignalId(for: externalId)
8989

90-
let userResponse = MockUserRequests.testIdentityPayload(onesignalId: osid, externalId: externalId)
91-
90+
let userResponse = testDefaultFullCreateUserResponse(onesignalId: osid, externalId: externalId, subscriptionId: subscriptionId)
9291
client.setMockResponseForRequest(
9392
request: "<OSRequestCreateUser with external_id: \(externalId)>",
9493
response: userResponse

0 commit comments

Comments
 (0)