/** * Save device to database * * @param \Entity\Device $entity * @param $data * @param $serialNumber * @param null $state */ private function saveEntity($entity, $data, $serialNumber, $state = null) { $entity->setName($data['name']); $entity->setDimensions($data['dimensions']); $entity->setWeight($data['weight']); $entity->setType($this->cast('Mapper\\DeviceType', $data['type'])); $entity->setSerialNumber($serialNumber); $entity->setWarrantyExpirationDate($data['warrantyExpirationDate'] ? new \DateTime($data['warrantyExpirationDate']) : NULL); $entity->setNote($data['note']); $entity->setPrice($data['price'] ? $data['price'] : NULL); if ($state) { $entity->setState($this->cast('Mapper\\DeviceState', $state)); } if (isset($data['location'])) { $entity->setLocation($this->cast('Mapper\\Location', $data['location'])); } $this->persist($entity); $tagsPart = explode(',', $data['tags']); $entity->getTags()->clear(); foreach ($tagsPart as $tag) { $tag = trim($tag); $tagEntity = $this->findOne('DeviceTag', array('name' => $tag)); if ($tagEntity == null) { $tagEntity = new \Entity\DeviceTag(); $tagEntity->setName($tag); $this->persist($tagEntity); $this->flush(); } $entity->getTags()->add($tagEntity); } if ($data['photo']) { $dir = 'uploaded/device/photo/'; $name = ''; do { $name = rand() . '_' . $data['photo']->getName(); } while (file_exists($dir . $name)); copy($data['tmpPhoto'], $dir . $name); $entity->setPhoto($name); } }
public function testEdit() { $em = $this->getService('doctrine')->getEntityManager(); $location = new Location(); $location->setName('Location name'); $location->setCity('Location city'); $location->setStreet('Location street'); $location->setNumber('Location number'); $location->setApartment('Location apartment'); $location->setPostal('00-000'); $location->setPhone('+48100000000'); $location->setEmail('*****@*****.**'); $this->persist($location); $deviceTag = new DeviceTag(); $deviceTag->setName('DeviceTag name'); $this->persist($deviceTag); $device = new Device(); $device->setName('Device name'); $device->setPhoto('Device.photo.jpg'); $device->getTags()->add($deviceTag); $device->setType($em->getRepository('Entity\\DeviceType')->findOneById(1)); $device->setDimensions('10x10x10'); $device->setWarrantyExpirationDate(new \DateTime('2015-01-01')); $device->setWeight('10kg'); $device->setPrice(12.05); $device->setNote('Note'); $device->setSerialNumber('Device serial number'); $device->setState($em->getRepository('Entity\\DeviceState')->findOneById(1)); $device->setLocation($location); $this->persist($device); $this->flush(); $session = $this->createSession(); $session->set('user.id', $this->user->getId()); $client = $this->createClient($session); $client->loadPage('/device/edit/' . $device->getId()); $this->assertEquals(200, $client->getResponse()->getStatusCode(), 'Invalid status code.'); $form = $client->getElement('form'); $fields = $form->getFields(); $this->assertCount(10, $fields, 'Invalid number fields'); $this->assertEquals('Device name', $fields[0]->getData(), 'Invalid value for name'); $this->assertEquals('10x10x10', $fields[1]->getData(), 'Invalid value for dmiesions'); $this->assertEquals('10kg', $fields[2]->getData(), 'Invalid value for weight'); $this->assertEquals('2015-01-01', $fields[3]->getData(), 'Invalid value for warranty expiration date'); $this->assertEquals('12.05', $fields[4]->getData(), 'Invalid value for price'); $this->assertEquals('', $fields[5]->getData(), 'Invalid value for photo'); $this->assertEquals('DeviceTag name', $fields[6]->getData(), 'Invalid value for tags'); $this->assertEquals('Device serial number', $fields[7]->getData(), 'Invalid value for serial number'); $this->assertEquals('Note', $fields[8]->getData(), 'Invalid value for note'); $this->assertEquals('1', $fields[9]->getData(), 'Invalid value for type'); $fields[0]->setData(''); $fields[1]->setData(''); $fields[2]->setData(''); $fields[3]->setData(''); $fields[4]->setData(''); $fields[6]->setData(''); $fields[7]->setData(''); $fields[8]->setData(''); $fields[9]->setData(''); $form->submit(); $form = $client->getElement('form'); $fields = $form->getFields(); $this->assertCount(10, $fields, 'Invalid number fields'); $this->assertEquals('Value can not empty', $fields[0]->getParent()->getElement('label')->getText(), 'Invalid error message for name'); $this->assertEquals('Value can not empty', $fields[1]->getParent()->getElement('label')->getText(), 'Invalid error message for dimensions'); $this->assertEquals('Value can not empty', $fields[2]->getParent()->getElement('label')->getText(), 'Invalid error message for weight'); $this->assertFalse($fields[3]->getParent()->hasElement('label'), 'Redundant error message for warranty expiration date'); $this->assertFalse($fields[4]->getParent()->hasElement('label'), 'Redundant error message for price'); $this->assertFalse($fields[5]->getParent()->hasElement('label'), 'Redundant error message for photo'); $this->assertEquals('Value can not empty', $fields[6]->getParent()->getElement('label')->getText(), 'Invalid error message for tags'); $this->assertEquals('Value can not empty', $fields[7]->getParent()->getElement('label')->getText(), 'Invalid error message for serial number'); $this->assertFalse($fields[8]->getParent()->hasElement('label'), 'Redundant error message for note'); $this->assertEquals('Value can not empty', $fields[9]->getParent()->getElement('label')->getText(), 'Invalid error message for type'); $fields[0]->setData('Name edit'); $fields[1]->setData('2x3x4'); $fields[2]->setData('2kg'); $fields[3]->setData('2016-01-01'); $fields[4]->setData('5.32'); $fields[6]->setData('tag 1,tag 2'); $fields[7]->setData('serial number'); $fields[8]->setData('note edit'); $fields[9]->setData('2'); $form->submit(); $this->assertEquals('/device', $client->getUrl(), 'Invalid url form after submit'); $em->clear(); $device = $em->getRepository('Entity\\Device')->findOneBy(array('id' => $device->getId())); $this->assertEquals('Name edit', $device->getName(), 'Invalid device name'); $this->assertEquals('2x3x4', $device->getDimensions(), 'Invalid device dimensions'); $this->assertEquals('2kg', $device->getWeight(), 'Invalid device weight'); $this->assertEquals('2016-01-01', $device->getWarrantyExpirationDate()->format('Y-m-d'), 'Invalid device warranty expiration date'); $this->assertEquals(5.32, $device->getPrice(), 'Invalid device price'); $this->assertEquals('note edit', $device->getNote(), 'Invalid device note'); $this->assertEquals(2, $device->getType()->getId(), 'Invalid device type'); $this->assertEquals($location->getId(), $device->getLocation()->getId(), 'Invalid device location'); $tags = $device->getTags(); $this->assertCount(2, $tags, 'Invalid count device tags'); $this->assertTrue(in_array('tag 1', array($tags[0]->getName(), $tags[1]->getName())), 'Invalid device tag 1 name'); $this->assertTrue(in_array('tag 2', array($tags[0]->getName(), $tags[1]->getName())), 'Invalid device tag 2 name'); $this->assertEquals('serial number', $device->getSerialNumber(), 'Invalid device serial number'); }