Skip to content

Commit 3a5738e

Browse files
authored
Merge pull request #448 from tiagojpdias/master
fix(AuditModel): cast auditable_id to integer
2 parents 88aef82 + 506dd2e commit 3a5738e

File tree

2 files changed

+49
-2
lines changed

2 files changed

+49
-2
lines changed

src/Models/Audit.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ class Audit extends Model implements \OwenIt\Auditing\Contracts\Audit
2929
* {@inheritdoc}
3030
*/
3131
protected $casts = [
32-
'old_values' => 'json',
33-
'new_values' => 'json',
32+
'old_values' => 'json',
33+
'new_values' => 'json',
34+
'auditable_id' => 'integer',
3435
];
3536
}

tests/Unit/AuditableTest.php

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
use OwenIt\Auditing\Redactors\RightRedactor;
2727
use OwenIt\Auditing\Tests\Models\Article;
2828
use OwenIt\Auditing\Tests\Models\User;
29+
use ReflectionClass;
2930

3031
class AuditableTest extends AuditingTestCase
3132
{
@@ -951,6 +952,51 @@ public function itFailsToTransitionWhenTheAuditAuditableIdDoesNotMatchTheModelId
951952
$secondModel->transitionTo($firstAudit);
952953
}
953954

955+
/**
956+
* @group Auditable::transitionTo
957+
* @test
958+
*/
959+
public function itFailsToTransitionWhenTheAuditAuditableIdTypeDoesNotMatchTheModelIdType()
960+
{
961+
$this->expectException(AuditableTransitionException::class);
962+
$this->expectExceptionMessage('Expected Auditable id 1, got 1 instead');
963+
964+
$model = factory(Article::class)->create();
965+
966+
$audit = factory(Audit::class)->create([
967+
'auditable_type' => Article::class,
968+
'auditable_id' => (string) $model->id,
969+
]);
970+
971+
// Make sure the auditable_id isn't being cast
972+
$auditReflection = new ReflectionClass($audit);
973+
974+
$auditCastsProperty = $auditReflection->getProperty('casts');
975+
$auditCastsProperty->setAccessible(true);
976+
$auditCastsProperty->setValue($audit, [
977+
'old_values' => 'json',
978+
'new_values' => 'json',
979+
]);
980+
981+
$model->transitionTo($audit);
982+
}
983+
984+
/**
985+
* @group Auditable::transitionTo
986+
* @test
987+
*/
988+
public function itTransitionsWhenTheAuditAuditableIdTypeDoesNotMatchTheModelIdType()
989+
{
990+
$model = factory(Article::class)->create();
991+
992+
$audit = factory(Audit::class)->create([
993+
'auditable_type' => Article::class,
994+
'auditable_id' => (string) $model->id,
995+
]);
996+
997+
$this->assertInstanceOf(Auditable::class, $model->transitionTo($audit));
998+
}
999+
9541000
/**
9551001
* @group Auditable::transitionTo
9561002
* @test

0 commit comments

Comments
 (0)