Avoids retaining the view controller until update completes

This commit is contained in:
Diego Sanchez 2016-02-26 11:06:07 +00:00
parent 340a2677f1
commit cf5901cf80
2 changed files with 11 additions and 3 deletions

View File

@ -41,6 +41,7 @@ extension BaseChatViewController: ChatDataSourceDelegateProtocol {
let oldItems = sSelf.chatItemCompanionCollection
sSelf.updateModels(newItems: newItems, oldItems: oldItems, updateType: updateType, completion: {
guard let sSelf = self else { return }
if sSelf.updateQueue.isEmpty {
sSelf.enqueueMessageCountReductionIfNeeded()
}

View File

@ -153,11 +153,10 @@ class ChatViewControllerTests: XCTestCase {
}
}
func testThat_ControllerDoesNotLeak() {
func testThat_WhenUpdatesFinish_ControllerIsNotRetained() {
let asyncExpectation = expectationWithDescription("update")
let updateQueue = SerialTaskQueueTestHelper()
let presenterBuilder = FakePresenterBuilder()
var controller: TesteableChatViewController! = TesteableChatViewController(presenterBuilders: ["fake-type": [presenterBuilder]])
var controller: TesteableChatViewController! = TesteableChatViewController(presenterBuilders: ["fake-type": [FakePresenterBuilder()]])
weak var weakController = controller
controller.updateQueue = updateQueue
let fakeDataSource = FakeDataSource()
@ -173,6 +172,14 @@ class ChatViewControllerTests: XCTestCase {
}
}
func testThat_WhenLayoutFinishes_ControllerIsNotRetained() {
var controller: TesteableChatViewController! = TesteableChatViewController(presenterBuilders: ["fake-type": [FakePresenterBuilder()]])
weak var weakController = controller
controller.chatDataSource = FakeDataSource()
self.fakeDidAppearAndLayout(controller: controller)
controller = nil
XCTAssertNil(weakController)
}
func testThat_LayoutAdaptsWhenKeyboardIsShown() {
let controller = TesteableChatViewController()