diff --git a/phpunit.dusk.xml b/phpunit.dusk.xml
index 4114fc86..4ffc7922 100644
--- a/phpunit.dusk.xml
+++ b/phpunit.dusk.xml
@@ -10,6 +10,7 @@
./tests/Browser
+ ./Modules/Helpdesk/Tests/Browser
diff --git a/phpunit.xml b/phpunit.xml
index fdb8c5e0..16faec32 100644
--- a/phpunit.xml
+++ b/phpunit.xml
@@ -7,10 +7,19 @@
tests/Unit
+ Modules/Helpdesk/Tests/Unit
+
tests/Feature
- Modules/*/tests/Feature
+
+ Modules/Countries/Tests/Feature
+ Modules/Documentation/Tests/Feature
+ Modules/Helpdesk/Tests/Feature
+
+ Modules/InternalApi/tests/Feature
+ Modules/Platform/tests/Feature
+ Modules/Warehouse/tests/Feature
diff --git a/tests/tests/Browser/Concerns/InteractsWithWmsNavigation.php b/tests/tests/Browser/Concerns/InteractsWithWmsNavigation.php
deleted file mode 100644
index f9da0f4a..00000000
--- a/tests/tests/Browser/Concerns/InteractsWithWmsNavigation.php
+++ /dev/null
@@ -1,157 +0,0 @@
- 'MPBA Limited',
- ];
-
- $companyValues = [];
-
- foreach ([
- 'slug' => 'mpba-limited',
- 'timezone' => 'Europe/London',
- 'billing_email' => 'platform-admin@mpba.co.uk',
- 'status' => 'active',
- 'is_system_company' => true,
- ] as $column => $value) {
- if (Schema::hasColumn('companies', $column)) {
- $companyValues[$column] = $value;
- }
- }
-
- $company = $companyClass::query()->updateOrCreate($companyAttributes, $companyValues);
- $companyId = $company->getKey();
- }
-
- $userAttributes = array_merge([
- 'name' => 'Mark Gregory',
- 'email' => 'mark.gregory@mpba.co.uk',
- 'password' => Hash::make('password'),
- 'email_verified_at' => now(),
- ], $attributes);
-
- if ($companyId !== null && Schema::hasColumn('users', 'company_id')) {
- $userAttributes['company_id'] = $companyId;
- }
-
- /** @var User $user */
- $user = User::factory()->create($userAttributes);
-
- foreach ([
- 'is_platform_admin' => true,
- 'is_mpba_platform_admin' => true,
- 'platform_admin' => true,
- ] as $column => $value) {
- if (Schema::hasColumn('users', $column)) {
- $user->forceFill([$column => $value]);
- }
- }
-
- $user->save();
-
- if (method_exists($user, 'assignRole')) {
- try {
- $user->assignRole('platform-admin');
- } catch (\Throwable) {
- // Some test databases do not seed Spatie roles for Dusk; the MPBA email/company is enough for this app helper.
- }
- }
-
- return $user;
- }
-
- protected function resetNavigatorState(Browser $browser): Browser
- {
- $browser->script(<<<'JS'
- localStorage.setItem('wms-sidebar-state', 'expanded');
- localStorage.removeItem('wms-platform-menu-opened');
- document.documentElement.dataset.wmsSidebar = 'expanded';
- document.documentElement.dataset.wmsMobileSidebar = 'closed';
- document.body.classList.remove('wms-mobile-nav-open');
- JS);
-
- return $browser->pause(150);
- }
-
- protected function openSidebarGroup(Browser $browser, string $group): Browser
- {
- $browser->script(<<pause(150);
- }
-
- protected function assertSidebarGroupContains(Browser $browser, string $group, array $labels): Browser
- {
- $this->openSidebarGroup($browser, $group);
-
- foreach ($labels as $label) {
- $browser->assertSee($label);
- }
-
- return $browser;
- }
-
- protected function openMobileNavigation(Browser $browser): Browser
- {
- $browser->script(<<<'JS'
- const button = document.querySelector('[data-wms-mobile-open]');
- if (button) {
- button.click();
- }
- JS);
-
- return $browser->pause(250);
- }
-
- protected function closeMobileNavigation(Browser $browser): Browser
- {
- $browser->script(<<<'JS'
- const button = document.querySelector('[data-wms-mobile-close]');
- if (button) {
- button.click();
- }
- JS);
-
- return $browser->pause(200);
- }
-
- protected function clickSidebarHref(Browser $browser, string $href): Browser
- {
- $browser->script(<<pause(300);
- }
-}
diff --git a/tests/tests/Browser/DesktopNavigationBrowserTest.php b/tests/tests/Browser/DesktopNavigationBrowserTest.php
deleted file mode 100644
index a30d58b0..00000000
--- a/tests/tests/Browser/DesktopNavigationBrowserTest.php
+++ /dev/null
@@ -1,133 +0,0 @@
-platformAdminUser();
-
- $this->browse(function (Browser $browser) use ($admin): void {
- $browser->loginAs($admin)
- ->resize(1440, 1000)
- ->visit('/admin')
- ->waitFor('.wms-sidebar', 10);
-
- $this->resetNavigatorState($browser);
-
- $this->assertSidebarGroupContains($browser, 'platform', [
- 'Platform',
- ]);
-
- $this->assertSidebarGroupContains($browser, 'operations', [
- 'Analytics',
- 'Inventory',
- 'Replenishment',
- 'Shipping',
- 'Transportation',
- 'Carriers',
- ]);
-
- $this->assertSidebarGroupContains($browser, 'integration-reporting', [
- 'M3 Integration',
- 'Sentinel',
- 'Documents',
- 'Reporting',
- ]);
-
- $this->assertSidebarGroupContains($browser, 'administration', [
- 'Warehouses',
- 'Validation Rules',
- 'Prices',
- 'Configuration',
- 'Security',
- 'Audit',
- ]);
-
- $this->assertSidebarGroupContains($browser, 'platform-administration', [
- 'Companies',
- 'Licences',
- 'Payments',
- ]);
- });
- }
-
- public function test_desktop_sidebar_collapse_and_brand_expand_preserve_navigation(): void
- {
- $admin = $this->platformAdminUser();
-
- $this->browse(function (Browser $browser) use ($admin): void {
- $browser->loginAs($admin)
- ->resize(1440, 1000)
- ->visit('/admin')
- ->waitFor('.wms-sidebar', 10);
-
- $this->resetNavigatorState($browser);
-
- $browser->script("document.querySelector('[data-wms-sidebar-toggle]')?.click();");
- $browser->pause(200)
- ->assertPresent('.wms-sidebar');
-
- $browser->script("document.querySelector('[data-wms-brand-toggle]')?.click();");
- $browser->pause(200);
-
- $this->assertSidebarGroupContains($browser, 'operations', [
- 'Analytics',
- 'Inventory',
- ]);
- });
- }
-
- public function test_every_desktop_navigator_page_has_one_professional_header(): void
- {
- $admin = $this->platformAdminUser();
-
- $paths = [
- '/admin',
- '/analytics',
- '/inventory-management',
- '/replenishment',
- '/shipping',
- '/transportation',
- '/carrier-management',
- '/m3-integration',
- '/sentinel-integration',
- '/document-archive',
- '/reporting',
- '/warehouses',
- '/warehouse-rules',
- '/platform/prices',
- '/configuration',
- '/security',
- '/audit',
- '/platform/companies',
- '/platform/licenses',
- '/platform/payments',
- ];
-
- $this->browse(function (Browser $browser) use ($admin, $paths): void {
- $browser->loginAs($admin)->resize(1440, 1000);
-
- foreach ($paths as $path) {
- $browser->visit($path)
- ->waitFor('.wms-page-hero', 10)
- ->assertPresent('.wms-page-hero');
-
- $heroCount = $browser->script("return document.querySelectorAll('.wms-page-hero').length;")[0] ?? 0;
-
- $this->assertSame(1, (int) $heroCount, "Expected one professional page hero on [{$path}].");
- }
- });
- }
-}
diff --git a/tests/tests/Browser/MobileNavigationBrowserTest.php b/tests/tests/Browser/MobileNavigationBrowserTest.php
deleted file mode 100644
index 2bc6ff8c..00000000
--- a/tests/tests/Browser/MobileNavigationBrowserTest.php
+++ /dev/null
@@ -1,84 +0,0 @@
-platformAdminUser();
-
- $this->browse(function (Browser $browser) use ($admin): void {
- $browser->loginAs($admin)
- ->resize(390, 844)
- ->visit('/admin')
- ->waitFor('[data-wms-mobile-open]', 10);
-
- $this->openMobileNavigation($browser);
-
- $browser->assertSee('Platform');
-
- $this->assertSidebarGroupContains($browser, 'administration', [
- 'Prices',
- ]);
-
- $this->closeMobileNavigation($browser);
-
- $browser->assertPresent('[data-wms-mobile-open]');
- });
- }
-
- public function test_mobile_drawer_navigates_to_major_menu_groups(): void
- {
- $admin = $this->platformAdminUser();
-
- $this->browse(function (Browser $browser) use ($admin): void {
- $browser->loginAs($admin)
- ->resize(390, 844)
- ->visit('/admin')
- ->waitFor('[data-wms-mobile-open]', 10);
-
- $this->openMobileNavigation($browser);
- $this->assertSidebarGroupContains($browser, 'operations', ['Inventory']);
- $this->clickSidebarHref($browser, '/inventory-management');
- $browser->assertSee('Inventory');
-
- $this->openMobileNavigation($browser);
- $this->assertSidebarGroupContains($browser, 'administration', ['Warehouses']);
- $this->clickSidebarHref($browser, '/warehouses');
- $browser->assertSee('Warehouses');
- });
- }
-
- public function test_mobile_tablet_and_desktop_breakpoints_keep_navigation_accessible(): void
- {
- $admin = $this->platformAdminUser();
-
- $this->browse(function (Browser $browser) use ($admin): void {
- foreach ([[390, 844], [834, 1112], [1440, 1000]] as [$width, $height]) {
- $browser->loginAs($admin)
- ->resize($width, $height)
- ->visit('/admin')
- ->waitFor('.wms-app-shell', 10)
- ->assertPresent('.wms-app-shell');
-
- if ($width < 1024) {
- $browser->assertPresent('[data-wms-mobile-open]');
- continue;
- }
-
- $browser->assertPresent('.wms-sidebar');
- }
- });
- }
-}
diff --git a/tests/tests/Browser/WmsResponsiveNavigationTest.php b/tests/tests/Browser/WmsResponsiveNavigationTest.php
deleted file mode 100644
index b7dbeebe..00000000
--- a/tests/tests/Browser/WmsResponsiveNavigationTest.php
+++ /dev/null
@@ -1,74 +0,0 @@
-platformAdminUser();
-
- $this->browse(function (Browser $browser) use ($admin): void {
- $browser->loginAs($admin)
- ->resize(1440, 1000)
- ->visit('/admin')
- ->waitFor('.wms-sidebar', 10)
- ->assertSee('Platform');
-
- $this->resetNavigatorState($browser);
- $this->assertSidebarGroupContains($browser, 'operations', [
- 'Analytics',
- 'Inventory',
- ]);
-
- $this->clickSidebarHref($browser, '/inventory-management');
- $browser->assertSee('Inventory');
- });
- }
-
- public function test_mobile_menu_opens_slide_out_navigation(): void
- {
- $admin = $this->platformAdminUser();
-
- $this->browse(function (Browser $browser) use ($admin): void {
- $browser->loginAs($admin)
- ->resize(390, 844)
- ->visit('/admin')
- ->waitFor('[data-wms-mobile-open]', 10);
-
- $this->openMobileNavigation($browser);
-
- $browser->assertSee('Platform');
- $this->assertSidebarGroupContains($browser, 'operations', ['Inventory']);
- });
- }
-
- public function test_mobile_menu_overlay_closes_drawer(): void
- {
- $admin = $this->platformAdminUser();
-
- $this->browse(function (Browser $browser) use ($admin): void {
- $browser->loginAs($admin)
- ->resize(390, 844)
- ->visit('/admin')
- ->waitFor('[data-wms-mobile-open]', 10);
-
- $this->openMobileNavigation($browser);
- $browser->assertSee('Platform');
-
- $browser->script("document.querySelector('[data-wms-mobile-close]')?.click();");
- $browser->pause(200)
- ->assertPresent('[data-wms-mobile-open]');
- });
- }
-}