Changeset View
Changeset View
Standalone View
Standalone View
src/tests/Browser/Reseller/InvitationsTest.php
Show First 20 Lines • Show All 45 Lines • ▼ Show 20 Lines | public function testInvitationCreate(): void | ||||
$browser->visit(new Home()) | $browser->visit(new Home()) | ||||
->submitLogon('reseller@' . \config('app.domain'), \App\Utils::generatePassphrase(), true) | ->submitLogon('reseller@' . \config('app.domain'), \App\Utils::generatePassphrase(), true) | ||||
->on(new Dashboard()) | ->on(new Dashboard()) | ||||
->assertSeeIn('@links .link-invitations', 'Invitations') | ->assertSeeIn('@links .link-invitations', 'Invitations') | ||||
->click('@links .link-invitations') | ->click('@links .link-invitations') | ||||
->on(new Invitations()) | ->on(new Invitations()) | ||||
->assertElementsCount('@table tbody tr', 0) | ->assertElementsCount('@table tbody tr', 0) | ||||
->assertMissing('#more-loader') | ->assertMissing('.more-loader') | ||||
->assertSeeIn('@table tfoot td', "There are no invitations in the database.") | ->assertSeeIn('@table tfoot td', "There are no invitations in the database.") | ||||
->assertSeeIn('@create-button', 'Create invite(s)'); | ->assertSeeIn('@create-button', 'Create invite(s)'); | ||||
// Create a single invite with email address input | // Create a single invite with email address input | ||||
$browser->click('@create-button') | $browser->click('@create-button') | ||||
->with(new Dialog('#invite-create'), function (Browser $browser) { | ->with(new Dialog('#invite-create'), function (Browser $browser) { | ||||
$browser->assertSeeIn('@title', 'Invite for a signup') | $browser->assertSeeIn('@title', 'Invite for a signup') | ||||
->assertFocused('@body input#email') | ->assertFocused('@body input#email') | ||||
▲ Show 20 Lines • Show All 109 Lines • ▼ Show 20 Lines | public function testInvitationsList(): void | ||||
SignupInvitation::where('id', $i3->id) | SignupInvitation::where('id', $i3->id) | ||||
->update(['created_at' => now()->subHours('4'), 'status' => SignupInvitation::STATUS_COMPLETED]); | ->update(['created_at' => now()->subHours('4'), 'status' => SignupInvitation::STATUS_COMPLETED]); | ||||
SignupInvitation::where('id', $i11->id)->update(['created_at' => now()->subDays('3')]); | SignupInvitation::where('id', $i11->id)->update(['created_at' => now()->subDays('3')]); | ||||
// Test paging (load more) feature | // Test paging (load more) feature | ||||
$browser->visit(new Invitations()) | $browser->visit(new Invitations()) | ||||
// ->submitLogon('reseller@' . \config('app.domain'), \App\Utils::generatePassphrase(), true) | // ->submitLogon('reseller@' . \config('app.domain'), \App\Utils::generatePassphrase(), true) | ||||
->assertElementsCount('@table tbody tr', 10) | ->assertElementsCount('@table tbody tr', 10) | ||||
->assertSeeIn('#more-loader button', 'Load more') | ->assertSeeIn('.more-loader button', 'Load more') | ||||
->with('@table tbody', function ($browser) use ($i1, $i2, $i3) { | ->with('@table tbody', function ($browser) use ($i1, $i2, $i3) { | ||||
$browser->assertSeeIn('tr:nth-child(1) td.email', $i1->email) | $browser->assertSeeIn('tr:nth-child(1) td.email', $i1->email) | ||||
->assertText('tr:nth-child(1) td.email svg.text-danger title', 'Sending failed') | ->assertText('tr:nth-child(1) td.email svg.text-danger title', 'Sending failed') | ||||
->assertVisible('tr:nth-child(1) td.buttons button.button-delete') | ->assertVisible('tr:nth-child(1) td.buttons button.button-delete') | ||||
->assertVisible('tr:nth-child(1) td.buttons button.button-resend:not(:disabled)') | ->assertVisible('tr:nth-child(1) td.buttons button.button-resend:not(:disabled)') | ||||
->assertSeeIn('tr:nth-child(2) td.email', $i2->email) | ->assertSeeIn('tr:nth-child(2) td.email', $i2->email) | ||||
->assertText('tr:nth-child(2) td.email svg.text-primary title', 'Sent') | ->assertText('tr:nth-child(2) td.email svg.text-primary title', 'Sent') | ||||
->assertVisible('tr:nth-child(2) td.buttons button.button-delete') | ->assertVisible('tr:nth-child(2) td.buttons button.button-delete') | ||||
->assertVisible('tr:nth-child(2) td.buttons button.button-resend:not(:disabled)') | ->assertVisible('tr:nth-child(2) td.buttons button.button-resend:not(:disabled)') | ||||
->assertSeeIn('tr:nth-child(3) td.email', $i3->email) | ->assertSeeIn('tr:nth-child(3) td.email', $i3->email) | ||||
->assertText('tr:nth-child(3) td.email svg.text-success title', 'User signed up') | ->assertText('tr:nth-child(3) td.email svg.text-success title', 'User signed up') | ||||
->assertVisible('tr:nth-child(3) td.buttons button.button-delete') | ->assertVisible('tr:nth-child(3) td.buttons button.button-delete') | ||||
->assertVisible('tr:nth-child(3) td.buttons button.button-resend:disabled') | ->assertVisible('tr:nth-child(3) td.buttons button.button-resend:disabled') | ||||
->assertText('tr:nth-child(4) td.email svg title', 'Not sent yet') | ->assertText('tr:nth-child(4) td.email svg title', 'Not sent yet') | ||||
->assertVisible('tr:nth-child(4) td.buttons button.button-delete') | ->assertVisible('tr:nth-child(4) td.buttons button.button-delete') | ||||
->assertVisible('tr:nth-child(4) td.buttons button.button-resend:disabled'); | ->assertVisible('tr:nth-child(4) td.buttons button.button-resend:disabled'); | ||||
}) | }) | ||||
->click('#more-loader button') | ->click('.more-loader button') | ||||
->whenAvailable('@table tbody tr:nth-child(11)', function ($browser) use ($i11) { | ->whenAvailable('@table tbody tr:nth-child(11)', function ($browser) use ($i11) { | ||||
$browser->assertSeeIn('td.email', $i11->email); | $browser->assertSeeIn('td.email', $i11->email); | ||||
}) | }) | ||||
->assertMissing('#more-loader button'); | ->assertMissing('.more-loader button'); | ||||
// Test searching (by domain) | // Test searching (by domain) | ||||
$browser->type('@search-input', 'ext.com') | $browser->type('@search-input', 'ext.com') | ||||
->click('@search-button') | ->click('@search-button') | ||||
->waitUntilMissing('@table .app-loader') | ->waitUntilMissing('@table .app-loader') | ||||
->assertElementsCount('@table tbody tr', 3) | ->assertElementsCount('@table tbody tr', 3) | ||||
->assertMissing('#more-loader button') | ->assertMissing('.more-loader button') | ||||
// search by full email | // search by full email | ||||
->type('@search-input', 'email7@other.com') | ->type('@search-input', 'email7@other.com') | ||||
->keys('@search-input', '{enter}') | ->keys('@search-input', '{enter}') | ||||
->waitUntilMissing('@table .app-loader') | ->waitUntilMissing('@table .app-loader') | ||||
->assertElementsCount('@table tbody tr', 1) | ->assertElementsCount('@table tbody tr', 1) | ||||
->assertSeeIn('@table tbody tr:nth-child(1) td.email', 'email7@other.com') | ->assertSeeIn('@table tbody tr:nth-child(1) td.email', 'email7@other.com') | ||||
->assertMissing('#more-loader button') | ->assertMissing('.more-loader button') | ||||
// reset search | // reset search | ||||
->vueClear('#search-form input') | ->vueClear('#search-form input') | ||||
->keys('@search-input', '{enter}') | ->keys('@search-input', '{enter}') | ||||
->waitUntilMissing('@table .app-loader') | ->waitUntilMissing('@table .app-loader') | ||||
->assertElementsCount('@table tbody tr', 10) | ->assertElementsCount('@table tbody tr', 10) | ||||
->assertVisible('#more-loader button'); | ->assertVisible('.more-loader button'); | ||||
}); | }); | ||||
} | } | ||||
} | } |