Changeset View
Changeset View
Standalone View
Standalone View
src/tests/Browser/LogonTest.php
Show All 13 Lines | |||||
{ | { | ||||
/** | /** | ||||
* Test menu on logon page | * Test menu on logon page | ||||
*/ | */ | ||||
public function testLogonMenu(): void | public function testLogonMenu(): void | ||||
{ | { | ||||
$this->browse(function (Browser $browser) { | $this->browse(function (Browser $browser) { | ||||
$browser->visit(new Home()); | $browser->visit(new Home()) | ||||
$browser->within(new Menu(), function ($browser) { | ->within(new Menu(), function ($browser) { | ||||
$browser->assertMenuItems(['signup', 'explore', 'blog', 'support', 'webmail']); | $browser->assertMenuItems(['signup', 'explore', 'blog', 'support', 'webmail']); | ||||
}) | |||||
->within(new Menu('footer'), function ($browser) { | |||||
$browser->assertMenuItems(['signup', 'explore', 'blog', 'support', 'tos', 'webmail']); | |||||
}); | }); | ||||
}); | }); | ||||
} | } | ||||
/** | /** | ||||
* Test redirect to /login if user is unauthenticated | * Test redirect to /login if user is unauthenticated | ||||
*/ | */ | ||||
public function testLogonRedirect(): void | public function testLogonRedirect(): void | ||||
{ | { | ||||
Show All 11 Lines | class LogonTest extends TestCaseDusk | ||||
*/ | */ | ||||
public function testLogonWrongCredentials(): void | public function testLogonWrongCredentials(): void | ||||
{ | { | ||||
$this->browse(function (Browser $browser) { | $this->browse(function (Browser $browser) { | ||||
$browser->visit(new Home()) | $browser->visit(new Home()) | ||||
->submitLogon('john@kolab.org', 'wrong'); | ->submitLogon('john@kolab.org', 'wrong'); | ||||
// Error message | // Error message | ||||
$browser->with(new Toast(Toast::TYPE_ERROR), function (Browser $browser) { | $browser->assertToast(Toast::TYPE_ERROR, 'Invalid username or password.'); | ||||
$browser->assertToastTitle('Error') | |||||
->assertToastMessage('Invalid username or password.') | |||||
->closeToast(); | |||||
}); | |||||
// Checks if we're still on the logon page | // Checks if we're still on the logon page | ||||
$browser->on(new Home()); | $browser->on(new Home()); | ||||
}); | }); | ||||
} | } | ||||
/** | /** | ||||
* Successful logon test | * Successful logon test | ||||
*/ | */ | ||||
public function testLogonSuccessful(): void | public function testLogonSuccessful(): void | ||||
{ | { | ||||
$this->browse(function (Browser $browser) { | $this->browse(function (Browser $browser) { | ||||
$browser->visit(new Home()) | $browser->visit(new Home()) | ||||
->submitLogon('john@kolab.org', 'simple123', true); | ->submitLogon('john@kolab.org', 'simple123', true); | ||||
// Checks if we're really on Dashboard page | // Checks if we're really on Dashboard page | ||||
$browser->on(new Dashboard()) | $browser->on(new Dashboard()) | ||||
->within(new Menu(), function ($browser) { | ->within(new Menu(), function ($browser) { | ||||
$browser->assertMenuItems(['support', 'contact', 'webmail', 'logout']); | $browser->assertMenuItems(['support', 'contact', 'webmail', 'logout']); | ||||
}) | }) | ||||
->within(new Menu('footer'), function ($browser) { | |||||
$browser->assertMenuItems(['support', 'contact', 'webmail', 'logout']); | |||||
}) | |||||
->assertUser('john@kolab.org'); | ->assertUser('john@kolab.org'); | ||||
// Assert no "Account status" for this account | // Assert no "Account status" for this account | ||||
$browser->assertMissing('@status'); | $browser->assertMissing('@status'); | ||||
// Goto /domains and assert that the link on logo element | // Goto /domains and assert that the link on logo element | ||||
// leads to the dashboard | // leads to the dashboard | ||||
$browser->visit('/domains') | $browser->visit('/domains') | ||||
Show All 27 Lines | public function testLogout(): void | ||||
->on(new Home()); | ->on(new Home()); | ||||
// with default menu | // with default menu | ||||
$browser->within(new Menu(), function ($browser) { | $browser->within(new Menu(), function ($browser) { | ||||
$browser->assertMenuItems(['signup', 'explore', 'blog', 'support', 'webmail']); | $browser->assertMenuItems(['signup', 'explore', 'blog', 'support', 'webmail']); | ||||
}); | }); | ||||
// Success toast message | // Success toast message | ||||
$browser->with(new Toast(Toast::TYPE_SUCCESS), function (Browser $browser) { | $browser->assertToast(Toast::TYPE_SUCCESS, 'Successfully logged out'); | ||||
$browser->assertToastTitle('') | |||||
->assertToastMessage('Successfully logged out') | |||||
->closeToast(); | |||||
}); | |||||
}); | }); | ||||
} | } | ||||
/** | /** | ||||
* Logout by URL test | * Logout by URL test | ||||
*/ | */ | ||||
public function testLogoutByURL(): void | public function testLogoutByURL(): void | ||||
{ | { | ||||
Show All 10 Lines | public function testLogoutByURL(): void | ||||
->on(new Home()); | ->on(new Home()); | ||||
// with default menu | // with default menu | ||||
$browser->within(new Menu(), function ($browser) { | $browser->within(new Menu(), function ($browser) { | ||||
$browser->assertMenuItems(['signup', 'explore', 'blog', 'support', 'webmail']); | $browser->assertMenuItems(['signup', 'explore', 'blog', 'support', 'webmail']); | ||||
}); | }); | ||||
// Success toast message | // Success toast message | ||||
$browser->with(new Toast(Toast::TYPE_SUCCESS), function (Browser $browser) { | $browser->assertToast(Toast::TYPE_SUCCESS, 'Successfully logged out'); | ||||
$browser->assertToastTitle('') | |||||
->assertToastMessage('Successfully logged out') | |||||
->closeToast(); | |||||
}); | |||||
}); | }); | ||||
} | } | ||||
/** | /** | ||||
* Test 2-Factor Authentication | * Test 2-Factor Authentication | ||||
* | * | ||||
* @depends testLogoutByURL | * @depends testLogoutByURL | ||||
*/ | */ | ||||
public function test2FA(): void | public function test2FA(): void | ||||
{ | { | ||||
$this->browse(function (Browser $browser) { | $this->browse(function (Browser $browser) { | ||||
// Test missing 2fa code | // Test missing 2fa code | ||||
$browser->on(new Home()) | $browser->on(new Home()) | ||||
->type('@email-input', 'ned@kolab.org') | ->type('@email-input', 'ned@kolab.org') | ||||
->type('@password-input', 'simple123') | ->type('@password-input', 'simple123') | ||||
->press('form button') | ->press('form button') | ||||
->waitFor('@second-factor-input.is-invalid + .invalid-feedback') | ->waitFor('@second-factor-input.is-invalid + .invalid-feedback') | ||||
->assertSeeIn( | ->assertSeeIn( | ||||
'@second-factor-input.is-invalid + .invalid-feedback', | '@second-factor-input.is-invalid + .invalid-feedback', | ||||
'Second factor code is required.' | 'Second factor code is required.' | ||||
) | ) | ||||
->assertFocused('@second-factor-input') | ->assertFocused('@second-factor-input') | ||||
->assertToast(Toast::TYPE_ERROR, 'Error', 'Form validation error'); | ->assertToast(Toast::TYPE_ERROR, 'Form validation error'); | ||||
// Test invalid code | // Test invalid code | ||||
$browser->type('@second-factor-input', '123456') | $browser->type('@second-factor-input', '123456') | ||||
->press('form button') | ->press('form button') | ||||
->waitUntilMissing('@second-factor-input.is-invalid') | ->waitUntilMissing('@second-factor-input.is-invalid') | ||||
->waitFor('@second-factor-input.is-invalid + .invalid-feedback') | ->waitFor('@second-factor-input.is-invalid + .invalid-feedback') | ||||
->assertSeeIn( | ->assertSeeIn( | ||||
'@second-factor-input.is-invalid + .invalid-feedback', | '@second-factor-input.is-invalid + .invalid-feedback', | ||||
'Second factor code is invalid.' | 'Second factor code is invalid.' | ||||
) | ) | ||||
->assertFocused('@second-factor-input') | ->assertFocused('@second-factor-input') | ||||
->assertToast(Toast::TYPE_ERROR, 'Error', 'Form validation error'); | ->assertToast(Toast::TYPE_ERROR, 'Form validation error'); | ||||
$code = \App\Auth\SecondFactor::code('ned@kolab.org'); | $code = \App\Auth\SecondFactor::code('ned@kolab.org'); | ||||
// Test valid (TOTP) code | // Test valid (TOTP) code | ||||
$browser->type('@second-factor-input', $code) | $browser->type('@second-factor-input', $code) | ||||
->press('form button') | ->press('form button') | ||||
->waitUntilMissing('@second-factor-input.is-invalid') | ->waitUntilMissing('@second-factor-input.is-invalid') | ||||
->waitForLocation('/dashboard')->on(new Dashboard()); | ->waitForLocation('/dashboard')->on(new Dashboard()); | ||||
}); | }); | ||||
} | } | ||||
} | } |