Files
WMS/tests/Browser/WarehouseUiTest.php
T
2026-06-10 14:56:43 +01:00

88 lines
3.3 KiB
PHP

<?php
namespace Tests\Browser;
use Laravel\Dusk\Browser;
use Tests\Browser\Concerns\CreatesWmsBrowserData;
use Tests\Browser\Concerns\TestsResponsiveBreakpoints;
use Tests\DuskTestCase;
class WarehouseUiTest extends DuskTestCase
{
use CreatesWmsBrowserData;
use TestsResponsiveBreakpoints;
public function test_dashboard_warehouse_and_rules_pages_render_at_all_breakpoints(): void
{
$user = $this->createLicensedUser(['name' => 'Tenant User']);
$warehouse = $this->createWarehouseFor($user, ['name' => 'North Warehouse', 'code' => 'NORTH']);
$this->createWarehouseRule($warehouse, ['name' => 'Batch number required']);
$pages = [
['route' => 'dashboard', 'heading' => $user->company->name, 'expected' => ['Warehouses', 'Validation rules']],
['route' => 'warehouses.index', 'heading' => 'Warehouses', 'expected' => ['North Warehouse', 'NORTH']],
['route' => 'warehouse-rules.index', 'heading' => 'Warehouse validation rules', 'expected' => ['Batch number required', 'stock.location.required']],
];
$this->browse(function (Browser $browser) use ($user, $pages): void {
$browser->loginAs($user);
foreach ($pages as $page) {
$browser->visitRoute($page['route']);
$this->eachBreakpoint($browser, function (Browser $browser, string $breakpoint) use ($page): void {
$browser->assertSee($page['heading']);
foreach ($page['expected'] as $text) {
$browser->assertSee($text);
}
if ($this->isMobileNavigationBreakpoint($breakpoint)) {
$browser->assertVisible('[data-wms-mobile-open]');
} else {
$browser->assertVisible('[data-wms-sidebar]');
}
});
}
});
}
public function test_user_can_create_a_warehouse_from_the_ui(): void
{
$user = $this->createLicensedUser();
$this->browse(function (Browser $browser) use ($user): void {
$browser
->loginAs($user)
->visitRoute('warehouses.index')
->type('code', 'PICK')
->type('name', 'Picking Warehouse')
->select('status', 'active')
->press('Create')
->waitForText('Picking Warehouse')
->assertSee('PICK')
->assertSee('Picking Warehouse');
});
}
public function test_user_can_create_a_validation_rule_from_the_ui(): void
{
$user = $this->createLicensedUser();
$warehouse = $this->createWarehouseFor($user, ['name' => 'Rules Warehouse', 'code' => 'RULES']);
$this->browse(function (Browser $browser) use ($user, $warehouse): void {
$browser
->loginAs($user)
->visitRoute('warehouse-rules.index')
->select('warehouse_id', (string) $warehouse->id)
->type('name', 'Pallet scan required')
->type('rule_key', 'pallet.scan.required')
->select('severity', 'warning')
->press('Add')
->waitForText('Pallet scan required')
->assertSee('pallet.scan.required')
->assertSee('warning');
});
}
}