getMockRequest()->shouldReceive('getTransactionId')->andReturn('123456'); } public function testDirectPurchaseSuccess() { $httpResponse = $this->getMockHttpResponse('DirectPurchaseSuccess.txt'); $response = new Response($this->getMockRequest(), $httpResponse->getBody()); $this->assertTrue($response->isSuccessful()); $this->assertFalse($response->isRedirect()); $this->assertSame('{"SecurityKey":"OUWLNYQTVT","TxAuthNo":"9962","VPSTxId":"{5A1BC414-5409-48DD-9B8B-DCDF096CE0BE}","VendorTxCode":"123456"}', $response->getTransactionReference()); $this->assertSame('Direct transaction from Simulator.', $response->getMessage()); } public function testDirectPurchaseFailure() { $httpResponse = $this->getMockHttpResponse('DirectPurchaseFailure.txt'); $response = new Response($this->getMockRequest(), $httpResponse->getBody()); $this->assertFalse($response->isSuccessful()); $this->assertFalse($response->isRedirect()); $this->assertSame('{"VendorTxCode":"123456"}', $response->getTransactionReference()); $this->assertSame('The VendorTxCode \'984297\' has been used before. Each transaction you send should have a unique VendorTxCode.', $response->getMessage()); } public function testDirectPurchase3dSecure() { $httpResponse = $this->getMockHttpResponse('DirectPurchase3dSecure.txt'); $response = new Response($this->getMockRequest(), $httpResponse->getBody()); $this->getMockRequest()->shouldReceive('getReturnUrl')->once()->andReturn('https://www.example.com/return'); $this->assertFalse($response->isSuccessful()); $this->assertTrue($response->isRedirect()); $this->assertSame('{"VendorTxCode":"123456"}', $response->getTransactionReference()); $this->assertNull($response->getMessage()); $this->assertSame('https://test.sagepay.com/Simulator/3DAuthPage.asp', $response->getRedirectUrl()); $redirectData = $response->getRedirectData(); $this->assertSame('065379457749061954', $redirectData['MD']); $this->assertSame('BSkaFwYFFTYAGyFbAB0LFRYWBwsBZw0EGwECEX9YRGFWc08pJCVVKgAANS0KADoZCCAMBnIeOxcWRg0LERdOOTQRDFRdVHNYUgwTMBsBCxABJw4DJHE+ERgPCi8MVC0HIAROCAAfBUk4ER89DD0IWDkvMQ1VdFwoUFgwXVYvbHgvMkdBXXNbQGIjdl1ZUEc1XSwqAAgUUicYBDYcB3I2AjYjIzsn', $redirectData['PaReq']); $this->assertSame('https://www.example.com/return', $redirectData['TermUrl']); } public function testCaptureSuccess() { $httpResponse = $this->getMockHttpResponse('SharedCaptureSuccess.txt'); $response = new Response($this->getMockRequest(), $httpResponse->getBody()); $this->assertTrue($response->isSuccessful()); $this->assertSame('{"VendorTxCode":"123456"}', $response->getTransactionReference()); $this->assertSame('The transaction was RELEASEed successfully.', $response->getMessage()); } public function testCaptureFailure() { $httpResponse = $this->getMockHttpResponse('SharedCaptureFailure.txt'); $response = new Response($this->getMockRequest(), $httpResponse->getBody()); $this->assertFalse($response->isSuccessful()); $this->assertSame('{"VendorTxCode":"123456"}', $response->getTransactionReference()); $this->assertSame('You are trying to RELEASE a transaction that has already been RELEASEd or ABORTed.', $response->getMessage()); } public function testDirectPurchaseWithToken() { $httpResponse = $this->getMockHttpResponse('DirectPurchaseWithToken.txt'); $response = new Response($this->getMockRequest(), $httpResponse->getBody()); $this->assertTrue($response->isSuccessful()); $this->assertSame('{ABCDEFGH-ABCD-ABCD-ABCD-ABCDEFGHIJKL}', $response->getToken()); } }