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 }