vendor = new FoodVendor; $this->vendor->setName('Food Vendor'); $this->manager->persist($this->vendor); $this->manager->flush(); } #[Override] public function getEntityClass(): string { return FoodOrder::class; } public function testIndex(): void { $order = new FoodOrder; $order->setFoodVendor($this->vendor); $this->manager->persist($order); $this->manager->persist($this->vendor); $this->manager->flush(); $crawler = $this->client->request('GET', "{$this->path}list"); self::assertResponseStatusCodeSame(200); self::assertPageTitleContains('FoodOrder index'); $this->assertCount( 1, $crawler->filter('td') ->reduce(fn(Crawler $node, $i): bool => $node->text() === $this->vendor->getName()), ); } public function testOrderedItems(): void { $order = new FoodOrder; $order->setFoodVendor($this->vendor); $this->manager->persist($order); $this->manager->persist($this->vendor); $menuItemA = new MenuItem; $menuItemA->setName('A'); $menuItemA->setFoodVendor($this->vendor); $this->manager->persist($menuItemA); $itemA = new OrderItem; $itemA->setMenuItem($menuItemA); $itemA->setName($menuItemA->getName()); $order->addOrderItem($itemA); $this->manager->persist($itemA); $menuItemC = new MenuItem; $menuItemC->setName('C'); $menuItemC->setFoodVendor($this->vendor); $this->manager->persist($menuItemC); $itemC = new OrderItem; $itemC->setMenuItem($menuItemC); $itemC->setName($menuItemC->getName()); $order->addOrderItem($itemC); $this->manager->persist($itemC); $menuItemB = new MenuItem; $menuItemB->setName('B'); $menuItemB->setFoodVendor($this->vendor); $this->manager->persist($menuItemB); $itemB = new OrderItem; $itemB->setMenuItem($menuItemB); $itemB->setName($menuItemB->getName()); $order->addOrderItem($itemB); $this->manager->persist($itemB); $this->manager->flush(); $crawler = $this->client->request('GET', "{$this->path}{$order->getId()}"); self::assertResponseIsSuccessful(); $tdContent = $crawler->filter( 'table.table:nth-child(6) > tbody:nth-child(2) > tr:nth-child(1) > td:nth-child(2)' )->text(); $this->assertEquals('A', $tdContent); $tdContent = $crawler->filter( 'table.table:nth-child(6) > tbody:nth-child(2) > tr:nth-child(2) > td:nth-child(2)' )->text(); $this->assertEquals('B', $tdContent); $tdContent = $crawler->filter( 'table.table:nth-child(6) > tbody:nth-child(2) > tr:nth-child(3) > td:nth-child(2)' )->text(); $this->assertEquals('C', $tdContent); } public function testPaginatedIndex(): void { $this->generatePaginatedOrders(); $crawler = $this->client->request('GET', "{$this->path}list"); self::assertResponseStatusCodeSame(200); self::assertPageTitleContains('FoodOrder index'); $this->assertElementContainsCount( $crawler, 'td', 1, 'older orders' ); $this->assertElementContainsCount( $crawler, 'td', 0, 'next page' ); } /** * @testWith [1, 0, 1] * [2, 1, 1] * [3, 1, 1] * [4, 1, 0, 5] */ public function testPaginatedFirstPage(int $page, int $prevPage, int $nextPage, int $items = 10): void { $this->generatePaginatedOrders(); $crawler = $this->client->request('GET', "{$this->path}list/archive/{$page}"); self::assertResponseStatusCodeSame(200); self::assertPageTitleContains('FoodOrder index'); $this->assertElementContainsCount( $crawler, 'td', $items, 'nobody' ); $this->assertElementContainsCount( $crawler, 'a', $nextPage, 'next page' ); $this->assertElementContainsCount( $crawler, 'a', $prevPage, 'previous page' ); } public function testNew(): void { $this->client->request('GET', sprintf('%snew', $this->path)); self::assertResponseStatusCodeSame(200); $this->client->submitForm('Save', [ 'food_order[foodVendor]' => $this->vendor->getId(), ]); self::assertResponseRedirects("{$this->path}list"); self::assertSame(1, $this->repository->count([])); } private function generatePaginatedOrders(): void { foreach (range(1, 35) as $i) { $order = new FoodOrder($this->generateOldUlid()); $order->setFoodVendor($this->vendor); $order->close(); $this->manager->persist($order); } $this->manager->flush(); } }