whisper-money/tests/Feature/Onboarding/OnboardingMiddlewareTest.php

81 lines
2.1 KiB
PHP

<?php
use App\Models\User;
it('redirects non-onboarded user from dashboard to onboarding', function () {
$user = User::factory()->create([
'onboarded_at' => null,
'encryption_salt' => 'test-salt',
]);
$response = $this->actingAs($user)->get('/dashboard');
$response->assertRedirect('/onboarding');
});
it('allows onboarded user to access dashboard', function () {
$user = User::factory()->onboarded()->create();
$response = $this->actingAs($user)->get('/dashboard');
$response->assertSuccessful();
});
it('redirects onboarded user away from onboarding page', function () {
$user = User::factory()->onboarded()->create();
$response = $this->actingAs($user)->get('/onboarding');
$response->assertRedirect('/dashboard');
});
it('allows non-onboarded user to access onboarding page', function () {
$user = User::factory()->create([
'onboarded_at' => null,
'encryption_salt' => 'test-salt',
]);
$response = $this->actingAs($user)->get('/onboarding');
$response->assertSuccessful();
});
it('sets onboarded_at when completing onboarding', function () {
$user = User::factory()->create([
'onboarded_at' => null,
'encryption_salt' => 'test-salt',
]);
expect($user->isOnboarded())->toBeFalse();
$response = $this->actingAs($user)->post('/onboarding/complete');
$response->assertRedirect('/dashboard');
$user->refresh();
expect($user->isOnboarded())->toBeTrue();
expect($user->onboarded_at)->not->toBeNull();
});
it('redirects non-onboarded user from accounts list to onboarding', function () {
$user = User::factory()->create([
'onboarded_at' => null,
'encryption_salt' => 'test-salt',
]);
$response = $this->actingAs($user)->get('/accounts');
$response->assertRedirect('/onboarding');
});
it('redirects non-onboarded user from transactions to onboarding', function () {
$user = User::factory()->create([
'onboarded_at' => null,
'encryption_salt' => 'test-salt',
]);
$response = $this->actingAs($user)->get('/transactions');
$response->assertRedirect('/onboarding');
});