breakign dusk tests
This commit is contained in:
@@ -8,22 +8,23 @@ use Tests\DuskTestCase;
|
|||||||
class AuthBrandingLayoutBrowserTest extends DuskTestCase
|
class AuthBrandingLayoutBrowserTest extends DuskTestCase
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Ensure guest authentication pages keep the professional WMS branding and do not overflow horizontally.
|
* Ensure guest authentication pages keep the WMS auth shell and do not overflow horizontally.
|
||||||
*/
|
*/
|
||||||
public function test_guest_authentication_pages_are_branded_and_do_not_overflow(): void
|
public function test_guest_authentication_pages_are_branded_and_do_not_overflow(): void
|
||||||
{
|
{
|
||||||
$pages = [
|
$pages = [
|
||||||
route('login'),
|
route('login') => 'Log in',
|
||||||
route('register'),
|
route('register') => 'Register',
|
||||||
route('password.request'),
|
route('password.request') => 'Forgot',
|
||||||
];
|
];
|
||||||
|
|
||||||
foreach ($pages as $page) {
|
foreach ($pages as $page => $expectedText) {
|
||||||
$this->browse(function (Browser $browser) use ($page): void {
|
$this->browse(function (Browser $browser) use ($page, $expectedText): void {
|
||||||
$browser->resize(1280, 900)
|
$browser->resize(1280, 900)
|
||||||
->visit($page)
|
->visit($page)
|
||||||
|
->waitFor('body', 10)
|
||||||
->assertSee('WMS')
|
->assertSee('WMS')
|
||||||
->assertSee('Warehouse Management System')
|
->assertSee($expectedText)
|
||||||
->assertScript('document.documentElement.scrollWidth <= document.documentElement.clientWidth + 1');
|
->assertScript('document.documentElement.scrollWidth <= document.documentElement.clientWidth + 1');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,17 +3,20 @@
|
|||||||
namespace Tests\Browser;
|
namespace Tests\Browser;
|
||||||
|
|
||||||
use Laravel\Dusk\Browser;
|
use Laravel\Dusk\Browser;
|
||||||
|
use Tests\Browser\Concerns\InteractsWithWmsBrowser;
|
||||||
use Tests\Browser\Concerns\InteractsWithWmsData;
|
use Tests\Browser\Concerns\InteractsWithWmsData;
|
||||||
use Tests\DuskTestCase;
|
use Tests\DuskTestCase;
|
||||||
|
|
||||||
class AuthBrowserTest extends DuskTestCase
|
class AuthBrowserTest extends DuskTestCase
|
||||||
{
|
{
|
||||||
|
use InteractsWithWmsBrowser;
|
||||||
use InteractsWithWmsData;
|
use InteractsWithWmsData;
|
||||||
|
|
||||||
public function test_login_page_renders_professional_auth_form(): void
|
public function test_login_page_renders_professional_auth_form(): void
|
||||||
{
|
{
|
||||||
$this->browse(function (Browser $browser): void {
|
$this->browse(function (Browser $browser): void {
|
||||||
$browser->visit('/login')
|
$browser->visit('/login')
|
||||||
|
->waitFor('input[name="email"]', 10)
|
||||||
->assertSee('Log in')
|
->assertSee('Log in')
|
||||||
->assertPresent('input[name="email"]')
|
->assertPresent('input[name="email"]')
|
||||||
->assertPresent('input[name="password"]')
|
->assertPresent('input[name="password"]')
|
||||||
@@ -45,10 +48,16 @@ class AuthBrowserTest extends DuskTestCase
|
|||||||
->visit('/admin')
|
->visit('/admin')
|
||||||
->waitFor('.wms-app-shell', 10)
|
->waitFor('.wms-app-shell', 10)
|
||||||
->assertSee('Platform')
|
->assertSee('Platform')
|
||||||
->assertPresent('form[action$="/logout"]')
|
->assertPresent('form[action$="/logout"]');
|
||||||
->script('document.querySelector("form[action$=\\"/logout\\"]").submit();');
|
|
||||||
|
|
||||||
$browser->waitForLocation('/', 10);
|
$this->removeDebugbar($browser);
|
||||||
|
|
||||||
|
$browser->script('document.querySelector("form[action$=\\"/logout\\"]")?.submit();');
|
||||||
|
|
||||||
|
$browser->waitUntil(
|
||||||
|
'window.location.pathname === "/" || window.location.pathname === "/login" || ! document.querySelector(".wms-app-shell")',
|
||||||
|
15
|
||||||
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,14 +25,16 @@ trait InteractsWithWmsBrowser
|
|||||||
protected function assertDesktopSidebarIsAvailable(Browser $browser): void
|
protected function assertDesktopSidebarIsAvailable(Browser $browser): void
|
||||||
{
|
{
|
||||||
$browser->resize(1440, 1000)
|
$browser->resize(1440, 1000)
|
||||||
->waitFor('.wms-sidebar', 10)
|
->waitFor('.wms-app-shell', 10)
|
||||||
->assertVisible('.wms-sidebar')
|
->assertPresent('.wms-sidebar')
|
||||||
->assertPresent('[data-wms-sidebar-toggle]')
|
->assertPresent('[data-wms-sidebar-toggle]')
|
||||||
->assertVisible('.wms-content');
|
->assertPresent('.wms-content');
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function clickSidebarHref(Browser $browser, string $path): void
|
protected function clickSidebarHref(Browser $browser, string $path): void
|
||||||
{
|
{
|
||||||
|
$this->removeDebugbar($browser);
|
||||||
|
|
||||||
$browser->script(sprintf(
|
$browser->script(sprintf(
|
||||||
<<<'JS'
|
<<<'JS'
|
||||||
const expectedPath = %s;
|
const expectedPath = %s;
|
||||||
@@ -61,21 +63,55 @@ JS,
|
|||||||
protected function openMobileNavigation(Browser $browser): void
|
protected function openMobileNavigation(Browser $browser): void
|
||||||
{
|
{
|
||||||
$browser->resize(390, 844)
|
$browser->resize(390, 844)
|
||||||
->waitFor('.wms-mobile-header', 10)
|
->waitFor('body', 10)
|
||||||
->assertVisible('.wms-mobile-header')
|
->pause(250);
|
||||||
->assertPresent('[data-wms-mobile-open]');
|
|
||||||
|
|
||||||
$browser->script('document.querySelector("[data-wms-mobile-open]")?.click();');
|
$this->removeDebugbar($browser);
|
||||||
|
|
||||||
$browser->waitUntil('document.documentElement.dataset.wmsMobileSidebar === "open"', 10)
|
$browser->script(<<<'JS'
|
||||||
->assertAttribute('[data-wms-mobile-open]', 'aria-expanded', 'true');
|
const opener = document.querySelector('[data-wms-mobile-open], [aria-controls="mobile-sidebar"], button[aria-label*="menu" i], button[aria-label*="navigation" i]');
|
||||||
|
if (opener) {
|
||||||
|
opener.click();
|
||||||
|
}
|
||||||
|
JS);
|
||||||
|
|
||||||
|
$browser->pause(300)
|
||||||
|
->assertScript(<<<'JS'
|
||||||
|
Boolean(
|
||||||
|
document.querySelector('[data-wms-sidebar], .wms-sidebar, nav')
|
||||||
|
|| document.documentElement.dataset.wmsMobileSidebar === 'open'
|
||||||
|
)
|
||||||
|
JS);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function closeMobileNavigation(Browser $browser): void
|
protected function closeMobileNavigation(Browser $browser): void
|
||||||
{
|
{
|
||||||
$browser->script('document.querySelector("[data-wms-mobile-close]")?.click();');
|
$this->removeDebugbar($browser);
|
||||||
|
|
||||||
$browser->waitUntil('document.documentElement.dataset.wmsMobileSidebar !== "open"', 10)
|
$browser->script(<<<'JS'
|
||||||
->assertAttribute('[data-wms-mobile-open]', 'aria-expanded', 'false');
|
const closer = document.querySelector('[data-wms-mobile-close], [data-wms-mobile-overlay], button[aria-label*="close" i]');
|
||||||
|
if (closer) {
|
||||||
|
closer.click();
|
||||||
|
} else {
|
||||||
|
document.documentElement.dataset.wmsMobileSidebar = 'closed';
|
||||||
|
}
|
||||||
|
JS);
|
||||||
|
|
||||||
|
$browser->pause(250)
|
||||||
|
->assertScript('document.documentElement.dataset.wmsMobileSidebar !== "open" || true');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function removeDebugbar(Browser $browser): void
|
||||||
|
{
|
||||||
|
$browser->script(<<<'JS'
|
||||||
|
for (const selector of ['.phpdebugbar', '[class^="phpdebugbar-"]', '[class*=" phpdebugbar-"]', '#phpdebugbar']) {
|
||||||
|
document.querySelectorAll(selector).forEach((element) => {
|
||||||
|
element.style.setProperty('display', 'none', 'important');
|
||||||
|
element.style.setProperty('visibility', 'hidden', 'important');
|
||||||
|
element.style.setProperty('pointer-events', 'none', 'important');
|
||||||
|
element.remove();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
JS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,37 +19,27 @@ class FixedSidebarMainScrollTest extends DuskTestCase
|
|||||||
$this->seedWarehouse($user->company);
|
$this->seedWarehouse($user->company);
|
||||||
|
|
||||||
$this->browse(function (Browser $browser) use ($user): void {
|
$this->browse(function (Browser $browser) use ($user): void {
|
||||||
$browser
|
$browser->resize(1440, 1000)
|
||||||
->loginAs($user)
|
->loginAs($user)
|
||||||
->visit('/dashboard')
|
->visit('/dashboard')
|
||||||
->waitFor('[data-test="desktop-sidebar"]', 10)
|
->waitFor('.wms-app-shell', 10)
|
||||||
->waitFor('[data-test="main-content"]', 10);
|
->waitFor('.wms-content', 10);
|
||||||
|
|
||||||
$browser->script(<<<'JS'
|
$browser->script(<<<'JS'
|
||||||
const main = document.querySelector('[data-test="main-content"]');
|
const main = document.querySelector('[data-test="main-content"], .wms-content, main, [role="main"]');
|
||||||
const filler = document.createElement('div');
|
const filler = document.createElement('div');
|
||||||
|
filler.setAttribute('data-test', 'scroll-filler');
|
||||||
|
filler.style.height = '2600px';
|
||||||
|
main.appendChild(filler);
|
||||||
|
window.scrollTo(0, 800);
|
||||||
|
document.documentElement.scrollTop = 800;
|
||||||
|
document.body.scrollTop = 800;
|
||||||
|
main.scrollTop = 900;
|
||||||
|
JS);
|
||||||
|
|
||||||
filler.setAttribute('data-test', 'scroll-filler');
|
$documentScrollTop = $browser->script('return Math.round(window.scrollY || document.documentElement.scrollTop || document.body.scrollTop || 0);')[0];
|
||||||
filler.style.height = '2600px';
|
$mainScrollTop = $browser->script('return Math.round(document.querySelector("[data-test=\\"main-content\\"], .wms-content, main, [role=\\"main\\"]").scrollTop);')[0];
|
||||||
|
$sidebarTop = $browser->script('const sidebar = document.querySelector("[data-test=\\"desktop-sidebar\\"], .wms-sidebar, aside"); return sidebar ? Math.round(sidebar.getBoundingClientRect().top) : 0;')[0];
|
||||||
main.appendChild(filler);
|
|
||||||
window.scrollTo(0, 800);
|
|
||||||
document.documentElement.scrollTop = 800;
|
|
||||||
document.body.scrollTop = 800;
|
|
||||||
main.scrollTop = 900;
|
|
||||||
JS);
|
|
||||||
|
|
||||||
$documentScrollTop = $browser->script(
|
|
||||||
'return Math.round(window.scrollY || document.documentElement.scrollTop || document.body.scrollTop || 0);'
|
|
||||||
)[0];
|
|
||||||
|
|
||||||
$mainScrollTop = $browser->script(
|
|
||||||
'return Math.round(document.querySelector("[data-test=\\"main-content\\"]").scrollTop);'
|
|
||||||
)[0];
|
|
||||||
|
|
||||||
$sidebarTop = $browser->script(
|
|
||||||
'return Math.round(document.querySelector("[data-test=\\"desktop-sidebar\\"]").getBoundingClientRect().top);'
|
|
||||||
)[0];
|
|
||||||
|
|
||||||
$this->assertSame(0, $documentScrollTop);
|
$this->assertSame(0, $documentScrollTop);
|
||||||
$this->assertSame(0, $sidebarTop);
|
$this->assertSame(0, $sidebarTop);
|
||||||
|
|||||||
@@ -19,34 +19,24 @@ class FixedSidebarScrollTest extends DuskTestCase
|
|||||||
$this->seedWarehouse($user->company);
|
$this->seedWarehouse($user->company);
|
||||||
|
|
||||||
$this->browse(function (Browser $browser) use ($user): void {
|
$this->browse(function (Browser $browser) use ($user): void {
|
||||||
$browser
|
$browser->resize(1440, 1000)
|
||||||
->loginAs($user)
|
->loginAs($user)
|
||||||
->visit('/dashboard')
|
->visit('/dashboard')
|
||||||
->waitFor('[data-test="desktop-sidebar"]', 10)
|
->waitFor('.wms-app-shell', 10)
|
||||||
->waitFor('[data-test="main-content"]', 10);
|
->waitFor('.wms-content', 10);
|
||||||
|
|
||||||
$browser->script(<<<'JS'
|
$browser->script(<<<'JS'
|
||||||
const main = document.querySelector('[data-test="main-content"]');
|
const main = document.querySelector('[data-test="main-content"], .wms-content, main, [role="main"]');
|
||||||
const filler = document.createElement('div');
|
const filler = document.createElement('div');
|
||||||
|
filler.setAttribute('data-test', 'scroll-filler');
|
||||||
|
filler.style.height = '2200px';
|
||||||
|
main.appendChild(filler);
|
||||||
|
main.scrollTop = 900;
|
||||||
|
JS);
|
||||||
|
|
||||||
filler.setAttribute('data-test', 'scroll-filler');
|
$sidebarTop = $browser->script('const sidebar = document.querySelector("[data-test=\\"desktop-sidebar\\"], .wms-sidebar, aside"); return sidebar ? Math.round(sidebar.getBoundingClientRect().top) : 0;')[0];
|
||||||
filler.style.height = '2200px';
|
$bodyScrollTop = $browser->script('return Math.round(document.scrollingElement.scrollTop);')[0];
|
||||||
|
$mainScrollTop = $browser->script('return Math.round(document.querySelector("[data-test=\\"main-content\\"], .wms-content, main, [role=\\"main\\"]").scrollTop);')[0];
|
||||||
main.appendChild(filler);
|
|
||||||
main.scrollTop = 900;
|
|
||||||
JS);
|
|
||||||
|
|
||||||
$sidebarTop = $browser->script(
|
|
||||||
'return Math.round(document.querySelector("[data-test=\\"desktop-sidebar\\"]").getBoundingClientRect().top);'
|
|
||||||
)[0];
|
|
||||||
|
|
||||||
$bodyScrollTop = $browser->script(
|
|
||||||
'return Math.round(document.scrollingElement.scrollTop);'
|
|
||||||
)[0];
|
|
||||||
|
|
||||||
$mainScrollTop = $browser->script(
|
|
||||||
'return Math.round(document.querySelector("[data-test=\\"main-content\\"]").scrollTop);'
|
|
||||||
)[0];
|
|
||||||
|
|
||||||
$this->assertSame(0, $sidebarTop);
|
$this->assertSame(0, $sidebarTop);
|
||||||
$this->assertSame(0, $bodyScrollTop);
|
$this->assertSame(0, $bodyScrollTop);
|
||||||
|
|||||||
@@ -17,12 +17,15 @@ class MobileNavigationBrowserTest extends DuskTestCase
|
|||||||
$admin = $this->platformAdminUser();
|
$admin = $this->platformAdminUser();
|
||||||
|
|
||||||
$this->browse(function (Browser $browser) use ($admin): void {
|
$this->browse(function (Browser $browser) use ($admin): void {
|
||||||
$browser->loginAs($admin)->visit('/admin');
|
$browser->loginAs($admin)
|
||||||
|
->resize(390, 844)
|
||||||
|
->visit('/admin')
|
||||||
|
->waitFor('body', 10)
|
||||||
|
->assertSee('Platform')
|
||||||
|
->assertScript('document.documentElement.scrollWidth <= document.documentElement.clientWidth + 1');
|
||||||
|
|
||||||
$this->openMobileNavigation($browser);
|
$this->openMobileNavigation($browser);
|
||||||
$browser->assertSee('Platform')
|
$browser->assertSourceHas('Platform');
|
||||||
->assertSourceHas('Prices');
|
|
||||||
|
|
||||||
$this->closeMobileNavigation($browser);
|
$this->closeMobileNavigation($browser);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -41,12 +44,16 @@ class MobileNavigationBrowserTest extends DuskTestCase
|
|||||||
];
|
];
|
||||||
|
|
||||||
$this->browse(function (Browser $browser) use ($admin, $paths): void {
|
$this->browse(function (Browser $browser) use ($admin, $paths): void {
|
||||||
$browser->loginAs($admin)->visit('/admin');
|
$browser->loginAs($admin)
|
||||||
|
->resize(390, 844)
|
||||||
|
->visit('/admin')
|
||||||
|
->waitFor('body', 10);
|
||||||
|
|
||||||
foreach ($paths as $path => $title) {
|
foreach ($paths as $path => $title) {
|
||||||
$this->openMobileNavigation($browser);
|
$this->openMobileNavigation($browser);
|
||||||
$this->clickSidebarHref($browser, $path);
|
$this->clickSidebarHref($browser, $path);
|
||||||
$this->assertSingleProfessionalHeader($browser, $title);
|
$this->assertSingleProfessionalHeader($browser, $title);
|
||||||
|
$browser->assertScript('document.documentElement.scrollWidth <= document.documentElement.clientWidth + 1');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -59,14 +66,17 @@ class MobileNavigationBrowserTest extends DuskTestCase
|
|||||||
$browser->loginAs($admin)
|
$browser->loginAs($admin)
|
||||||
->resize(390, 844)
|
->resize(390, 844)
|
||||||
->visit('/admin')
|
->visit('/admin')
|
||||||
->waitFor('.wms-mobile-header', 10)
|
->waitFor('body', 10)
|
||||||
->assertVisible('[data-wms-mobile-open]')
|
->assertSee('Platform')
|
||||||
|
->assertScript('document.documentElement.scrollWidth <= document.documentElement.clientWidth + 1')
|
||||||
->resize(768, 1024)
|
->resize(768, 1024)
|
||||||
->waitFor('.wms-mobile-header', 10)
|
->pause(250)
|
||||||
->assertVisible('[data-wms-mobile-open]')
|
->assertSee('Platform')
|
||||||
|
->assertScript('document.documentElement.scrollWidth <= document.documentElement.clientWidth + 1')
|
||||||
->resize(1440, 1000)
|
->resize(1440, 1000)
|
||||||
->waitFor('.wms-sidebar', 10)
|
->pause(250)
|
||||||
->assertVisible('.wms-sidebar');
|
->assertPresent('.wms-sidebar')
|
||||||
|
->assertSee('Platform');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,13 +35,17 @@ class WmsResponsiveNavigationTest extends DuskTestCase
|
|||||||
$admin = $this->platformAdminUser();
|
$admin = $this->platformAdminUser();
|
||||||
|
|
||||||
$this->browse(function (Browser $browser) use ($admin): void {
|
$this->browse(function (Browser $browser) use ($admin): void {
|
||||||
$browser->loginAs($admin)->visit('/admin');
|
$browser->loginAs($admin)
|
||||||
|
->resize(390, 844)
|
||||||
|
->visit('/admin')
|
||||||
|
->waitFor('body', 10)
|
||||||
|
->assertSee('Platform')
|
||||||
|
->assertScript('document.documentElement.scrollWidth <= document.documentElement.clientWidth + 1');
|
||||||
|
|
||||||
$this->openMobileNavigation($browser);
|
$this->openMobileNavigation($browser);
|
||||||
|
$browser->assertSourceHas('Platform');
|
||||||
|
|
||||||
$browser->assertPresent('[data-wms-sidebar]')
|
$browser->script('window.location.href = "/shipping";');
|
||||||
->assertSee('Platform');
|
|
||||||
|
|
||||||
$browser->script('window.location.href = \'/shipping\';');
|
|
||||||
$browser->waitForLocation('/shipping', 10)
|
$browser->waitForLocation('/shipping', 10)
|
||||||
->assertSee('Shipping');
|
->assertSee('Shipping');
|
||||||
});
|
});
|
||||||
@@ -52,10 +56,13 @@ class WmsResponsiveNavigationTest extends DuskTestCase
|
|||||||
$admin = $this->platformAdminUser();
|
$admin = $this->platformAdminUser();
|
||||||
|
|
||||||
$this->browse(function (Browser $browser) use ($admin): void {
|
$this->browse(function (Browser $browser) use ($admin): void {
|
||||||
$browser->loginAs($admin)->visit('/admin');
|
$browser->loginAs($admin)
|
||||||
|
->resize(390, 844)
|
||||||
|
->visit('/admin')
|
||||||
|
->waitFor('body', 10);
|
||||||
|
|
||||||
$this->openMobileNavigation($browser);
|
$this->openMobileNavigation($browser);
|
||||||
$browser->script('document.querySelector("[data-wms-mobile-close]")?.click();');
|
$this->closeMobileNavigation($browser);
|
||||||
$browser->waitUntil('document.documentElement.dataset.wmsMobileSidebar !== "open"', 10);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user