diff --git a/src/tests/Browser/Pages/PaymentMollie.php b/src/tests/Browser/Pages/PaymentMollie.php --- a/src/tests/Browser/Pages/PaymentMollie.php +++ b/src/tests/Browser/Pages/PaymentMollie.php @@ -25,7 +25,7 @@ */ public function assert($browser) { - $browser->waitFor('form#body table, form#body iframe'); + $browser->waitFor('form#body table, form#body iframe', 10); } /** @@ -64,7 +64,7 @@ $browser->type('#expiryDate', '12/' . (date('y') + 1)); }) ->withinFrame('#cvv iframe', function ($browser) { - $browser->type('#verificationCode', '123'); + $browser->click('#verificationCode')->type('#verificationCode', '123'); }) ->click('#submit-button'); } diff --git a/src/tests/Browser/Pages/PaymentStripe.php b/src/tests/Browser/Pages/PaymentStripe.php --- a/src/tests/Browser/Pages/PaymentStripe.php +++ b/src/tests/Browser/Pages/PaymentStripe.php @@ -40,7 +40,7 @@ '@title' => '.App-Overview .ProductSummary', '@amount' => '#ProductSummary-totalAmount', '@description' => '#ProductSummary-Description', - '@email-input' => '.App-Payment #email', + '@email' => '.App-Payment .ReadOnlyFormField-email .ReadOnlyFormField-content', '@cardnumber-input' => '.App-Payment #cardNumber', '@cardexpiry-input' => '.App-Payment #cardExpiry', '@cardcvc-input' => '.App-Payment #cardCvc', diff --git a/src/tests/Browser/PaymentMollieTest.php b/src/tests/Browser/PaymentMollieTest.php --- a/src/tests/Browser/PaymentMollieTest.php +++ b/src/tests/Browser/PaymentMollieTest.php @@ -108,6 +108,7 @@ ->on(new WalletPage()) ->assertMissing('@body #mandate-form .alert') ->click('@main #mandate-form button') +/* ->with(new Dialog('@payment-dialog'), function (Browser $browser) { $browser->assertSeeIn('@title', 'Set up auto-payment') ->waitFor('#payment-method-selection .link-creditcard svg') @@ -115,8 +116,10 @@ ->assertMissing('#payment-method-selection .link-banktransfer') ->click('#payment-method-selection .link-creditcard'); }) +*/ ->with(new Dialog('@payment-dialog'), function (Browser $browser) { $browser->assertSeeIn('@title', 'Set up auto-payment') + ->waitFor('@body #mandate_amount') ->assertSeeIn('@body label[for="mandate_amount"]', 'Fill up by') ->assertValue('@body #mandate_amount', Payment::MIN_AMOUNT / 100) ->assertSeeIn('@body label[for="mandate_balance"]', 'when account balance is below') // phpcs:ignore @@ -229,13 +232,16 @@ $browser->on(new WalletPage()) ->assertMissing('@body #mandate-form .alert') ->click('@main #mandate-form button') +/* ->with(new Dialog('@payment-dialog'), function (Browser $browser) { $browser->assertSeeIn('@title', 'Set up auto-payment') ->waitFor('#payment-method-selection .link-creditcard') ->click('#payment-method-selection .link-creditcard'); }) +*/ ->with(new Dialog('@payment-dialog'), function (Browser $browser) { $browser->assertSeeIn('@title', 'Set up auto-payment') + ->waitFor('@body #mandate_amount') ->assertSeeIn('@button-cancel', 'Cancel') ->assertSeeIn('@button-action', 'Continue') // Submit valid data @@ -259,13 +265,16 @@ // Create a new mandate ->click('@main #mandate-form button') +/* ->with(new Dialog('@payment-dialog'), function (Browser $browser) { $browser->assertSeeIn('@title', 'Set up auto-payment') ->waitFor('#payment-method-selection .link-creditcard') ->click('#payment-method-selection .link-creditcard'); }) +*/ ->with(new Dialog('@payment-dialog'), function (Browser $browser) { $browser->assertSeeIn('@title', 'Set up auto-payment') + ->waitFor('@body #mandate_amount') ->assertSeeIn('@button-cancel', 'Cancel') ->assertSeeIn('@button-action', 'Continue') // Submit valid data diff --git a/src/tests/Browser/PaymentStripeTest.php b/src/tests/Browser/PaymentStripeTest.php --- a/src/tests/Browser/PaymentStripeTest.php +++ b/src/tests/Browser/PaymentStripeTest.php @@ -80,7 +80,7 @@ ->on(new PaymentStripe()) ->assertSeeIn('@title', $user->tenant->title . ' Payment') ->assertSeeIn('@amount', 'CHF 12.34') - ->assertValue('@email-input', $user->email) + ->assertSeeIn('@email', $user->email) ->submitValidCreditCard(); // Now it should redirect back to wallet page and in background @@ -115,6 +115,7 @@ ->on(new WalletPage()) ->assertMissing('@body #mandate-form .alert') ->click('@main #mandate-form button') +/* ->with(new Dialog('@payment-dialog'), function (Browser $browser) { $browser->assertSeeIn('@title', 'Set up auto-payment') ->waitFor('#payment-method-selection .link-creditcard') @@ -122,8 +123,10 @@ ->assertMissing('#payment-method-selection .link-banktransfer') ->click('#payment-method-selection .link-creditcard'); }) +*/ ->with(new Dialog('@payment-dialog'), function (Browser $browser) { $browser->assertSeeIn('@title', 'Set up auto-payment') + ->waitFor('@body #mandate_amount') ->assertSeeIn('@body label[for="mandate_amount"]', 'Fill up by') ->assertValue('@body #mandate_amount', Payment::MIN_AMOUNT / 100) ->assertSeeIn('@body label[for="mandate_balance"]', 'when account balance is below') // phpcs:ignore @@ -157,7 +160,7 @@ ->on(new PaymentStripe()) ->assertMissing('@title') ->assertMissing('@amount') - ->assertValue('@email-input', $user->email) + ->assertSeeIn('@email', $user->email) ->submitValidCreditCard() ->waitForLocation('/wallet', 30) // need more time than default 5 sec. ->visit('/wallet?paymentProvider=stripe') diff --git a/src/tests/Browser/SignupTest.php b/src/tests/Browser/SignupTest.php --- a/src/tests/Browser/SignupTest.php +++ b/src/tests/Browser/SignupTest.php @@ -12,7 +12,9 @@ use Tests\Browser\Components\Menu; use Tests\Browser\Components\Toast; use Tests\Browser\Pages\Dashboard; +use Tests\Browser\Pages\Home; use Tests\Browser\Pages\Signup; +use Tests\Browser\Pages\Wallet; use Tests\TestCaseDusk; use Illuminate\Foundation\Testing\DatabaseMigrations; @@ -29,7 +31,7 @@ $this->deleteTestUser('admin@user-domain-signup.com'); $this->deleteTestDomain('user-domain-signup.com'); - Plan::where('mode', 'token')->update(['mode' => 'email']); + Plan::whereIn('mode', ['token', 'mandate'])->update(['mode' => 'email']); } /** @@ -42,7 +44,7 @@ $this->deleteTestDomain('user-domain-signup.com'); SignupInvitation::truncate(); - Plan::where('mode', 'token')->update(['mode' => 'email']); + Plan::whereIn('mode', ['token', 'mandate'])->update(['mode' => 'email']); @unlink(storage_path('signup-tokens.txt')); @@ -518,6 +520,67 @@ }); } + /** + * Test signup with a mandate plan, also the wallet lock + */ + public function testSignupMandate(): void + { + // Test the individual plan + $plan = Plan::withEnvTenantContext()->where('title', 'individual')->first(); + $plan->mode = 'mandate'; + $plan->save(); + + $this->browse(function (Browser $browser) { + $browser->visit(new Signup()) + ->waitFor('@step0 .plan-individual button') + ->click('@step0 .plan-individual button') + // Test Back button + ->whenAvailable('@step3', function ($browser) { + $browser->click('button[type=button]'); + }) + ->whenAvailable('@step0', function ($browser) { + $browser->click('.plan-individual button'); + }) + // Test submit + ->whenAvailable('@step3', function ($browser) { + $domains = Domain::getPublicDomains(); + $domains_count = count($domains); + + $browser->assertMissing('.card-title') + ->assertElementsCount('select#signup_domain option', $domains_count, false) + ->assertText('select#signup_domain option:nth-child(1)', $domains[0]) + ->assertValue('select#signup_domain option:nth-child(1)', $domains[0]) + ->type('#signup_login', 'signuptestdusk') + ->type('#signup_password', '12345678') + ->type('#signup_password_confirmation', '12345678') + ->click('[type=submit]'); + }) + ->waitUntilMissing('@step3') + ->on(new Wallet()) + ->assertSeeIn('#lock-alert', "The account is locked") + ->within(new Menu(), function ($browser) { + $browser->clickMenuItem('logout'); + }); + }); + + $user = User::where('email', 'signuptestdusk@' . \config('app.domain'))->first(); + $this->assertSame($plan->id, $user->getSetting('plan_id')); + + // Login again and see that the account is still locked + $this->browse(function (Browser $browser) use ($user) { + $browser->on(new Home()) + ->submitLogon($user->email, '12345678', false) + ->waitForLocation('/wallet') + ->on(new Wallet()) + ->assertSeeIn('#lock-alert', "The account is locked") + ->within(new Menu(), function ($browser) { + $browser->clickMenuItem('logout'); + }); + + // TODO: Test automatic UI unlock after creating a valid auto-payment mandate + }); + } + /** * Test signup with a token plan */