@@ -133,7 +133,9 @@ - (void)overridePerformSelector:(SEL)aSelector withObject:(nullable id)anArgumen
133133 selectorToRun.runOn = self;
134134 selectorToRun.selector = aSelector;
135135 selectorToRun.withObject = anArgument;
136- [selectorsToRun addObject: selectorToRun];
136+ @synchronized (selectorsToRun) {
137+ [selectorsToRun addObject: selectorToRun];
138+ }
137139 }
138140}
139141
@@ -142,10 +144,12 @@ - (id)overridePerformSelector:(SEL)aSelector withObject:(id)anArgument {
142144}
143145
144146+ (void )runPendingSelectors {
145- for (SelectorToRun* selectorToRun in selectorsToRun)
146- [selectorToRun.runOn performSelector: selectorToRun.selector withObject: selectorToRun.withObject];
147-
148- [selectorsToRun removeAllObjects ];
147+ @synchronized (selectorsToRun) {
148+ for (SelectorToRun* selectorToRun in selectorsToRun)
149+ [selectorToRun.runOn performSelector: selectorToRun.selector withObject: selectorToRun.withObject];
150+
151+ [selectorsToRun removeAllObjects ];
152+ }
149153}
150154
151155@end
@@ -532,7 +536,21 @@ + (NSString*) overrideGetAppName {
532536
533537+ (void )overrideEnqueueRequest : (NSURLRequest *)request onSuccess : (OSResultSuccessBlock)successBlock onFailure : (OSFailureBlock)failureBlock isSynchronous : (BOOL )isSynchronous {
534538 NSError *error = nil ;
535- NSDictionary *parameters = [NSJSONSerialization JSONObjectWithData: [request HTTPBody ] options: 0 error: &error];
539+
540+ NSLog (@" request.URL: %@ " , request.URL );
541+
542+ NSMutableDictionary *parameters;
543+
544+ NSData * httpData = [request HTTPBody ];
545+ if (httpData)
546+ parameters = [NSJSONSerialization JSONObjectWithData: [request HTTPBody ] options: 0 error: &error];
547+ else {
548+ NSURLComponents *components = [NSURLComponents componentsWithString: request.URL.absoluteString];
549+ parameters = [NSMutableDictionary new ];
550+ for (NSURLQueryItem *item in components.queryItems ) {
551+ parameters[item.name] = item.value ;
552+ }
553+ }
536554
537555 // We should always send an app_id with every request.
538556 if (!parameters[@" app_id" ])
@@ -1917,6 +1935,9 @@ - (void)testSendTags {
19171935
19181936 // Make sure all 3 sets of tags where send in 1 network call.
19191937 [NSObjectOverrider runPendingSelectors ];
1938+ [self runBackgroundThreads ];
1939+ [NSObjectOverrider runPendingSelectors ];
1940+
19201941 XCTAssertEqualObjects (lastHTTPRequset[@" tags" ][@" key" ], @" value" );
19211942 XCTAssertEqualObjects (lastHTTPRequset[@" tags" ][@" key1" ], @" value1" );
19221943 XCTAssertEqualObjects (lastHTTPRequset[@" tags" ][@" key2" ], @" value2" );
@@ -1938,6 +1959,7 @@ - (void)testSendTags {
19381959 } onFailure: ^(NSError *error) {}];
19391960
19401961 [NSObjectOverrider runPendingSelectors ];
1962+ [self runBackgroundThreads ];
19411963
19421964 XCTAssertEqualObjects (lastHTTPRequset[@" tags" ][@" key10" ], @" value10" );
19431965 XCTAssertEqualObjects (lastHTTPRequset[@" tags" ][@" key11" ], @" value11" );
@@ -1971,6 +1993,50 @@ - (void)testDeleteTags {
19711993 [OneSignal deleteTag: @" someKey" ];
19721994}
19731995
1996+ - (void )testGetTags {
1997+ [self initOneSignal ];
1998+ [self runBackgroundThreads ];
1999+ XCTAssertEqual (networkRequestCount, 1 );
2000+
2001+ __block BOOL fireGetTags = false ;
2002+
2003+ [OneSignal getTags: ^(NSDictionary *result) {
2004+ NSLog (@" getTags success HERE" );
2005+ fireGetTags = true ;
2006+ } onFailure: ^(NSError *error) {
2007+ NSLog (@" getTags onFailure HERE" );
2008+ }];
2009+
2010+ [self runBackgroundThreads ];
2011+
2012+ XCTAssertTrue (fireGetTags);
2013+ }
2014+
2015+ - (void )testGetTagsWithNestedDelete {
2016+ [self initOneSignal ];
2017+ [self runBackgroundThreads ];
2018+ XCTAssertEqual (networkRequestCount, 1 );
2019+
2020+ __block BOOL fireDeleteTags = false ;
2021+
2022+ [OneSignal getTags: ^(NSDictionary *result) {
2023+ NSLog (@" getTags success HERE" );
2024+ [OneSignal deleteTag: @" tag" onSuccess: ^(NSDictionary *result) {
2025+ fireDeleteTags = true ;
2026+ NSLog (@" deleteTag onSuccess HERE" );
2027+ } onFailure: ^(NSError *error) {
2028+ NSLog (@" deleteTag onFailure HERE" );
2029+ }];
2030+ } onFailure: ^(NSError *error) {
2031+ NSLog (@" getTags onFailure HERE" );
2032+ }];
2033+
2034+ [self runBackgroundThreads ];
2035+ [NSObjectOverrider runPendingSelectors ];
2036+
2037+ XCTAssertTrue (fireDeleteTags);
2038+ }
2039+
19742040- (void )testSendTagsBeforeRegisterComplete {
19752041 [self setCurrentNotificationPermissionAsUnanswered ];
19762042
0 commit comments