                             }
 
                         }
+
+                        context("final") {
+
+                            it("all completed") {
+                                service.resumeAll()
+                                expect(isFinalCalled) == false
+                                expect(isFinalCalled).toEventually(beTrue())
+                            }
+
+                            it("some completed") {
+                                service.resume(task3)
+                                expect(isFinalCalled) == false
+                                expect(isFinalCalled).toNotEventually(beTrue())
+                            }
+
+                        }
                     }
 
                 }

                var service: ServiceQueue!
                let call = Call(path: "mock")
                let config = Configuration(baseURL: "mockService")

                beforeEach {
                    mockSession = MockAsyncSession()
                    mockSession.urlResponse = HTTPURLResponse(url: URL(string: "http://www.google.com")!, statusCode: 200, httpVersion:nil, headerFields: nil)
                }

                context("not started") {

                    var succeeded = false

                    beforeEach {
                        succeeded = false
                        service = ServiceQueue(configuration: config, faroSession: mockSession) {
                            succeeded = true
                        }

                    }

                    it("add one") {
                        service.perform(call, autoStart: false) { (result: Result<MockModel>) in
                            succeeded = true
                        }
                        expect(service.hasOustandingTasks) == true
                        expect(succeeded).toNotEventually(beTrue())
                    }

                    it("add multiple") {
                        let task1 = service.perform(call, autoStart: false) { (result: Result<MockModel>) in
                            succeeded = true
                        }!
                        let task2 = service.perform(call, autoStart: false) { (result: Result<MockModel>) in
                            succeeded = true
                        }!

                        let task3 = service.perform(call, autoStart: false) { (result: Result<MockModel>) in
                            succeeded = true
                        }!

                        expect(service.hasOustandingTasks) == true
                        expect(succeeded).toNotEventually(beTrue())
                        expect(service.taskQueue).to(contain([task1, task2, task3]))
                    }

                }

                        var task1: URLSessionDataTask!
                        var task2: URLSessionDataTask!
                        var task3: URLSessionDataTask!
                        beforeEach {
                            isFinalCalled = false
                            service = ServiceQueue(configuration: config, faroSession: mockSession) {
                                isFinalCalled = true
                            }
                            task1 = service.perform(call, autoStart: false) { (_: Result<MockModel>) in }!
                            task2 = service.perform(call, autoStart: true) { (_: Result<MockModel>) in }!
