partkeepr

fork of partkeepr
git clone https://git.e1e0.net/partkeepr.git
Log | Files | Refs | Submodules | README | LICENSE

AbstractCategoryCreateTest.php (3011B)


      1 <?php
      2 
      3 namespace PartKeepr\CategoryBundle\Tests;
      4 
      5 use Doctrine\Common\DataFixtures\ProxyReferenceRepository;
      6 use Dunglas\ApiBundle\Api\IriConverter;
      7 use PartKeepr\CoreBundle\Tests\WebTestCase;
      8 
      9 abstract class AbstractCategoryCreateTest extends WebTestCase
     10 {
     11     /**
     12      * @var ProxyReferenceRepository
     13      */
     14     protected $fixtures;
     15 
     16     public function setUp()
     17     {
     18         $this->fixtures = $this->loadFixtures(
     19             [
     20                 $this->getFixtureLoaderClass(),
     21             ]
     22         )->getReferenceRepository();
     23     }
     24 
     25     public function testCreateCategory()
     26     {
     27         $client = static::makeClient(true);
     28 
     29         $rootCategory = $this->fixtures->getReference($this->getReferencePrefix().'.root');
     30 
     31         /**
     32          * @var IriConverter
     33          */
     34         $iriConverter = $this->getContainer()->get('api.iri_converter');
     35 
     36         $request = [
     37             'parent' => $iriConverter->getIriFromItem($rootCategory),
     38             'name'   => 'test',
     39         ];
     40 
     41         $resource = $this->getContainer()->get('api.resource_collection')->getResourceForEntity($this->getResourceClass());
     42         $iri = $iriConverter->getIriFromResource($resource);
     43 
     44         $client->request(
     45             'POST',
     46             $iri,
     47             [],
     48             [],
     49             ['CONTENT_TYPE' => 'application/json'],
     50             json_encode($request)
     51         );
     52 
     53         $responseObject = json_decode($client->getResponse()->getContent());
     54 
     55         $this->assertInternalType('object', $responseObject);
     56 
     57         $this->assertObjectHasAttribute('@id', $responseObject);
     58         $this->assertObjectHasAttribute('name', $responseObject);
     59 
     60         $item = $iriConverter->getItemFromIri($responseObject->{'@id'});
     61 
     62         $this->assertNotNull($item->getParent());
     63         $this->assertEquals($item->getParent()->getId(), $rootCategory->getId());
     64     }
     65 
     66     public function testCreateRootCategory()
     67     {
     68         $client = static::makeClient(true);
     69 
     70         /**
     71          * @var IriConverter
     72          */
     73         $iriConverter = $this->getContainer()->get('api.iri_converter');
     74 
     75         $request = [
     76             'name' => 'test',
     77         ];
     78 
     79         $resource = $this->getContainer()->get('api.resource_collection')->getResourceForEntity($this->getResourceClass());
     80         $iri = $iriConverter->getIriFromResource($resource);
     81 
     82         $client->request(
     83             'POST',
     84             $iri,
     85             [],
     86             [],
     87             ['CONTENT_TYPE' => 'application/json'],
     88             json_encode($request)
     89         );
     90 
     91         $responseObject = json_decode($client->getResponse()->getContent());
     92 
     93         $this->assertObjectHasAttribute('@type', $responseObject);
     94         $this->assertObjectHasAttribute('hydra:description', $responseObject);
     95 
     96         $this->assertEquals('There may be only one root node', $responseObject->{'hydra:description'});
     97     }
     98 
     99     abstract public function getFixtureLoaderClass();
    100 
    101     abstract public function getReferencePrefix();
    102 
    103     abstract public function getResourceClass();
    104 }