summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicoleYarroch <nicole@livio.io>2020-06-22 16:12:19 -0400
committerNicoleYarroch <nicole@livio.io>2020-06-22 16:12:19 -0400
commit80659cf1bb3665619db2c576ea36054418cf322d (patch)
treec34534dd9389c2f3a0c432464b58031cdd093cc7
parent1eac3528e2070c8672b6690925877e4b30192fdd (diff)
downloadsdl_ios-80659cf1bb3665619db2c576ea36054418cf322d.tar.gz
Fixed broken unsubscribe method
Signed-off-by: NicoleYarroch <nicole@livio.io>
-rw-r--r--SmartDeviceLink/SDLSubscribeButtonManager.m12
-rw-r--r--SmartDeviceLinkTests/SDLSubscribeButtonManagerSpec.m27
2 files changed, 27 insertions, 12 deletions
diff --git a/SmartDeviceLink/SDLSubscribeButtonManager.m b/SmartDeviceLink/SDLSubscribeButtonManager.m
index 5d920eab1..fbe8d5f10 100644
--- a/SmartDeviceLink/SDLSubscribeButtonManager.m
+++ b/SmartDeviceLink/SDLSubscribeButtonManager.m
@@ -102,7 +102,17 @@ NS_ASSUME_NONNULL_BEGIN
return completionHandler(nil);
}
- [self.subscribeButtonObservers[buttonName] removeObject:observer];
+ NSMutableArray *subscribedObservers = self.subscribeButtonObservers[buttonName];
+ for (uint i = 0; i < subscribedObservers.count; i += 1) {
+ SDLSubscribeButtonObserver *subscribedObserver = (SDLSubscribeButtonObserver *)subscribedObservers[i];
+ if (subscribedObserver.observer != observer ) { continue; }
+ [subscribedObservers removeObjectAtIndex:i];
+ break;
+ }
+
+ self.subscribeButtonObservers[buttonName] = (subscribedObservers.count > 0) ? subscribedObservers : nil;
+
+ // [self.subscribeButtonObservers[buttonName] removeObject:observer];
if (self.subscribeButtonObservers[buttonName].count > 0) {
return completionHandler(nil);
}
diff --git a/SmartDeviceLinkTests/SDLSubscribeButtonManagerSpec.m b/SmartDeviceLinkTests/SDLSubscribeButtonManagerSpec.m
index 697825f6d..27beeffb4 100644
--- a/SmartDeviceLinkTests/SDLSubscribeButtonManagerSpec.m
+++ b/SmartDeviceLinkTests/SDLSubscribeButtonManagerSpec.m
@@ -345,17 +345,22 @@ describe(@"subscribe button manager", ^{
});
it(@"should unsubscribe the observer if there are multiple observers subscribed to the button", ^{
-// id subscriptionID1 = [testManager subscribeButton:testButtonName withUpdateHandler:testUpdateHandler1];
-// [testManager subscribeButton:testButtonName withUpdateHandler:testUpdateHandler2];
-//
-// [testManager unsubscribeButton:testButtonName withObserver:subscriptionID1 withCompletionHandler:testCompletionHandler1];
-//
-// NSArray<SDLSubscribeButtonObserver *> *observers = testManager.subscribeButtonObservers[testButtonName];
-// expect(observers.count).to(equal(1));
-// expect((id)observers[0].updateBlock).to(equal((id)testUpdateHandler2));
-//
-// expect(testCompletionHandler1Called).to(beTrue());
-// expect(testConnectionManager.receivedRequests.count).to(equal(1));
+ id subscriptionID1 = [testManager subscribeButton:testButtonName withUpdateHandler:testUpdateHandler1];
+ id subscriptionID2 = [testManager subscribeButton:testButtonName withUpdateHandler:testUpdateHandler2];
+
+ [testManager unsubscribeButton:testButtonName withObserver:subscriptionID1 withCompletionHandler:testCompletionHandler1];
+
+ NSArray<SDLSubscribeButtonObserver *> *observers = testManager.subscribeButtonObservers[testButtonName];
+ expect(observers.count).to(equal(1));
+ expect((id)observers[0].updateBlock).to(equal((id)testUpdateHandler2));
+
+ expect(testCompletionHandler1Called).to(beTrue());
+ expect(testCompletionHandler2Called).to(beFalse());
+
+ expect(testConnectionManager.receivedRequests.count).to(equal(1));
+ for (SDLRPCMessage *request in testConnectionManager.receivedRequests) {
+ expect([request isKindOfClass:SDLUnsubscribeButton.class]).to(beFalse());
+ }
});