<?php namespace Tests\Unit; use App\TwoFAccount; use App\Events\TwoFAccountDeleted; use Tests\ModelTestCase; use Illuminate\Support\Facades\Event; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Support\Facades\Crypt; /** * @covers \App\TwoFAccount */ class TwoFAccountModelTest extends ModelTestCase { /** * @test */ public function test_model_configuration() { $this->runConfigurationAssertions( new TwoFAccount(), [], [], ['*'], [], ['id' => 'int'], ['deleted' => TwoFAccountDeleted::class], ['created_at', 'updated_at'], \Illuminate\Database\Eloquent\Collection::class, 'twofaccounts', 'id', true ); } /** * @test * * @dataProvider provideSensitiveAttributes */ public function test_sensitive_attributes_are_stored_encrypted(string $attribute) { \Facades\App\Services\SettingServiceInterface::shouldReceive('get') ->with('useEncryption') ->andReturn(true); $twofaccount = factory(TwoFAccount::class)->make([ $attribute => 'string', ]); $this->assertEquals('string', Crypt::decryptString($twofaccount->getAttributes()[$attribute])); } /** * Provide attributes to test for encryption */ public function provideSensitiveAttributes() : array { return [ [ 'legacy_uri' ], [ 'secret' ], [ 'account' ], ]; } /** * @test * * @dataProvider provideSensitiveAttributes */ public function test_sensitive_attributes_are_returned_clear(string $attribute) { \Facades\App\Services\SettingServiceInterface::shouldReceive('get') ->with('useEncryption') ->andReturn(false); $twofaccount = factory(TwoFAccount::class)->make(); $this->assertEquals($twofaccount->getAttributes()[$attribute], $twofaccount->$attribute); } /** * @test * * @dataProvider provideSensitiveAttributes */ public function test_indecipherable_attributes_returns_masked_value(string $attribute) { \Facades\App\Services\SettingServiceInterface::shouldReceive('get') ->with('useEncryption') ->andReturn(true); Crypt::shouldReceive('encryptString') ->andReturn('indecipherableString'); $twofaccount = factory(TwoFAccount::class)->make(); $this->assertEquals(__('errors.indecipherable'), $twofaccount->$attribute); } }