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') ); } }