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, 2] * [2, 1, 3] * [3, 2, 4] * [4, 3, 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' ); if ($prevPage > 0) { if ($prevPage === 1) { $prevPage = ''; } else { $prevPage = "/{$prevPage}"; } $node = $crawler->filter('a')->reduce(fn(Crawler $node, $i): bool => $node->text() === 'previous page')->first(); $target = $node->attr('href'); $this->assertTrue(str_ends_with($target, $prevPage)); } if ($prevPage > 3) { $node = $crawler->filter('a')->reduce(fn(Crawler $node, $i): bool => $node->text() === 'next page')->first(); $target = $node->attr('href'); $this->assertTrue(str_ends_with($target, "/{$nextPage}")); } } public function testNew(): void { $this->client->getCookieJar()->set(new \Symfony\Component\BrowserKit\Cookie('username', 'Testing-1')); $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([])); $order = $this->repository->findOneBy(['createdBy' => 'Testing-1']); assert($order instanceof FoodOrder); } public function testOpen(): void { $order = new FoodOrder; $order->setFoodVendor($this->vendor); $order->close(); $this->assertTrue($order->isClosed()); $this->manager->persist($order); $this->manager->flush(); $this->client->request('GET', sprintf('%s%s/open', $this->path, $order->getId())); self::assertResponseRedirects("{$this->path}{$order->getId()}"); $openOrder = $this->repository->find($order->getId()); $this->assertFalse($openOrder->isClosed()); } public function testClose(): void { $order = new FoodOrder; $order->setClosedAt(); $order->setFoodVendor($this->vendor); $this->assertFalse($order->isClosed()); $this->manager->persist($order); $this->manager->flush(); $this->client->request('GET', sprintf('%s%s/close', $this->path, $order->getId())); self::assertResponseRedirects("{$this->path}{$order->getId()}"); $openOrder = $this->repository->find($order->getId()); $this->assertTrue($openOrder->isClosed()); } 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(); } }