ciphersweet-for-laravel/tests/Unit/EncryptionTest.php

109 lines
2.8 KiB
PHP

<?php
namespace Tests\Unit;
use BjornVoesten\CipherSweet\Contracts\Attribute;
use BjornVoesten\CipherSweet\Contracts\Index;
use Tests\Concerns\CreatesUsers;
use Tests\Concerns\CreateUsersTable;
use Tests\Mocks\User;
use Tests\TestCase;
class EncryptionTest extends TestCase
{
use CreateUsersTable;
use CreatesUsers;
protected function setUp(): void
{
parent::setUp();
$this->createUsersTable();
}
public function testAttributesAreEncryptedWhenMade(): void
{
$user = new User([
'social_security_number' => '123-456-789',
]);
$this->assertSame(
'123-456-789',
$user->social_security_number
);
$this->assertNotEmpty(
$user->social_security_number_index
);
}
public function testAttributesAreEncryptedWhenCreated(): void
{
$user = $this->user('123-456-789');
$this->assertNotSame(
'123-456-789',
$user->getRawOriginal('social_security_number')
);
$this->assertNotEmpty(
$user->social_security_number_index
);
$this->assertDatabaseHasFor(User::class, [
'social_security_number' => $user->getRawOriginal('social_security_number'),
]);
$this->assertDatabaseMissingFor(User::class, [
'social_security_number' => $user->getAttribute('social_security_number'),
]);
}
public function testAttributesAreEncryptedWithCustomIndexes(): void
{
$user = new class extends User {
public function encryptSocialSecurityNumberAttribute(Attribute $attribute): void
{
$attribute->index('custom_index', function (Index $index) {
$index
->bits(32)
->fast();
});
}
};
$user
->fill([
'social_security_number' => '123-456-789',
])
->save();
$this->assertNotSame(
'123-456-789',
$user->getRawOriginal('social_security_number')
);
$this->assertNotEmpty(
$user->getAttribute('custom_index')
);
$this->assertDatabaseHasFor(User::class, [
'social_security_number' => $user->getRawOriginal('social_security_number'),
]);
$this->assertDatabaseMissingFor(User::class, [
'social_security_number' => $user->getAttribute('social_security_number'),
]);
}
public function testAttributesAreDecryptedWhenAccessed(): void
{
$user = $this->user('123-456-789');
$this->assertSame(
'123-456-789',
$user->getAttribute('social_security_number')
);
}
}