partkeepr

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

StockTest.php (4252B)


      1 <?php
      2 
      3 namespace PartKeepr\PartBundle\Tests;
      4 
      5 use Doctrine\Common\DataFixtures\ProxyReferenceRepository;
      6 use Doctrine\ORM\Query;
      7 use Dunglas\ApiBundle\Api\IriConverter;
      8 use PartKeepr\CoreBundle\Tests\WebTestCase;
      9 use PartKeepr\PartBundle\Entity\Part;
     10 
     11 class StockTest extends WebTestCase
     12 {
     13     /**
     14      * @var ProxyReferenceRepository
     15      */
     16     protected $fixtures;
     17 
     18     public function setUp()
     19     {
     20         $this->fixtures = $this->loadFixtures(
     21             [
     22                 'PartKeepr\StorageLocationBundle\DataFixtures\CategoryDataLoader',
     23                 'PartKeepr\StorageLocationBundle\DataFixtures\StorageLocationLoader',
     24                 'PartKeepr\PartBundle\DataFixtures\CategoryDataLoader',
     25                 'PartKeepr\PartBundle\DataFixtures\PartDataLoader',
     26             ]
     27         )->getReferenceRepository();
     28     }
     29 
     30     private function getStockLevel(Part $part)
     31     {
     32         /**
     33          * @var Query
     34          */
     35         $query = $this->getContainer()->get('doctrine')->getManager()->createQuery('SELECT p.stockLevel FROM PartKeeprPartBundle:Part p WHERE p.id = :id')->setParameter(
     36             'id',
     37             $part->getId()
     38         );
     39 
     40         return $query->getSingleScalarResult();
     41     }
     42 
     43     public function testAddStock()
     44     {
     45         $client = static::makeClient(true);
     46 
     47         /**
     48          * @var Part
     49          */
     50         $part = $this->fixtures->getReference('part.1');
     51         $oldStockLevel = $this->getStockLevel($part);
     52 
     53         /**
     54          * @var IriConverter
     55          */
     56         $iriConverter = $this->getContainer()->get('api.iri_converter');
     57 
     58         $iri = $iriConverter->getIriFromItem($part);
     59         $iri .= '/addStock';
     60 
     61         $request = [
     62             'quantity' => 5,
     63         ];
     64 
     65         $client->request(
     66             'PUT',
     67             $iri,
     68             [],
     69             [],
     70             ['CONTENT_TYPE' => 'application/json'],
     71             json_encode($request)
     72         );
     73 
     74         $result = json_decode($client->getResponse()->getContent());
     75         $newStockLevel = $this->getStockLevel($part);
     76 
     77         $this->assertEquals($oldStockLevel + 5, $newStockLevel);
     78         $this->assertObjectHasAttribute('stockLevel', $result);
     79         $this->assertEquals($newStockLevel, $result->stockLevel);
     80     }
     81 
     82     public function testRemoveStock()
     83     {
     84         $client = static::makeClient(true);
     85 
     86         /**
     87          * @var Part
     88          */
     89         $part = $this->fixtures->getReference('part.1');
     90         $oldStockLevel = $this->getStockLevel($part);
     91 
     92         /**
     93          * @var IriConverter
     94          */
     95         $iriConverter = $this->getContainer()->get('api.iri_converter');
     96 
     97         $iri = $iriConverter->getIriFromItem($part);
     98         $iri .= '/removeStock';
     99 
    100         $request = [
    101             'quantity' => 7,
    102         ];
    103 
    104         $client->request(
    105             'PUT',
    106             $iri,
    107             [],
    108             [],
    109             ['CONTENT_TYPE' => 'application/json'],
    110             json_encode($request)
    111         );
    112 
    113         $result = json_decode($client->getResponse()->getContent());
    114         $newStockLevel = $this->getStockLevel($part);
    115 
    116         $this->assertEquals($oldStockLevel - 7, $newStockLevel);
    117         $this->assertObjectHasAttribute('stockLevel', $result);
    118         $this->assertEquals($newStockLevel, $result->stockLevel);
    119     }
    120 
    121     public function testSetStock()
    122     {
    123         $client = static::makeClient(true);
    124 
    125         /**
    126          * @var Part
    127          */
    128         $part = $this->fixtures->getReference('part.1');
    129 
    130         /**
    131          * @var IriConverter
    132          */
    133         $iriConverter = $this->getContainer()->get('api.iri_converter');
    134 
    135         $iri = $iriConverter->getIriFromItem($part);
    136         $iri .= '/setStock';
    137 
    138         $request = [
    139             'quantity' => 33,
    140         ];
    141 
    142         $client->request(
    143             'PUT',
    144             $iri,
    145             [],
    146             [],
    147             ['CONTENT_TYPE' => 'application/json'],
    148             json_encode($request)
    149         );
    150 
    151         $result = json_decode($client->getResponse()->getContent());
    152         $newStockLevel = $this->getStockLevel($part);
    153 
    154         $this->assertEquals(33, $newStockLevel);
    155         $this->assertObjectHasAttribute('stockLevel', $result);
    156         $this->assertEquals($newStockLevel, $result->stockLevel);
    157     }
    158 }