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 }