Skip to content

Instantly share code, notes, and snippets.

@srosato
Created March 2, 2016 18:58
Show Gist options
  • Save srosato/8458f9d5f1bdca549270 to your computer and use it in GitHub Desktop.
Save srosato/8458f9d5f1bdca549270 to your computer and use it in GitHub Desktop.
API Testing Example
<?php
namespace Tests\Ez\Functional\Api;
use Codeception\Scenario;
use FOS\RestBundle\Util\Codes;
use Tests\Ez\FunctionalTester;
/**
* @group api
* @group api.lead_retrieval
*/
class LeadRetrievalOrdersCest extends ApiCest
{
const POST_RESERVATION = 'api_post_leadretrieval_reservation';
const PUT_RESERVATION = 'api_post_leadretrieval_reservation';
/**
* @param FunctionalTester $tester
* @param Scenario $scenario
*
* @group api.lead_retrieval.new_reservation
*/
public function shouldBePossibleToCreateANewReservation(FunctionalTester $tester, Scenario $scenario)
{
$tester->sendPOST($this->generateJsonUrl($tester, self::POST_RESERVATION), $this->getDefaultReservationData());
$tester->dontSeeValidationFailedInResponse();
$tester->seeResponseCodeIsWithoutException(Codes::HTTP_CREATED);
$response = $this->getJsonResponse($tester);
$this->checkThat($response, hasKey('id'));
$this->checkThat($response['id'], is(intValue()));
}
}
<?php
namespace Ez\Api\Controller;
use Ez\Api\Form\LeadRetrieval\ReservationType;
use Ez\Domain\LeadRetrieval\Reservation\ReservationRequest;
use Ez\App\Entity\LeadRetrievalRegistration;
use FOS\RestBundle\Controller\Annotations\Get;
use FOS\RestBundle\Routing\ClassResourceInterface;
use FOS\RestBundle\Util\Codes;
use FOS\RestBundle\View\View;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\HttpException;
/**
* To easily debug this api, use ?XDEBUG_SESSION_START=PHPSTORM with your favorite REST client.
* @author Steven Rosato <steven.rosato@majisti.com>
*/
class ReservationController extends Controller implements ClassResourceInterface
{
/**
* @param Request $request
*
* @return Response
*/
public function postAction(Request $request)
{
$reservationRequest = new ReservationRequest();
$data = $this->createForm(new ReservationType(), $reservationRequest);
$data->handleRequest($request);
if( !$data->isSubmitted() ) {
throw new HttpException(Codes::HTTP_BAD_REQUEST, "Must provide reservation data.");
}
if( $data->isValid() ) {
$data = $this->createResource($request);
}
return $this->get('fos_rest.view_handler')->handle(View::create($data, Codes::HTTP_CREATED));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment