partkeepr

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

InternalPartNumberTest.php (2817B)


      1 <?php
      2 
      3 namespace PartKeepr\PartBundle\Tests;
      4 
      5 use Doctrine\Common\DataFixtures\ProxyReferenceRepository;
      6 use Dunglas\ApiBundle\Api\IriConverter;
      7 use PartKeepr\CoreBundle\Tests\WebTestCase;
      8 
      9 class InternalPartNumberTest extends WebTestCase
     10 {
     11     /**
     12      * @var ProxyReferenceRepository
     13      */
     14     protected $fixtures;
     15 
     16     public function setUp()
     17     {
     18         $this->fixtures = $this->loadFixtures(
     19             [
     20                 'PartKeepr\StorageLocationBundle\DataFixtures\CategoryDataLoader',
     21                 'PartKeepr\StorageLocationBundle\DataFixtures\StorageLocationLoader',
     22                 'PartKeepr\PartBundle\DataFixtures\CategoryDataLoader',
     23                 'PartKeepr\PartBundle\DataFixtures\PartDataLoader',
     24                 'PartKeepr\ManufacturerBundle\Tests\DataFixtures\ManufacturerDataLoader',
     25                 'PartKeepr\DistributorBundle\Tests\DataFixtures\DistributorDataLoader',
     26             ]
     27         )->getReferenceRepository();
     28     }
     29 
     30     public function testInternalPartNumberUniqueness()
     31     {
     32         $client = static::makeClient(true);
     33 
     34         /**
     35          * @var IriConverter
     36          */
     37         $iriConverter = $this->getContainer()->get('api.iri_converter');
     38 
     39         $part = [
     40             "name"               => "foobar",
     41             "storageLocation"    => $iriConverter->getIriFromItem($this->fixtures->getReference("storagelocation.first")),
     42             "category"           => $iriConverter->getIriFromItem($this->fixtures->getReference("partcategory.first")),
     43             "partUnit"           => $iriConverter->getIriFromItem($this->fixtures->getReference("partunit.default")),
     44             "internalPartNumber" => "foo123",
     45         ];
     46 
     47         $client->request(
     48             'POST',
     49             '/api/parts',
     50             [],
     51             [],
     52             ['CONTENT_TYPE' => 'application/json'],
     53             json_encode($part)
     54         );
     55         $client->request(
     56             'POST',
     57             '/api/parts',
     58             [],
     59             [],
     60             ['CONTENT_TYPE' => 'application/json'],
     61             json_encode($part)
     62         );
     63 
     64         $this->assertEquals(500, $client->getResponse()->getStatusCode());
     65 
     66         $response = json_decode($client->getResponse()->getContent());
     67 
     68         $this->assertObjectHasAttribute("@type", $response);
     69         $this->assertObjectHasAttribute("@context", $response);
     70         $this->assertObjectHasAttribute('hydra:title', $response);
     71         $this->assertObjectHasAttribute('hydra:description', $response);
     72 
     73         $this->assertEquals('/api/contexts/Error', $response->{'@context'});
     74         $this->assertEquals('Error', $response->{'@type'});
     75         $this->assertEquals('An error occurred', $response->{'hydra:title'});
     76         $this->assertEquals('The internal part number is already used', $response->{'hydra:description'});
     77     }
     78 }