response = new Response(); $this->handler = new Handler(); $this->handler->setResponse($this->response); $this->tracker = new Tracker(); $this->requestSet = new RequestSet(); } public function test_init_ShouldInitiateResponseInstance() { $this->handler->init($this->tracker, $this->requestSet); $this->assertTrue($this->response->isInit); $this->assertFalse($this->response->isResponseOutput); $this->assertFalse($this->response->isSend); } public function test_finish_ShouldOutputAndSendResponse() { $response = $this->handler->finish($this->tracker, $this->requestSet); $this->assertEquals('My Dummy Content', $response); $this->assertFalse($this->response->isInit); $this->assertFalse($this->response->isExceptionOutput); $this->assertTrue($this->response->isResponseOutput); $this->assertTrue($this->response->isSend); } public function test_onException_ShouldOutputAndSendResponse() { $this->executeOnException($this->buildException()); $this->assertFalse($this->response->isInit); $this->assertFalse($this->response->isResponseOutput); $this->assertTrue($this->response->isExceptionOutput); $this->assertFalse($this->response->isSend); } public function test_onException_ShouldPassExceptionToResponse() { $exception = $this->buildException(); $this->executeOnException($exception); $this->assertSame($exception, $this->response->exception); $this->assertSame(500, $this->response->statusCode); } public function test_onException_ShouldSendStatusCode400IfUnexpectedWebsite() { $this->executeOnException(new UnexpectedWebsiteFoundException('test')); $this->assertSame(400, $this->response->statusCode); } public function test_onException_ShouldSendStatusCode400IfInvalidRequestParameterException() { $this->executeOnException(new InvalidRequestParameterException('test')); $this->assertSame(400, $this->response->statusCode); } public function test_onException_ShouldNotRethrowAnException() { $exception = $this->buildException(); $this->handler->onException($this->tracker, $this->requestSet, $exception); $this->assertTrue(true); } public function test_onAllRequestsTracked_ShouldNeverTriggerScheduledTasksEvenIfEnabled() { $runner = new ScheduledTasksRunner(); $runner->shouldRun = true; $this->handler->setScheduledTasksRunner($runner); $this->handler->onAllRequestsTracked($this->tracker, $this->requestSet); $this->assertFalse($runner->ranScheduledTasks); } public function test_process_ShouldTrackAllSetRequests() { $this->assertSame(0, $this->tracker->getCountOfLoggedRequests()); $this->requestSet->setRequests(array( array('idsite' => 1, 'url' => 'http://localhost/foo?bar'), array('idsite' => 1, 'url' => 'http://localhost'), )); $this->handler->process($this->tracker, $this->requestSet); $this->assertSame(2, $this->tracker->getCountOfLoggedRequests()); } private function buildException() { return new \Exception('MyMessage', 292); } private function executeOnException(Exception $exception) { try { $this->handler->onException($this->tracker, $this->requestSet, $exception); } catch (Exception $e) { } } }