2828#import < XCTest/XCTest.h>
2929#import " OSMigrationController.h"
3030#import " OSInfluenceDataRepository.h"
31+ #import " OSOutcomeEventsCache.h"
3132#import " OSIndirectInfluence.h"
3233#import " OSIndirectNotification.h"
34+ #import " OSCachedUniqueOutcome.h"
35+ #import " OSUniqueOutcomeNotification.h"
3336#import " OneSignalHelper.h"
3437#import " UnitTestCommonMethods.h"
3538#import " OneSignalUserDefaults.h"
@@ -42,13 +45,15 @@ @interface MigrationTests : XCTestCase
4245@implementation MigrationTests {
4346 OSMigrationController *migrationController;
4447 OSInfluenceDataRepository *dataRepository;
48+ OSOutcomeEventsCache *outcomesCache;
4549}
4650
4751- (void )setUp {
4852 [super setUp ];
4953 [UnitTestCommonMethods beforeEachTest: self ];
5054 migrationController = [OSMigrationController new ];
5155 dataRepository = [OSInfluenceDataRepository new ];
56+ outcomesCache = [OSOutcomeEventsCache new ];
5257}
5358
5459- (void )testNoIndirectInfluenceDataAvailableToMigrate {
@@ -120,4 +125,76 @@ - (void)testIndirectInfluenceToIndirectInfluenceMigration {
120125 XCTAssertEqual ([[OneSignal sdk_version_raw ] intValue ], sdkVersionAfterMigration);
121126}
122127
128+ - (void )testNoAttributedUniqueOutcomeDataAvailableToMigrate {
129+ NSArray *uniqueOutcomes = [outcomesCache getAttributedUniqueOutcomeEventSent ];
130+ NSInteger sdkVersion = [OneSignalUserDefaults.initShared getSavedIntegerForKey: OSUD_CACHED_SDK_VERSION defaultValue: 0 ];
131+ XCTAssertNil (uniqueOutcomes);
132+ XCTAssertEqual (0 , sdkVersion);
133+ [migrationController migrate ];
134+
135+ NSArray *uniqueOutcomesAfterMigration = [outcomesCache getAttributedUniqueOutcomeEventSent ];
136+ XCTAssertNil (uniqueOutcomesAfterMigration);
137+
138+ NSInteger sdkVersionAfterMigration = [OneSignalUserDefaults.initShared getSavedIntegerForKey: OSUD_CACHED_SDK_VERSION defaultValue: 0 ];
139+ XCTAssertEqual ([[OneSignal sdk_version_raw ] intValue ], sdkVersionAfterMigration);
140+ }
141+
142+ - (void )testUniqueOutcomeNotificationToCacheUniqueOutcomeMigration {
143+ NSString *notificationId = @" 1234-5678-1234-5678-1234" ;
144+ NSString *outcome = @" test" ;
145+ NSNumber *timestamp = @(10 );
146+ OSUniqueOutcomeNotification *uniqueOutcome = [[OSUniqueOutcomeNotification alloc ] initWithParamsNotificationId: outcome notificationId: notificationId timestamp: timestamp];
147+ NSMutableArray *uniqueOutcomes = [NSMutableArray new ];
148+ [uniqueOutcomes addObject: uniqueOutcome];
149+
150+ [outcomesCache saveAttributedUniqueOutcomeEventNotificationIds: uniqueOutcomes];
151+
152+ NSArray *lastUniqueOutcomeSaved = [outcomesCache getAttributedUniqueOutcomeEventSent ];
153+ NSInteger sdkVersion = [OneSignalUserDefaults.initShared getSavedIntegerForKey: OSUD_CACHED_SDK_VERSION defaultValue: 0 ];
154+ XCTAssertEqual (1 , [lastUniqueOutcomeSaved count ]);
155+ XCTAssertEqual (0 , sdkVersion);
156+
157+ [migrationController migrate ];
158+
159+ NSArray *lastUniqueOutcomeAfterMigration = [outcomesCache getAttributedUniqueOutcomeEventSent ];
160+ XCTAssertEqual (1 , [lastUniqueOutcomeAfterMigration count ]);
161+
162+ OSCachedUniqueOutcome *cachedUniqueOutcome = [lastUniqueOutcomeAfterMigration objectAtIndex: 0 ];
163+ XCTAssertTrue ([cachedUniqueOutcome.uniqueId isEqualToString: notificationId]);
164+ XCTAssertEqual (cachedUniqueOutcome.channel , NOTIFICATION);
165+ XCTAssertEqual ([timestamp intValue ], [cachedUniqueOutcome.timestamp intValue ]);
166+
167+ NSInteger sdkVersionAfterMigration = [OneSignalUserDefaults.initShared getSavedIntegerForKey: OSUD_CACHED_SDK_VERSION defaultValue: 0 ];
168+ XCTAssertEqual ([[OneSignal sdk_version_raw ] intValue ], sdkVersionAfterMigration);
169+ }
170+
171+ - (void )testCachedUniqueOutcomeToCachedUniqueOutcomeMigration {
172+ NSString *notificationId = @" 1234-5678-1234-5678-1234" ;
173+ NSString *outcome = @" test" ;
174+ NSNumber *timestamp = @(10 );
175+ OSCachedUniqueOutcome *cachedUniqueOutcome = [[OSCachedUniqueOutcome alloc ] initWithParamsName: outcome uniqueId: notificationId timestamp: timestamp channel: NOTIFICATION];
176+ NSMutableArray *cacheUniqueOutcomes = [NSMutableArray new ];
177+ [cacheUniqueOutcomes addObject: cachedUniqueOutcome];
178+
179+ [outcomesCache saveAttributedUniqueOutcomeEventNotificationIds: cacheUniqueOutcomes];
180+ NSArray *lastCachedUniqueOutcomes = [outcomesCache getAttributedUniqueOutcomeEventSent ];
181+ NSInteger sdkVersion = [OneSignalUserDefaults.initShared getSavedIntegerForKey: OSUD_CACHED_SDK_VERSION defaultValue: 0 ];
182+ XCTAssertEqual (1 , [lastCachedUniqueOutcomes count ]);
183+ XCTAssertEqual (0 , sdkVersion);
184+
185+ [migrationController migrate ];
186+
187+ NSArray <OSCachedUniqueOutcome *> *lastCachedUniqueOutcomesAfterMigration = [outcomesCache getAttributedUniqueOutcomeEventSent ];
188+ XCTAssertEqual (1 , [lastCachedUniqueOutcomesAfterMigration count ]);
189+
190+ OSCachedUniqueOutcome *cachedUniqueOutcomeAfterMigration = [lastCachedUniqueOutcomesAfterMigration objectAtIndex: 0 ];
191+ XCTAssertTrue ([cachedUniqueOutcomeAfterMigration.name isEqualToString: outcome]);
192+ XCTAssertTrue ([cachedUniqueOutcomeAfterMigration.uniqueId isEqualToString: notificationId]);
193+ XCTAssertEqual (NOTIFICATION, cachedUniqueOutcomeAfterMigration.channel );
194+ XCTAssertEqual ([timestamp intValue ], [cachedUniqueOutcomeAfterMigration.timestamp intValue ]);
195+
196+ NSInteger sdkVersionAfterMigration = [OneSignalUserDefaults.initShared getSavedIntegerForKey: OSUD_CACHED_SDK_VERSION defaultValue: 0 ];
197+ XCTAssertEqual ([[OneSignal sdk_version_raw ] intValue ], sdkVersionAfterMigration);
198+ }
199+
123200@end
0 commit comments