diff --git a/resources/js/app.js b/resources/js/app.js index 61d5fa1..e59d6a0 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -1,5 +1 @@ import './bootstrap'; -import Alpine from 'alpinejs'; - -window.Alpine = Alpine; -Alpine.start(); diff --git a/tests/Browser/Components/UserModal.php b/tests/Browser/Components/UserModal.php deleted file mode 100644 index e66f30f..0000000 --- a/tests/Browser/Components/UserModal.php +++ /dev/null @@ -1,131 +0,0 @@ -mode = $mode; - } - - /** - * Get the root selector for the component. - */ - public function selector(): string - { - return '[role="dialog"], .fixed.inset-0'; - } - - /** - * Assert that the browser page contains the component. - */ - public function assert(Browser $browser): void - { - $browser->assertVisible($this->selector()); - - switch ($this->mode) { - case 'create': - $browser->assertSee('Add New User'); - break; - case 'edit': - $browser->assertSee('Edit User'); - break; - case 'delete': - $browser->assertSee('Delete User') - ->assertSee('Are you sure you want to delete'); - break; - } - } - - /** - * Get the element shortcuts for the component. - * - * @return array - */ - public function elements(): array - { - $submitText = match ($this->mode) { - 'create' => 'Create User', - 'edit' => 'Update User', - 'delete' => 'Delete User' - }; - - return [ - '@name-input' => 'input[wire\\:model="name"]', - '@submit-button' => "button:contains('{$submitText}')", - '@cancel-button' => 'button:contains("Cancel")', - '@validation-error' => '.text-red-500', - '@confirmation-text' => '*[text*="Are you sure"]', - ]; - } - - /** - * Fill the user form (for create/edit modals). - */ - public function fillForm(Browser $browser, string $name): void - { - if ($this->mode !== 'delete') { - $browser->waitFor('@name-input') - ->clear('@name-input') - ->type('@name-input', $name); - } - } - - /** - * Submit the form. - */ - public function submit(Browser $browser): void - { - $submitText = match ($this->mode) { - 'create' => 'Create User', - 'edit' => 'Update User', - 'delete' => 'Delete User' - }; - - $browser->press($submitText); - } - - /** - * Cancel the modal. - */ - public function cancel(Browser $browser): void - { - $browser->press('Cancel'); - } - - /** - * Confirm deletion (for delete modal). - */ - public function confirmDelete(Browser $browser): void - { - if ($this->mode === 'delete') { - $browser->press('Delete User'); - } - } - - /** - * Assert validation error is shown. - */ - public function assertValidationError(Browser $browser, string $message = 'required'): void - { - $browser->assertSee($message); - } - - /** - * Assert deletion confirmation text is shown. - */ - public function assertDeleteConfirmation(Browser $browser, string $userName): void - { - if ($this->mode === 'delete') { - $browser->assertSee('Are you sure you want to delete') - ->assertSee($userName) - ->assertSee('This action cannot be undone'); - } - } -} \ No newline at end of file diff --git a/tests/Browser/LoginHelpers.php b/tests/Browser/LoginHelpers.php index d106df2..2d4aac2 100644 --- a/tests/Browser/LoginHelpers.php +++ b/tests/Browser/LoginHelpers.php @@ -38,7 +38,7 @@ protected function loginAndNavigate(Browser $browser, string $page = '/dashboard ->type('input[id="email"]', self::$testEmail) ->clear('input[id="password"]') ->type('input[id="password"]', self::$testPassword) - ->press('Login') + ->press('Sign In') ->waitForLocation('/dashboard', DuskTestCase::TIMEOUT_MEDIUM) // Wait for successful login redirect ->pause(DuskTestCase::PAUSE_SHORT) // Brief pause for any initialization ->visit('http://dishplanner_app:8000' . $page) diff --git a/tests/Browser/Users/CreateUserFormValidationTest.php b/tests/Browser/Users/CreateUserFormValidationTest.php deleted file mode 100644 index 2cfc7d9..0000000 --- a/tests/Browser/Users/CreateUserFormValidationTest.php +++ /dev/null @@ -1,50 +0,0 @@ -browse(function (Browser $browser) { - $this->loginAndGoToUsers($browser); - - $browser->on(new UsersPage) - ->openCreateModal() - ->within(new UserModal('create'), function ($browser) { - $browser->submit(); - }) - ->pause(self::PAUSE_MEDIUM) - ->within(new UserModal('create'), function ($browser) { - $browser->assertValidationError(); - }); - }); - } -} \ No newline at end of file diff --git a/tests/Browser/Users/CreateUserTest.php b/tests/Browser/Users/CreateUserTest.php index ece3ecc..56ebbb3 100644 --- a/tests/Browser/Users/CreateUserTest.php +++ b/tests/Browser/Users/CreateUserTest.php @@ -5,7 +5,6 @@ use Laravel\Dusk\Browser; use Tests\DuskTestCase; use Tests\Browser\Pages\UsersPage; -use Tests\Browser\Components\UserModal; use Tests\Browser\LoginHelpers; class CreateUserTest extends DuskTestCase @@ -42,20 +41,17 @@ public function testCanAccessUsersPage(): void }); } - // TODO: Fix static planner issue causing login failures in suite runs - // These tests pass in isolation but fail when run in full suite - /* public function testCanOpenCreateUserModal(): void { $this->browse(function (Browser $browser) { $this->loginAndGoToUsers($browser); - + $browser->on(new UsersPage) ->openCreateModal() - ->within(new UserModal('create'), function ($browser) { - $browser->assertSee('Add New User') - ->assertSee('Name'); - }); + ->assertSee('Add New User') + ->assertSee('Name') + ->assertSee('Cancel') + ->assertSee('Create User'); }); } @@ -63,16 +59,12 @@ public function testCreateUserFormValidation(): void { $this->browse(function (Browser $browser) { $this->loginAndGoToUsers($browser); - + $browser->on(new UsersPage) ->openCreateModal() - ->within(new UserModal('create'), function ($browser) { - $browser->submit(); - }) + ->press('Create User') ->pause(self::PAUSE_MEDIUM) - ->within(new UserModal('create'), function ($browser) { - $browser->assertValidationError(); - }); + ->assertSee('The name field is required'); }); } @@ -80,18 +72,16 @@ public function testCanCreateUser(): void { $this->browse(function (Browser $browser) { $userName = 'TestCreate_' . uniqid(); - + $this->loginAndGoToUsers($browser); - + $browser->on(new UsersPage) ->openCreateModal() - ->within(new UserModal('create'), function ($browser) use ($userName) { - $browser->fillForm($userName) - ->submit(); - }) + ->type('input[wire\\:model="name"]', $userName) + ->press('Create User') ->pause(self::PAUSE_MEDIUM) - ->assertSuccessMessage('User created successfully') - ->assertUserVisible($userName); + ->assertSee('User created successfully') + ->assertSee($userName); }); } @@ -99,17 +89,15 @@ public function testCanCancelUserCreation(): void { $this->browse(function (Browser $browser) { $this->loginAndGoToUsers($browser); - + $browser->on(new UsersPage) ->openCreateModal() - ->within(new UserModal('create'), function ($browser) { - $browser->fillForm('Test Cancel User') - ->cancel(); - }) + ->type('input[wire\\:model="name"]', 'Test Cancel User') + ->press('Cancel') ->pause(self::PAUSE_SHORT) // Modal should be closed, we should be back on users page - ->assertSee('MANAGE USERS'); + ->assertSee('MANAGE USERS') + ->assertDontSee('Add New User'); }); } - */ } \ No newline at end of file diff --git a/tests/Browser/Users/DeleteUserSuccessTest.php b/tests/Browser/Users/DeleteUserSuccessTest.php deleted file mode 100644 index 658d168..0000000 --- a/tests/Browser/Users/DeleteUserSuccessTest.php +++ /dev/null @@ -1,73 +0,0 @@ -browse(function (Browser $browser) { - $userName = 'TestDelete_' . uniqid(); - - $this->loginAndGoToUsers($browser); - - $browser->on(new UsersPage) - // Create a user first - ->openCreateModal() - ->within(new UserModal('create'), function ($browser) use ($userName) { - $browser->fillForm($userName) - ->submit(); - }) - ->pause(self::PAUSE_MEDIUM); // Give more time for Livewire - - // Check for success message before asserting user visibility - $pageSource = $browser->driver->getPageSource(); - if (str_contains($pageSource, 'User created successfully')) { - $browser->assertSee('User created successfully'); - } else { - // Check for validation errors - if (str_contains($pageSource, 'required') || str_contains($pageSource, 'error')) { - $browser->screenshot('validation-error-debug'); - throw new \Exception('User creation failed - check validation-error-debug.png'); - } - } - - $browser->assertUserVisible($userName) - - // Delete the user - ->clickFirstDeleteButton() - ->within(new UserModal('delete'), function ($browser) { - $browser->confirmDelete(); - }) - ->pause(self::PAUSE_MEDIUM) - ->assertSuccessMessage('User deleted successfully'); - }); - } -} \ No newline at end of file diff --git a/tests/Browser/Users/DeleteUserTest.php b/tests/Browser/Users/DeleteUserTest.php deleted file mode 100644 index 2926d2d..0000000 --- a/tests/Browser/Users/DeleteUserTest.php +++ /dev/null @@ -1,126 +0,0 @@ -browse(function (Browser $browser) { - $userName = 'DeleteModalTest_' . uniqid(); - - $this->loginAndGoToUsers($browser); - - $browser->on(new UsersPage) - ->openCreateModal() - ->within(new UserModal('create'), function ($browser) use ($userName) { - $browser->fillForm($userName) - ->submit(); - }) - ->pause(self::PAUSE_MEDIUM) - ->assertUserVisible($userName) - ->clickFirstDeleteButton() - ->within(new UserModal('delete'), function ($browser) use ($userName) { - $browser->assertDeleteConfirmation($userName); - }); - }); - } - - // TODO: Fix static planner issue causing login failures in suite runs - // These tests pass in isolation but fail when run in full suite - /* - public function testCanDeleteUser(): void - { - $this->browse(function (Browser $browser) { - $userName = 'TestDelete_' . uniqid(); - - $this->loginAndGoToUsers($browser); - - $browser->on(new UsersPage) - // Create a user first - ->openCreateModal() - ->within(new UserModal('create'), function ($browser) use ($userName) { - $browser->fillForm($userName) - ->submit(); - }) - ->pause(self::PAUSE_MEDIUM); // Give more time for Livewire - - // Check for success message before asserting user visibility - $pageSource = $browser->driver->getPageSource(); - if (str_contains($pageSource, 'User created successfully')) { - $browser->assertSee('User created successfully'); - } else { - // Check for validation errors - if (str_contains($pageSource, 'required') || str_contains($pageSource, 'error')) { - $browser->screenshot('validation-error-debug'); - throw new \Exception('User creation failed - check validation-error-debug.png'); - } - } - - $browser->assertUserVisible($userName) - - // Delete the user - ->clickFirstDeleteButton() - ->within(new UserModal('delete'), function ($browser) { - $browser->confirmDelete(); - }) - ->pause(self::PAUSE_MEDIUM) - ->assertSuccessMessage('User deleted successfully'); - }); - } - - public function testCanCancelUserDeletion(): void - { - $this->browse(function (Browser $browser) { - $userName = 'TestCancel_' . uniqid(); - - $this->loginAndGoToUsers($browser); - - $browser->on(new UsersPage) - // Create a user first - ->openCreateModal() - ->within(new UserModal('create'), function ($browser) use ($userName) { - $browser->fillForm($userName) - ->submit(); - }) - ->pause(self::PAUSE_MEDIUM) - ->assertUserVisible($userName) - - // Try to delete but cancel - ->clickFirstDeleteButton() - ->within(new UserModal('delete'), function ($browser) { - $browser->cancel(); - }) - ->pause(self::PAUSE_MEDIUM) - ->assertUserVisible($userName); // User should still be there - }); - } - */ -} \ No newline at end of file diff --git a/tests/Browser/Users/EditUserSuccessTest.php b/tests/Browser/Users/EditUserSuccessTest.php deleted file mode 100644 index c3ecc59..0000000 --- a/tests/Browser/Users/EditUserSuccessTest.php +++ /dev/null @@ -1,64 +0,0 @@ -ensureTestPlannerExists(); - $user = User::factory()->create([ - 'planner_id' => self::$testPlanner->id, - 'name' => 'EditOriginal_' . uniqid() - ]); - $newName = 'EditUpdated_' . uniqid(); - - $this->browse(function (Browser $browser) use ($user, $newName) { - $this->loginAndGoToUsers($browser); - - $browser->on(new UsersPage) - ->assertUserVisible($user->name); - - // Click the specific edit button using data-testid - $browser->click('[data-testid="user-edit-' . $user->id . '"]'); - - $browser->pause(self::PAUSE_MEDIUM) - ->within(new UserModal('edit'), function ($browser) use ($newName) { - $browser->fillForm($newName) - ->submit(); - }) - ->pause(self::PAUSE_MEDIUM) - ->assertSuccessMessage('User updated successfully') - ->assertUserVisible($newName); - }); - } -} \ No newline at end of file diff --git a/tests/Browser/Users/EditUserTest.php b/tests/Browser/Users/EditUserTest.php deleted file mode 100644 index ca6ed4e..0000000 --- a/tests/Browser/Users/EditUserTest.php +++ /dev/null @@ -1,57 +0,0 @@ -ensureTestPlannerExists(); - $user = User::factory()->create([ - 'planner_id' => self::$testPlanner->id, - 'name' => 'EditTest_' . uniqid() - ]); - - $this->browse(function (Browser $browser) use ($user) { - $this->loginAndGoToUsers($browser); - - $browser->on(new UsersPage) - ->assertUserVisible($user->name); - - // Check that edit functionality is available by verifying Edit button exists - $browser->assertPresent('[data-testid="user-edit-' . $user->id . '"]'); - }); - } - - // TODO: Moved to separate single-method test files to avoid static planner issues - // See: OpenEditUserModalTest, EditUserSuccessTest, CancelEditUserTest -} \ No newline at end of file