withoutVite(); config(['portal.profile_access_enabled' => false]); $actor = User::factory()->create(); $totp = new Google2FA; $secret = $totp->generateSecretKey(); $actor->forceFill(['two_factor_secret' => Crypt::encrypt($secret), 'two_factor_confirmed_at' => now()])->save(); $this->post('/login', ['email' => $actor->email, 'password' => 'password'])->assertRedirect('/two-factor-challenge'); $this->assertGuest(); $this->assertFalse(app(PortalProfileAccess::class)->mfa($actor)); $this->post('/two-factor-challenge', ['code' => 'not-a-code'])->assertSessionHasErrors('code'); $this->assertGuest(); $this->assertFalse(app(PortalProfileAccess::class)->mfa($actor)); $this->post('/two-factor-challenge', ['code' => $totp->getCurrentOtp($secret)])->assertRedirect(); $this->assertAuthenticatedAs($actor); $this->assertTrue(app(PortalProfileAccess::class)->mfa($actor)); $this->post('/logout')->assertRedirect('/'); $this->assertGuest(); $this->assertFalse(app(PortalProfileAccess::class)->mfa($actor)); } }