diff --git a/Spec/NSObject+TestSuite.swift b/Spec/NSObject+TestSuite.swift index 766dbd692..29ab72f00 100644 --- a/Spec/NSObject+TestSuite.swift +++ b/Spec/NSObject+TestSuite.swift @@ -11,11 +11,11 @@ import Aspects extension NSObject { /// Inject a block of code to the identified class method. - class func testSuite_injectIntoClassMethod(selector: Selector, code: ()->()) { + class func testSuite_injectIntoClassMethod(selector: Selector, code: ()->()) -> AspectToken? { let block: @convention(block) (AspectInfo) -> Void = { _ in code() } - let _ = try! self.aspect_hookSelector(selector, withOptions: .PositionAfter, usingBlock: unsafeBitCast(block, AnyObject.self)) + return try? self.aspect_hookSelector(selector, withOptions: .PositionAfter, usingBlock: unsafeBitCast(block, AnyObject.self)) } } diff --git a/Spec/RealtimeClientChannel.swift b/Spec/RealtimeClientChannel.swift index 719cdbffc..b49c704a8 100644 --- a/Spec/RealtimeClientChannel.swift +++ b/Spec/RealtimeClientChannel.swift @@ -1401,9 +1401,10 @@ class RealtimeClientChannel: QuickSpec { defer { realtime.close() } var restChannelHistoryMethodWasCalled = false - ARTRestChannel.testSuite_injectIntoClassMethod("history:callback:error:") { + let hook = ARTRestChannel.testSuite_injectIntoClassMethod("history:callback:error:") { restChannelHistoryMethodWasCalled = true } + defer { hook?.remove() } let channelRest = rest.channels.get("test") let channelRealtime = realtime.channels.get("test") diff --git a/Spec/RealtimeClientPresence.swift b/Spec/RealtimeClientPresence.swift index aabdb8d85..c9e104330 100644 --- a/Spec/RealtimeClientPresence.swift +++ b/Spec/RealtimeClientPresence.swift @@ -944,9 +944,10 @@ class RealtimeClientPresence: QuickSpec { let channel = client.channels.get("test") var presenceQueryWasCreated = false - ARTRealtimePresenceQuery.testSuite_injectIntoClassMethod("init") { // Default initialiser + let hook = ARTRealtimePresenceQuery.testSuite_injectIntoClassMethod("init") { // Default initialiser presenceQueryWasCreated = true } + defer { hook?.remove() } waitUntil(timeout: testTimeout) { done in channel.presence.get { members, error in @@ -1095,6 +1096,53 @@ class RealtimeClientPresence: QuickSpec { } + // RTP12 + context("history") { + + // RTP12a + it("should support all the same params as Rest") { + let options = AblyTests.commonAppSetup() + + let rest = ARTRest(options: options) + + let realtime = ARTRealtime(options: options) + defer { realtime.close() } + + var restPresenceHistoryMethodWasCalled = false + var hook = ARTRestPresence.testSuite_injectIntoClassMethod("history:callback:error:") { + restPresenceHistoryMethodWasCalled = true + } + defer { hook?.remove() } + + let channelRest = rest.channels.get("test") + let channelRealtime = realtime.channels.get("test") + + let queryRealtime = ARTRealtimeHistoryQuery() + queryRealtime.start = NSDate() + queryRealtime.end = NSDate() + queryRealtime.direction = .Forwards + queryRealtime.limit = 50 + + let queryRest = queryRealtime as ARTDataQuery + + waitUntil(timeout: testTimeout) { done in + try! channelRest.presence.history(queryRest) { _, _ in + done() + } + } + expect(restPresenceHistoryMethodWasCalled).to(beTrue()) + restPresenceHistoryMethodWasCalled = false + + waitUntil(timeout: testTimeout) { done in + try! channelRealtime.presence.history(queryRealtime) { _, _ in + done() + } + } + expect(restPresenceHistoryMethodWasCalled).to(beTrue()) + } + + } + } } }