protected function validateScenarioNameOrThrowException(Expectation $expectation, LoggerInterface $logger) { if (!$expectation->getScenarioName() && ($expectation->getScenarioStateIs() || $expectation->getNewScenarioState())) { $logger->error('Scenario name related misconfiguration'); throw new \RuntimeException('Expecting or trying to set scenario state without specifying scenario name'); } }
/** * * @param \Mcustiel\Phiremock\Domain\Expectation $foundExpectation */ private function processScenario($foundExpectation) { if ($foundExpectation->getNewScenarioState()) { if (!$foundExpectation->getScenarioName()) { throw new \RuntimeException('Expecting scenario state without specifying scenario name'); } $this->scenarioStorage->setScenarioState($foundExpectation->getScenarioName(), $foundExpectation->getNewScenarioState()); } }
public function createResponse(Expectation $expectation, TransactionData $transactionData) { $responseConfig = $expectation->getResponse(); $httpResponse = $transactionData->getResponse(); $httpResponse = $this->getResponseWithBody($responseConfig, $httpResponse); $httpResponse = $this->getResponseWithStatusCode($responseConfig, $httpResponse); $httpResponse = $this->getResponseWithHeaders($responseConfig, $httpResponse); $this->processDelay($responseConfig); return $httpResponse; }
private function getResponseWithBody(Expectation $expectation, ResponseInterface $httpResponse, ServerRequestInterface $httpRequest) { $responseBody = $expectation->getResponse()->getBody(); if ($responseBody) { $responseBody = $this->fillWithUrlMatches($expectation, $httpRequest, $responseBody); $responseBody = $this->fillWithBodyMatches($expectation, $httpRequest, $responseBody); $httpResponse = $httpResponse->withBody(new StringStream($responseBody)); } return $httpResponse; }
public function failOnEmptyHeadersInspecificationTest(AcceptanceTester $I) { $I->wantTo('fail when creating a specification with invalid headers'); $request = new Request(); $request->setUrl(new Condition('isEqualTo', '/the/request/url')); $response = (new Response())->setHeaders('potato'); $specification = new Expectation(); $specification->setRequest($request)->setResponse($response); $I->haveHttpHeader('Content-Type', 'application/json'); $I->sendPOST('/__phiremock/expectations', $specification); $I->seeResponseCodeIs(500); }
public function failWhenInvalidValueSpecifiedTest(AcceptanceTester $I) { $I->wantTo('create an expectation that checks url using matches'); $request = new Request(); $request->setUrl(new Condition('isEqualTo', null)); $response = new Response(); $response->setStatusCode(201); $expectation = new Expectation(); $expectation->setRequest($request)->setResponse($response); $I->haveHttpHeader('Content-Type', 'application/json'); $I->sendPOST('/__phiremock/expectations', $expectation); $I->seeResponseCodeIs(500); $I->seeResponseIsJson(); $I->seeResponseEquals('{"result" : "ERROR", "details" : ["Condition value can not be null"]}'); }
public function useDefaultWhenNoStatusCodeIsSetTest(AcceptanceTester $I) { $I->wantTo('fail when the status code is not set'); $request = new Request(); $request->setUrl(new Condition('isEqualTo', '/the/request/url')); $response = (new Response())->setStatusCode(null); $expectation = new Expectation(); $expectation->setRequest($request)->setResponse($response); $I->haveHttpHeader('Content-Type', 'application/json'); $I->sendPOST('/__phiremock/expectations', $expectation); $I->seeResponseCodeIs(201); $I->sendGET('/__phiremock/expectations'); $I->seeResponseCodeIs(200); $I->seeResponseIsJson(); $I->seeResponseEquals('[{"scenarioName":null,"scenarioStateIs":null,"newScenarioState":null,' . '"request":{"method":null,"url":{"isEqualTo":"\\/the\\/request\\/url"},"body":null,"headers":null},' . '"response":{"statusCode":200,"body":null,"headers":null,"delayMillis":null},' . '"proxyTo":null,"priority":0}]'); }
public function returnCreatedExpectationTest(AcceptanceTester $I) { $request = new Request(); $urlCondition = new Condition('isEqualTo', '/the/request/url'); $request->setUrl($urlCondition); $response = new Response(); $response->setStatusCode(201); $expectation = new Expectation(); $expectation->setRequest($request)->setResponse($response); $I->haveHttpHeader('Content-Type', 'application/json'); $I->sendPOST('/__phiremock/expectations', $expectation); $I->sendGET('/__phiremock/expectations'); $I->seeResponseCodeIs('200'); $I->seeResponseIsJson(); $I->seeResponseEquals('[{"scenarioName":null,"scenarioStateIs":null,"newScenarioState":null,' . '"request":{"method":null,"url":{"isEqualTo":"\\/the\\/request\\/url"},"body":null,"headers":null},' . '"response":{"statusCode":201,"body":null,"headers":null,"delayMillis":null},' . '"proxyTo":null,"priority":0}]'); }
public function mockRequestWithDelayTest(AcceptanceTester $I) { $I->wantTo('mock a request with delay'); $request = new Request(); $request->setUrl(new Condition('isEqualTo', '/the/request/url'))->setMethod('GET'); $response = new Response(); $response->setDelayMillis(2000); $expectation = new Expectation(); $expectation->setRequest($request)->setResponse($response); $I->haveHttpHeader('Content-Type', 'application/json'); $I->sendPOST('/__phiremock/expectations', $expectation); $I->seeResponseCodeIs(201); $start = microtime(true); $I->sendGET('/the/request/url'); $I->seeResponseCodeIs(200); $I->assertGreaterThan(2000, (microtime(true) - $start) * 1000); }
private function checkScenarioNameOrThrowException(Expectation $expectation) { if (!$expectation->getScenarioName()) { throw new \RuntimeException('Expecting scenario state without specifying scenario name'); } }
public function responseExpectedWhenSeveralHeadersMatchesTest(AcceptanceTester $I) { $I->wantTo('see if mocking based in several request headers works'); $request = new Request(); $request->setHeaders(['Content-type' => new Condition('isEqualTo', 'application/x-www-form-urlencoded'), 'X-Potato' => new Condition('matches', '/.*tomato.*/'), 'X-Tomato' => new Condition('isSameString', 'PoTaTo')]); $response = new Response(); $response->setBody('Found'); $expectation = new Expectation(); $expectation->setRequest($request)->setResponse($response); $I->haveHttpHeader('Content-Type', 'application/json'); $I->sendPOST('/__phiremock/expectations', $expectation); $I->seeResponseCodeIs(201); $I->haveHttpHeader('Content-Type', 'application/x-www-form-urlencoded'); $I->sendGET('/dontcare'); $I->seeResponseCodeIs(404); $I->haveHttpHeader('Content-Type', 'application/x-www-form-urlencoded'); $I->haveHttpHeader('X-potato', 'a-tomato-0'); $I->haveHttpHeader('X-tomato', 'potato'); $I->sendGET('/dontcare'); $I->seeResponseEquals('Found'); }
public function responseExpectedWhenRequestBodyCaseInsensitiveEqualsTest(AcceptanceTester $I) { $I->wantTo('see if mocking based in request body case insensitive equality works'); $request = new Request(); $request->setBody(new Condition('isSameString', 'pOtAtO')); $response = new Response(); $response->setBody('Found'); $expectation = new Expectation(); $expectation->setRequest($request)->setResponse($response); $I->haveHttpHeader('Content-Type', 'application/json'); $I->sendPOST('/__phiremock/expectations', $expectation); $I->seeResponseCodeIs(201); $I->sendPOST('/dontcare', 'potato'); $I->seeResponseCodeIs(200); $I->seeResponseEquals('Found'); }
public function countExecutionsTest(AcceptanceTester $I) { $I->sendDELETE('/__phiremock/executions'); $expectation = new Expectation(); $request = new Request(); $request->setMethod('get'); $request->setUrl(new Condition('isEqualTo', '/potato')); $response = new Response(); $response->setStatusCode(201); $response->setBody('Tomato!'); $expectation->setRequest($request)->setResponse($response); $this->phiremock->createExpectation($expectation); $I->sendGET('/potato'); $I->seeResponseCodeIs(201); $I->seeResponseEquals('Tomato!'); $I->sendGET('/potato'); $count = $this->phiremock->countExecutions(A::getRequest()->andUrl(Is::equalTo('/potato'))); $I->assertEquals(2, $count); }
/** * * {@inheritdoc} * * @see \Mcustiel\Phiremock\Server\Utils\Strategies\ResponseCreatorInterface::createResponse() */ public function createResponse(Expectation $expectation, TransactionData $transactionData) { $url = $expectation->getProxyTo(); $this->logger->debug('Proxying request to : ' . $url); return $this->httpService->send($transactionData->getRequest()->withUri(new Uri($url))); }
/** * @param \Mcustiel\Phiremock\Domain\Expectation $expectation */ private function setScenario(Expectation $expectation) { if ($this->scenarioName && $this->scenarioIs) { $expectation->setScenarioName($this->scenarioName)->setScenarioStateIs($this->scenarioIs); } }
public function failWhenInvalidMethodSpecifiedTest(AcceptanceTester $I) { $I->wantTo('create a specification that checks url using matches'); $request = new Request(); $request->setMethod('potato'); $response = new Response(); $response->setStatusCode(201); $expectation = new Expectation(); $expectation->setRequest($request)->setResponse($response); $I->haveHttpHeader('Content-Type', 'application/json'); $I->sendPOST('/__phiremock/expectations', $expectation); $I->seeResponseCodeIs(500); $I->seeResponseIsJson(); $I->seeResponseEquals('{"result" : "ERROR", "details" : {"request":"method: Field method, was set with invalid value: \'potato\'"}}'); }
private function requestBodyOrUrlAreRegexp(Expectation $expectation) { return $expectation->getRequest()->getBody() && $expectation->getRequest()->getBody()->getMatcher() == Matchers::MATCHES || $expectation->getRequest()->getUrl() && $expectation->getRequest()->getUrl()->getMatcher() == Matchers::MATCHES; }
public function useDefaultWhenEmptyResponseTest(AcceptanceTester $I) { $I->wantTo('When response is empty in request, default should be used'); $request = new Request(); $request->setMethod('get'); $expectation = new Expectation(); $expectation->setRequest($request); $I->haveHttpHeader('Content-Type', 'application/json'); $I->sendPOST('/__phiremock/expectations', $expectation); $I->seeResponseCodeIs('201'); $I->sendGET('/__phiremock/expectations'); $I->seeResponseCodeIs('200'); $I->seeResponseIsJson(); $I->seeResponseEquals('[{"scenarioName":null,"scenarioStateIs":null,"newScenarioState":null,' . '"request":{"method":"get","url":null,"body":null,"headers":null},' . '"response":{"statusCode":200,"body":null,"headers":null,"delayMillis":null},' . '"proxyTo":null,"priority":0}]'); }