-
Notifications
You must be signed in to change notification settings - Fork 6
/
EloquentAsserts.php
65 lines (51 loc) · 2.46 KB
/
EloquentAsserts.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
namespace Illuminated\Testing\Asserts;
use Illuminate\Database\Eloquent\Relations\HasMany;
trait EloquentAsserts
{
protected function assertEloquentTableEquals($class, $table)
{
$message = "Failed asserting that Eloquent table equals to `{$table}`.";
$this->assertEquals($table, (new $class)->getTable(), $message);
}
protected function assertEloquentTableNotEquals($class, $table)
{
$message = "Failed asserting that Eloquent table not equals to `{$table}`.";
$this->assertNotEquals($table, (new $class)->getTable(), $message);
}
protected function assertEloquentFillableEquals($class, array $fillable)
{
$message = 'Failed asserting that Eloquent fillable equals to specified value.';
$this->assertEquals($fillable, (new $class)->getFillable(), $message);
}
protected function assertEloquentFillableNotEquals($class, array $fillable)
{
$message = 'Failed asserting that Eloquent fillable not equals to specified value.';
$this->assertNotEquals($fillable, (new $class)->getFillable(), $message);
}
protected function assertEloquentTouchesEquals($class, array $touches)
{
$message = 'Failed asserting that Eloquent touches equals to specified value.';
$this->assertEquals($touches, (new $class)->getTouchedRelations(), $message);
}
protected function assertEloquentTouchesNotEquals($class, array $touches)
{
$message = 'Failed asserting that Eloquent touches not equals to specified value.';
$this->assertNotEquals($touches, (new $class)->getTouchedRelations(), $message);
}
protected function assertEloquentHasMany($class, $relation)
{
$this->assertMethodExists($class, $relation);
$parent = factory($class)->create();
$hasManyRelation = $parent->{$relation}();
$this->assertInstanceOf(HasMany::class, $hasManyRelation);
$parentKey = $parent->getKeyName();
$childModel = $hasManyRelation->getRelated();
$childKey = $childModel->getKeyName();
/* @laravel-versions */
$childForeignKey = method_exists($hasManyRelation, 'getForeignKeyName')
? $hasManyRelation->getForeignKeyName() : last(explode('.', $hasManyRelation->getForeignKey()));
$children = factory(get_class($childModel), 3)->create([$childForeignKey => $parent->{$parentKey}]);
$this->assertCollectionsEqual($children, $parent->{$relation}, $childKey);
}
}