. */ declare(strict_types=1); namespace App\Tests\Services\UserSystem\TFA; use App\Entity\UserSystem\User; use App\Services\UserSystem\TFA\BackupCodeManager; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; class BackupCodeManagerTest extends WebTestCase { /** * @var BackupCodeManager */ protected $service; protected function setUp(): void { self::bootKernel(); $this->service = self::getContainer()->get(BackupCodeManager::class); } public function testRegenerateBackupCodes(): void { $user = new User(); $old_codes = ['aaaa', 'bbbb']; $user->setBackupCodes($old_codes); $this->service->regenerateBackupCodes($user); $this->assertNotSame($old_codes, $user->getBackupCodes()); } public function testEnableBackupCodes(): void { $user = new User(); //Check that nothing is changed, if there are already backup codes $old_codes = ['aaaa', 'bbbb']; $user->setBackupCodes($old_codes); $this->service->enableBackupCodes($user); $this->assertSame($old_codes, $user->getBackupCodes()); //When no old codes are existing, it should generate a set $user->setBackupCodes([]); $this->service->enableBackupCodes($user); $this->assertNotEmpty($user->getBackupCodes()); } public function testDisableBackupCodesIfUnused(): void { $user = new User(); //By default, nothing other 2FA is activated, so the backup codes should be disabled $codes = ['aaaa', 'bbbb']; $user->setBackupCodes($codes); $this->service->disableBackupCodesIfUnused($user); $this->assertEmpty($user->getBackupCodes()); $user->setBackupCodes($codes); $user->setGoogleAuthenticatorSecret('jskf'); $this->service->disableBackupCodesIfUnused($user); $this->assertSame($codes, $user->getBackupCodes()); } }