Changeset View
Changeset View
Standalone View
Standalone View
src/tests/Browser/SignupTest.php
Show First 20 Lines • Show All 60 Lines • ▼ Show 20 Lines | public function testSignupCodeByLink(): void | ||||
// Test invalid code (valid format) | // Test invalid code (valid format) | ||||
$this->browse(function (Browser $browser) { | $this->browse(function (Browser $browser) { | ||||
$browser->visit('/signup/XXXXX-code'); | $browser->visit('/signup/XXXXX-code'); | ||||
// FIXME: User will not be able to continue anyway, so we should | // FIXME: User will not be able to continue anyway, so we should | ||||
// either display 1st step or 404 error page | // either display 1st step or 404 error page | ||||
$browser->waitFor('@step1') | $browser->waitFor('@step1') | ||||
->assertToast(Toast::TYPE_ERROR, 'Error', 'Form validation error'); | ->assertToast(Toast::TYPE_ERROR, 'Form validation error'); | ||||
}); | }); | ||||
// Test valid code | // Test valid code | ||||
$this->browse(function (Browser $browser) { | $this->browse(function (Browser $browser) { | ||||
$code = SignupCode::create([ | $code = SignupCode::create([ | ||||
'data' => [ | 'data' => [ | ||||
'email' => 'User@example.org', | 'email' => 'User@example.org', | ||||
'name' => 'User Name', | 'name' => 'User Name', | ||||
▲ Show 20 Lines • Show All 105 Lines • ▼ Show 20 Lines | public function testSignupStep1(): void | ||||
// Submit invalid email | // Submit invalid email | ||||
// We expect email input to have is-invalid class added, with .invalid-feedback element | // We expect email input to have is-invalid class added, with .invalid-feedback element | ||||
$browser->with('@step1', function ($step) use ($browser) { | $browser->with('@step1', function ($step) use ($browser) { | ||||
$step->type('#signup_name', 'Test User') | $step->type('#signup_name', 'Test User') | ||||
->type('#signup_email', '@test') | ->type('#signup_email', '@test') | ||||
->click('[type=submit]') | ->click('[type=submit]') | ||||
->waitFor('#signup_email.is-invalid') | ->waitFor('#signup_email.is-invalid') | ||||
->assertVisible('#signup_email + .invalid-feedback') | ->assertVisible('#signup_email + .invalid-feedback') | ||||
->assertToast(Toast::TYPE_ERROR, 'Error', 'Form validation error'); | ->assertToast(Toast::TYPE_ERROR, 'Form validation error'); | ||||
}); | }); | ||||
// Submit valid data | // Submit valid data | ||||
// We expect error state on email input to be removed, and Step 2 form visible | // We expect error state on email input to be removed, and Step 2 form visible | ||||
$browser->with('@step1', function ($step) { | $browser->with('@step1', function ($step) { | ||||
$step->type('#signup_name', 'Test User'); | $step->type('#signup_name', 'Test User'); | ||||
$step->type('#signup_email', 'BrowserSignupTestUser1@kolab.org'); | $step->type('#signup_email', 'BrowserSignupTestUser1@kolab.org'); | ||||
$step->click('[type=submit]'); | $step->click('[type=submit]'); | ||||
▲ Show 20 Lines • Show All 49 Lines • ▼ Show 20 Lines | public function testSignupStep2(): void | ||||
// We expect code input to have is-invalid class added, with .invalid-feedback element | // We expect code input to have is-invalid class added, with .invalid-feedback element | ||||
$browser->with('@step2', function ($step) use ($browser) { | $browser->with('@step2', function ($step) use ($browser) { | ||||
$step->type('#signup_short_code', 'XXXXX'); | $step->type('#signup_short_code', 'XXXXX'); | ||||
$step->click('[type=submit]'); | $step->click('[type=submit]'); | ||||
$step->waitFor('#signup_short_code.is-invalid') | $step->waitFor('#signup_short_code.is-invalid') | ||||
->assertVisible('#signup_short_code + .invalid-feedback') | ->assertVisible('#signup_short_code + .invalid-feedback') | ||||
->assertFocused('#signup_short_code') | ->assertFocused('#signup_short_code') | ||||
->assertToast(Toast::TYPE_ERROR, 'Error', 'Form validation error'); | ->assertToast(Toast::TYPE_ERROR, 'Form validation error'); | ||||
}); | }); | ||||
// Submit valid code | // Submit valid code | ||||
// We expect error state on code input to be removed, and Step 3 form visible | // We expect error state on code input to be removed, and Step 3 form visible | ||||
$browser->with('@step2', function ($step) { | $browser->with('@step2', function ($step) { | ||||
// Get the code and short_code from database | // Get the code and short_code from database | ||||
// FIXME: Find a nice way to read javascript data without using hidden inputs | // FIXME: Find a nice way to read javascript data without using hidden inputs | ||||
$code = $step->value('#signup_code'); | $code = $step->value('#signup_code'); | ||||
▲ Show 20 Lines • Show All 70 Lines • ▼ Show 20 Lines | public function testSignupStep3(): void | ||||
->type('#signup_password', '12345678') | ->type('#signup_password', '12345678') | ||||
->type('#signup_confirm', '123456789') | ->type('#signup_confirm', '123456789') | ||||
->click('[type=submit]') | ->click('[type=submit]') | ||||
->waitFor('#signup_login.is-invalid') | ->waitFor('#signup_login.is-invalid') | ||||
->assertVisible('#signup_domain + .invalid-feedback') | ->assertVisible('#signup_domain + .invalid-feedback') | ||||
->assertVisible('#signup_password.is-invalid') | ->assertVisible('#signup_password.is-invalid') | ||||
->assertVisible('#signup_password + .invalid-feedback') | ->assertVisible('#signup_password + .invalid-feedback') | ||||
->assertFocused('#signup_login') | ->assertFocused('#signup_login') | ||||
->assertToast(Toast::TYPE_ERROR, 'Error', 'Form validation error'); | ->assertToast(Toast::TYPE_ERROR, 'Form validation error'); | ||||
}); | }); | ||||
// Submit invalid data (valid login, invalid password) | // Submit invalid data (valid login, invalid password) | ||||
$browser->with('@step3', function ($step) use ($browser) { | $browser->with('@step3', function ($step) use ($browser) { | ||||
$step->type('#signup_login', 'SignupTestDusk') | $step->type('#signup_login', 'SignupTestDusk') | ||||
->click('[type=submit]') | ->click('[type=submit]') | ||||
->waitFor('#signup_password.is-invalid') | ->waitFor('#signup_password.is-invalid') | ||||
->assertVisible('#signup_password + .invalid-feedback') | ->assertVisible('#signup_password + .invalid-feedback') | ||||
->assertMissing('#signup_login.is-invalid') | ->assertMissing('#signup_login.is-invalid') | ||||
->assertMissing('#signup_domain + .invalid-feedback') | ->assertMissing('#signup_domain + .invalid-feedback') | ||||
->assertFocused('#signup_password') | ->assertFocused('#signup_password') | ||||
->assertToast(Toast::TYPE_ERROR, 'Error', 'Form validation error'); | ->assertToast(Toast::TYPE_ERROR, 'Form validation error'); | ||||
}); | }); | ||||
// Submit valid data | // Submit valid data | ||||
$browser->with('@step3', function ($step) { | $browser->with('@step3', function ($step) { | ||||
$step->type('#signup_confirm', '12345678'); | $step->type('#signup_confirm', '12345678'); | ||||
$step->click('[type=submit]'); | $step->click('[type=submit]'); | ||||
}); | }); | ||||
▲ Show 20 Lines • Show All 63 Lines • ▼ Show 20 Lines | public function testSignupGroup(): void | ||||
->type('#signup_password', '12345678') | ->type('#signup_password', '12345678') | ||||
->type('#signup_confirm', '123456789') | ->type('#signup_confirm', '123456789') | ||||
->click('[type=submit]') | ->click('[type=submit]') | ||||
->waitFor('#signup_login.is-invalid') | ->waitFor('#signup_login.is-invalid') | ||||
->assertVisible('#signup_domain + .invalid-feedback') | ->assertVisible('#signup_domain + .invalid-feedback') | ||||
->assertVisible('#signup_password.is-invalid') | ->assertVisible('#signup_password.is-invalid') | ||||
->assertVisible('#signup_password + .invalid-feedback') | ->assertVisible('#signup_password + .invalid-feedback') | ||||
->assertFocused('#signup_login') | ->assertFocused('#signup_login') | ||||
->assertToast(Toast::TYPE_ERROR, 'Error', 'Form validation error'); | ->assertToast(Toast::TYPE_ERROR, 'Form validation error'); | ||||
}); | }); | ||||
// Submit invalid domain | // Submit invalid domain | ||||
$browser->with('@step3', function ($step) use ($browser) { | $browser->with('@step3', function ($step) use ($browser) { | ||||
$step->type('#signup_login', 'admin') | $step->type('#signup_login', 'admin') | ||||
->type('#signup_domain', 'aaa') | ->type('#signup_domain', 'aaa') | ||||
->type('#signup_password', '12345678') | ->type('#signup_password', '12345678') | ||||
->type('#signup_confirm', '12345678') | ->type('#signup_confirm', '12345678') | ||||
->click('[type=submit]') | ->click('[type=submit]') | ||||
->waitUntilMissing('#signup_login.is-invalid') | ->waitUntilMissing('#signup_login.is-invalid') | ||||
->assertVisible('#signup_domain.is-invalid + .invalid-feedback') | ->waitFor('#signup_domain.is-invalid + .invalid-feedback') | ||||
->assertMissing('#signup_password.is-invalid') | ->assertMissing('#signup_password.is-invalid') | ||||
->assertMissing('#signup_password + .invalid-feedback') | ->assertMissing('#signup_password + .invalid-feedback') | ||||
->assertFocused('#signup_domain') | ->assertFocused('#signup_domain') | ||||
->assertToast(Toast::TYPE_ERROR, 'Error', 'Form validation error'); | ->assertToast(Toast::TYPE_ERROR, 'Form validation error'); | ||||
}); | }); | ||||
// Submit invalid domain | // Submit invalid domain | ||||
$browser->with('@step3', function ($step) { | $browser->with('@step3', function ($step) { | ||||
$step->type('#signup_domain', 'user-domain-signup.com') | $step->type('#signup_domain', 'user-domain-signup.com') | ||||
->click('[type=submit]'); | ->click('[type=submit]'); | ||||
}); | }); | ||||
▲ Show 20 Lines • Show All 41 Lines • ▼ Show 20 Lines | public function testSignupVoucherLink(): void | ||||
->type('#signup_voucher', 'TESTXX') | ->type('#signup_voucher', 'TESTXX') | ||||
->type('#signup_login', 'signuptestdusk') | ->type('#signup_login', 'signuptestdusk') | ||||
->type('#signup_password', '123456789') | ->type('#signup_password', '123456789') | ||||
->type('#signup_confirm', '123456789') | ->type('#signup_confirm', '123456789') | ||||
->click('[type=submit]') | ->click('[type=submit]') | ||||
->waitFor('#signup_voucher.is-invalid') | ->waitFor('#signup_voucher.is-invalid') | ||||
->assertVisible('#signup_voucher + .invalid-feedback') | ->assertVisible('#signup_voucher + .invalid-feedback') | ||||
->assertFocused('#signup_voucher') | ->assertFocused('#signup_voucher') | ||||
->assertToast(Toast::TYPE_ERROR, 'Error', 'Form validation error') | ->assertToast(Toast::TYPE_ERROR, 'Form validation error') | ||||
// Submit the correct code | // Submit the correct code | ||||
->type('#signup_voucher', 'TEST') | ->type('#signup_voucher', 'TEST') | ||||
->click('[type=submit]'); | ->click('[type=submit]'); | ||||
}) | }) | ||||
->waitUntilMissing('@step3') | ->waitUntilMissing('@step3') | ||||
->waitUntilMissing('.app-loader') | ->waitUntilMissing('.app-loader') | ||||
->on(new Dashboard()) | ->on(new Dashboard()) | ||||
->assertUser('signuptestdusk@' . \config('app.domain')) | ->assertUser('signuptestdusk@' . \config('app.domain')) | ||||
Show All 9 Lines |