Skip to content

Commit

Permalink
Merge pull request #1371 from OneSignal/5.x.x/unit_tests_infra
Browse files Browse the repository at this point in the history
[unit tests] Add some infrastructure for `OneSignalCore` and `OneSignalUser`
  • Loading branch information
nan-li authored Feb 21, 2024
2 parents 8f47b6f + 194832e commit 782ae72
Show file tree
Hide file tree
Showing 36 changed files with 2,006 additions and 720 deletions.
1,326 changes: 1,269 additions & 57 deletions iOS_SDK/OneSignalSDK/OneSignal.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1520"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
shouldAutocreateTestPlan = "YES">
<Testables>
<TestableReference
skipped = "NO"
parallelizable = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "3CC063A02B6D7A8D002BB07F"
BuildableName = "OneSignalCoreTests.xctest"
BlueprintName = "OneSignalCoreTests"
ReferencedContainer = "container:OneSignal.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1520"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
shouldAutocreateTestPlan = "YES">
<Testables>
<TestableReference
skipped = "NO"
parallelizable = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "3CC063EA2B6D7FE8002BB07F"
BuildableName = "OneSignalUserTests.xctest"
BlueprintName = "OneSignalUserTests"
ReferencedContainer = "container:OneSignal.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,34 @@
ReferencedContainer = "container:OneSignal.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "NO"
buildForProfiling = "NO"
buildForArchiving = "NO"
buildForAnalyzing = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "3CC063EA2B6D7FE8002BB07F"
BuildableName = "OneSignalUserTests.xctest"
BlueprintName = "OneSignalUserTests"
ReferencedContainer = "container:OneSignal.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "NO"
buildForProfiling = "NO"
buildForArchiving = "NO"
buildForAnalyzing = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "3CC063A02B6D7A8D002BB07F"
BuildableName = "OneSignalCoreTests.xctest"
BlueprintName = "OneSignalCoreTests"
ReferencedContainer = "container:OneSignal.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
Expand Down Expand Up @@ -79,6 +107,20 @@
BlueprintName = "OneSignalUser"
ReferencedContainer = "container:OneSignal.xcodeproj">
</BuildableReference>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "3CC063EA2B6D7FE8002BB07F"
BuildableName = "OneSignalUserTests.xctest"
BlueprintName = "OneSignalUserTests"
ReferencedContainer = "container:OneSignal.xcodeproj">
</BuildableReference>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "3CC063A02B6D7A8D002BB07F"
BuildableName = "OneSignalCoreTests.xctest"
BlueprintName = "OneSignalCoreTests"
ReferencedContainer = "container:OneSignal.xcodeproj">
</BuildableReference>
</CodeCoverageTargets>
<Testables>
<TestableReference
Expand All @@ -91,6 +133,26 @@
ReferencedContainer = "container:OneSignal.xcodeproj">
</BuildableReference>
</TestableReference>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "3CC063A02B6D7A8D002BB07F"
BuildableName = "OneSignalCoreTests.xctest"
BlueprintName = "OneSignalCoreTests"
ReferencedContainer = "container:OneSignal.xcodeproj">
</BuildableReference>
</TestableReference>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "3CC063EA2B6D7FE8002BB07F"
BuildableName = "OneSignalUserTests.xctest"
BlueprintName = "OneSignalUserTests"
ReferencedContainer = "container:OneSignal.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
</TestAction>
<LaunchAction
Expand Down
48 changes: 4 additions & 44 deletions iOS_SDK/OneSignalSDK/OneSignalCore/Source/API/OneSignalClient.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,52 +31,12 @@
#ifndef OneSignalClient_h
#define OneSignalClient_h

typedef void (^OSDataRequestSuccessBlock)(NSData *data);

typedef void (^OSMultipleCompletionBlock)(NSDictionary *responses);
typedef void (^OSMultipleFailureBlock)(NSDictionary<NSString *, NSError *> *errors);
typedef void (^OSMultipleSuccessBlock)(NSDictionary<NSString *, NSDictionary *> *results);

@interface OneSignalClient : NSObject
+ (OneSignalClient *)sharedClient;
@protocol IOneSignalClient <NSObject>
- (void)executeRequest:(OneSignalRequest *)request onSuccess:(OSResultSuccessBlock)successBlock onFailure:(OSFailureBlock)failureBlock;
- (void)executeSynchronousRequest:(OneSignalRequest *)request onSuccess:(OSResultSuccessBlock)successBlock onFailure:(OSFailureBlock)failureBlock;

// ie. for loading HTML or other non-JSON based requests
- (void)executeDataRequest:(OneSignalRequest *)request onSuccess:(OSDataRequestSuccessBlock)successBlock onFailure:(OSFailureBlock)failureBlock;

// Executes multiple OneSignalRequest's simultaneously, needs a unique identifier for each request
- (void)executeSimultaneousRequests:(NSDictionary<NSString *, OneSignalRequest *> *)requests withSuccess:(OSMultipleSuccessBlock)successBlock onFailure:(OSMultipleFailureBlock)failureBlock;

/*
TODO: We want to eventually migrate over to using this method for executing simultaneous requests:
This allows us to combine multiple async concurrent requests to return from a single callback with the proper formatted responses from each reuqest (successful or not, account for params returning from GETs).
A generalized format should be followed and we should make sure not to break form that as it could break peoples apps in the future if we add params and remove params from this callback.
Currently for the only implementation this is used for "setExternalUserId:withCOmpletion:" the format is as follows:
NSDictionary response = @{
(required) @"push" : {
@"success" : @(true) or @(false)
},
(optional) @"email" : {
@"success" : @(true) or @(false)
}
}
@end

Building off of this format now will require:
1. Including other attributes and whether they are required or not
ex. @"push" is always going to be within the callback resposne (required), meanwhile,
@"email" will not always exist in the callback resposne (optoinal)
2. Can't remove params that are required as an app may be expecting them and removing/modifying a key could break there app with an SDK upgrade
3. Add more requirements...
*/
- (void)executeSimultaneousRequests:(NSDictionary<NSString *, OneSignalRequest *> *)requests withCompletion:(OSMultipleCompletionBlock)completionBlock;
@interface OneSignalClient : NSObject <IOneSignalClient>
+ (OneSignalClient *)sharedClient;
@end

#endif
Loading

0 comments on commit 782ae72

Please sign in to comment.