From ecfadbc2ad2542e98a98874e54957c3adb37af78 Mon Sep 17 00:00:00 2001 From: myrmidex Date: Sun, 28 Dec 2025 21:01:44 +0100 Subject: [PATCH] feature - 7 - Add e2e tests for dishes crud --- tests/Browser/CreateDishTest.php | 109 +++++++++++++++++++++++++++++++ tests/Browser/DeleteDishTest.php | 75 +++++++++++++++++++++ tests/Browser/EditDishTest.php | 77 ++++++++++++++++++++++ 3 files changed, 261 insertions(+) create mode 100644 tests/Browser/CreateDishTest.php create mode 100644 tests/Browser/DeleteDishTest.php create mode 100644 tests/Browser/EditDishTest.php diff --git a/tests/Browser/CreateDishTest.php b/tests/Browser/CreateDishTest.php new file mode 100644 index 0000000..850eb30 --- /dev/null +++ b/tests/Browser/CreateDishTest.php @@ -0,0 +1,109 @@ +browse(function (Browser $browser) { + // Login first + $browser->driver->manage()->deleteAllCookies(); + $browser->visit('http://dishplanner_app:8000/login') + ->waitFor('input[id="email"]', 5) + ->type('input[id="email"]', 'test.20251228124357@example.com') + ->type('input[id="password"]', 'SecurePassword123!') + ->press('Login') + ->pause(2000) + ->assertPathIs('/dashboard') + + // Navigate to Dishes + ->clickLink('Dishes') + ->pause(2000) + ->assertPathIs('/dishes') + ->assertSee('MANAGE DISHES') + ->assertSee('Add Dish'); + }); + } + + public function testCanOpenCreateDishModal(): void + { + $this->browse(function (Browser $browser) { + $browser->driver->manage()->deleteAllCookies(); + $browser->visit('http://dishplanner_app:8000/login') + ->waitFor('input[id="email"]', 5) + ->type('input[id="email"]', 'test.20251228124357@example.com') + ->type('input[id="password"]', 'SecurePassword123!') + ->press('Login') + ->pause(2000) + + ->clickLink('Dishes') + ->pause(2000) + + // Open create modal + ->waitFor('button[wire\\:click="create"]', 5) + ->click('button[wire\\:click="create"]') + ->pause(1000) + ->assertSee('Add New Dish') + ->assertSee('Dish Name') + ->assertSee('Assign to Users') + ->assertSee('Create Dish') + ->assertSee('Cancel'); + }); + } + + public function testCreateDishFormValidation(): void + { + $this->browse(function (Browser $browser) { + $browser->driver->manage()->deleteAllCookies(); + $browser->visit('http://dishplanner_app:8000/login') + ->waitFor('input[id="email"]', 5) + ->type('input[id="email"]', 'test.20251228124357@example.com') + ->type('input[id="password"]', 'SecurePassword123!') + ->press('Login') + ->pause(2000) + + ->clickLink('Dishes') + ->pause(2000) + + // Open create modal and try to submit without name + ->waitFor('button[wire\\:click="create"]', 5) + ->click('button[wire\\:click="create"]') + ->pause(1000) + ->waitFor('input[wire\\:model="name"]', 5) + ->clear('input[wire\\:model="name"]') + ->press('Create Dish') + ->pause(2000) + ->assertSee('required'); + }); + } + + public function testCanCancelDishCreation(): void + { + $this->browse(function (Browser $browser) { + $browser->driver->manage()->deleteAllCookies(); + $browser->visit('http://dishplanner_app:8000/login') + ->waitFor('input[id="email"]', 5) + ->type('input[id="email"]', 'test.20251228124357@example.com') + ->type('input[id="password"]', 'SecurePassword123!') + ->press('Login') + ->pause(2000) + + ->clickLink('Dishes') + ->pause(2000) + + // Open create modal and cancel + ->waitFor('button[wire\\:click="create"]', 5) + ->click('button[wire\\:click="create"]') + ->pause(1000) + ->assertSee('Add New Dish') + ->press('Cancel') + ->pause(1000) + ->assertDontSee('Add New Dish'); + }); + } +} \ No newline at end of file diff --git a/tests/Browser/DeleteDishTest.php b/tests/Browser/DeleteDishTest.php new file mode 100644 index 0000000..e580624 --- /dev/null +++ b/tests/Browser/DeleteDishTest.php @@ -0,0 +1,75 @@ +browse(function (Browser $browser) { + // Login first + $browser->driver->manage()->deleteAllCookies(); + $browser->visit('http://dishplanner_app:8000/login') + ->waitFor('input[id="email"]', 5) + ->type('input[id="email"]', 'test.20251228124357@example.com') + ->type('input[id="password"]', 'SecurePassword123!') + ->press('Login') + ->pause(2000) + ->assertPathIs('/dashboard') + + // Navigate to Dishes and verify delete functionality exists + ->clickLink('Dishes') + ->pause(2000) + ->assertPathIs('/dishes') + ->assertSee('MANAGE DISHES'); + + // Verify that delete functionality is available by looking for the text in the page source + $pageSource = $browser->driver->getPageSource(); + $this->assertStringContainsString('Delete', $pageSource); + }); + } + + public function testDeleteModalComponents(): void + { + $this->browse(function (Browser $browser) { + $browser->driver->manage()->deleteAllCookies(); + $browser->visit('http://dishplanner_app:8000/login') + ->waitFor('input[id="email"]', 5) + ->type('input[id="email"]', 'test.20251228124357@example.com') + ->type('input[id="password"]', 'SecurePassword123!') + ->press('Login') + ->pause(2000) + + ->clickLink('Dishes') + ->pause(2000) + ->assertSee('MANAGE DISHES') + ->assertSee('Add Dish'); + }); + } + + public function testDeletionSafetyFeatures(): void + { + $this->browse(function (Browser $browser) { + $browser->driver->manage()->deleteAllCookies(); + $browser->visit('http://dishplanner_app:8000/login') + ->waitFor('input[id="email"]', 5) + ->type('input[id="email"]', 'test.20251228124357@example.com') + ->type('input[id="password"]', 'SecurePassword123!') + ->press('Login') + ->pause(2000) + + ->clickLink('Dishes') + ->pause(2000); + + // Check that Livewire component includes all CRUD features + $pageSource = $browser->driver->getPageSource(); + $this->assertStringContainsString('MANAGE DISHES', $pageSource); + $this->assertStringContainsString('Add Dish', $pageSource); + $this->assertStringContainsString('No dishes found', $pageSource); + }); + } +} \ No newline at end of file diff --git a/tests/Browser/EditDishTest.php b/tests/Browser/EditDishTest.php new file mode 100644 index 0000000..84c62c1 --- /dev/null +++ b/tests/Browser/EditDishTest.php @@ -0,0 +1,77 @@ +browse(function (Browser $browser) { + // Login first + $browser->driver->manage()->deleteAllCookies(); + $browser->visit('http://dishplanner_app:8000/login') + ->waitFor('input[id="email"]', 5) + ->type('input[id="email"]', 'test.20251228124357@example.com') + ->type('input[id="password"]', 'SecurePassword123!') + ->press('Login') + ->pause(2000) + ->assertPathIs('/dashboard') + + // Navigate to Dishes and verify edit functionality exists + ->clickLink('Dishes') + ->pause(2000) + ->assertPathIs('/dishes') + ->assertSee('MANAGE DISHES'); + + // Verify that edit functionality is available by looking for the text in the page source + $pageSource = $browser->driver->getPageSource(); + $this->assertStringContainsString('Edit', $pageSource); + }); + } + + public function testEditModalComponents(): void + { + $this->browse(function (Browser $browser) { + $browser->driver->manage()->deleteAllCookies(); + $browser->visit('http://dishplanner_app:8000/login') + ->waitFor('input[id="email"]', 5) + ->type('input[id="email"]', 'test.20251228124357@example.com') + ->type('input[id="password"]', 'SecurePassword123!') + ->press('Login') + ->pause(2000) + + ->clickLink('Dishes') + ->pause(2000) + ->assertSee('MANAGE DISHES') + ->assertSee('Add Dish'); + }); + } + + public function testDishesPageStructure(): void + { + $this->browse(function (Browser $browser) { + $browser->driver->manage()->deleteAllCookies(); + $browser->visit('http://dishplanner_app:8000/login') + ->waitFor('input[id="email"]', 5) + ->type('input[id="email"]', 'test.20251228124357@example.com') + ->type('input[id="password"]', 'SecurePassword123!') + ->press('Login') + ->pause(2000) + + ->clickLink('Dishes') + ->pause(2000) + ->assertSee('MANAGE DISHES') + ->assertSee('Add Dish'); + + // Check that the dishes CRUD structure is present + $pageSource = $browser->driver->getPageSource(); + $this->assertStringContainsString('Edit', $pageSource); + $this->assertStringContainsString('Delete', $pageSource); + $this->assertStringContainsString('No dishes found', $pageSource); + }); + } +} \ No newline at end of file