beforeEach(function (): void { $this->setEntityClass(FoodVendor::class); $this->setPath('/food/vendor/'); $this->repository = $this->manager->getRepository($this->entityClass); }); describe(FoodVendorController::class, function (): void { test('index', function (): void { $this->client->request('GET', $this->path); $this->assertResponseStatusCodeSame(200); $this->assertPageTitleContains('FoodVendor index'); }); test('new', function (): void { $this->assertSame(0, $this->repository->count([])); $this->client->request('GET', sprintf('%snew', $this->path)); $this->assertResponseStatusCodeSame(200); $this->client->submitForm('Save', [ 'food_vendor[name]' => 'TestingNew', ]); $newVendor = $this->repository->findOneBy([ 'name' => 'TestingNew', ]); $this->assertInstanceof(FoodVendor::class, $newVendor); $this->assertSame(1, $this->repository->count([])); }); test('show', function (): void { $fixture = new FoodVendor; $fixture->setName('My Title'); $fixture->setMenuLink('https://example.com/'); $this->manager->persist($fixture); $this->manager->flush(); $crawler = $this->client->request('GET', sprintf('%s%s', $this->path, $fixture->getId())); $this->assertResponseIsSuccessful(); $nameNode = $crawler->filter('td') ->last(); $nameNode = $crawler->filter( '.table > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(2)' )->text(); $menuLinkNode = $crawler->filter( '.table > tbody:nth-child(1) > tr:nth-child(2) > td:nth-child(2) > a:nth-child(1)' )->text(); $this->assertSame('My Title', $nameNode); $this->assertSame('https://example.com/', $menuLinkNode); }); test('show with menu items', function (): void { $fixture = new FoodVendor; $fixture->setName('My Title'); $this->manager->persist($fixture); $this->manager->flush(); $itemOne = new MenuItem; $itemOne->setName('Item One'); $fixture->addMenuItem($itemOne); $this->manager->persist($itemOne); $itemTwo = new MenuItem; $itemTwo->setName('Item Two'); $itemTwo->setFoodVendor($fixture); $fixture->addMenuItem($itemTwo); $this->manager->persist($itemTwo); $itemThree = new MenuItem; $itemThree->setName('Item Three'); $itemThree->setFoodVendor($fixture); $fixture->addMenuItem($itemThree); $this->manager->persist($itemThree); $itemFour = new MenuItem; $itemFour->setName('Item Four'); $itemFour->setFoodVendor($fixture); $fixture->addMenuItem($itemFour); $this->manager->persist($itemFour); $this->manager->flush(); $crawler = $this->client->request('GET', sprintf('%s%s', $this->path, $fixture->getId())); $this->assertResponseIsSuccessful(); $nameNode = $crawler->filter( '.table > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(2)' )->text(); $this->assertSame('My Title', $nameNode); $itemNodes = $crawler->filter('li'); $this->assertCount(4, $itemNodes); }); test('edit', function (): void { $fixture = new FoodVendor; $fixture->setName('Value'); $fixture->setMenuLink('Value'); $fixture->setPhone('Value'); $this->manager->persist($fixture); $this->manager->flush(); $crawler = $this->client->request('GET', sprintf('%s%s/edit', $this->path, $fixture->getId())); $this->assertSame( $crawler->filter('#food_vendor_name') ->last() ->attr('value', ''), 'Value' ); $this->assertSame( $crawler->filter('#food_vendor_menuLink') ->last() ->attr('value', ''), 'Value' ); $this->assertSame( $crawler->filter('#food_vendor_phone') ->last() ->attr('value', ''), 'Value' ); $this->client->submitForm('Update', [ 'food_vendor[name]' => 'Something New', 'food_vendor[menuLink]' => 'https://example.com/', 'food_vendor[phone]' => '1234567890', ]); $this->assertResponseRedirects('/food/vendor/'); $fixture = $this->repository->findAll(); $this->assertSame('Something New', $fixture[0]->getName()); $this->assertSame('https://example.com/', $fixture[0]->getMenuLink()); $this->assertSame('1234567890', $fixture[0]->getPhone()); }); }) ->covers( FoodOrder::class, FoodVendor::class, FoodOrderRepository::class, MenuItem::class, OrderItem::class, FoodOrderType::class, FoodVendorRepository::class, FoodVendorController::class, FoodVendorType::class ) ;