Skip to content

Commit 23011ad

Browse files
committed
Add a test factories and relationships
1 parent 4157baa commit 23011ad

File tree

7 files changed

+103
-0
lines changed

7 files changed

+103
-0
lines changed

tests/Fixtures/Author.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,14 @@ public function profile() : HasOne
2929
return $this->hasOne(Profile::class);
3030
}
3131

32+
public function getLatestBookAttribute()
33+
{
34+
return $this
35+
->books()
36+
->latest("id")
37+
->first();
38+
}
39+
3240
public function scopeStartsWithA(Builder $query) : Builder
3341
{
3442
return $query->where('name', 'LIKE', 'A%');

tests/Fixtures/UncachedAuthor.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
use Illuminate\Database\Eloquent\Model;
55
use Illuminate\Database\Eloquent\Relations\HasMany;
66
use Illuminate\Database\Eloquent\Relations\HasOne;
7+
use GeneaLabs\LaravelModelCaching\CachedBuilder;
78

89
class UncachedAuthor extends Model
910
{
@@ -22,6 +23,14 @@ public function books() : HasMany
2223
return $this->hasMany(UncachedBook::class, 'author_id', 'id');
2324
}
2425

26+
public function getLatestBookAttribute()
27+
{
28+
return $this
29+
->books()
30+
->latest("id")
31+
->first();
32+
}
33+
2534
public function profile() : HasOne
2635
{
2736
return $this->hasOne(UncachedProfile::class, 'author_id', 'id');
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php namespace GeneaLabs\LaravelModelCaching\Tests\Integration;
2+
3+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Author;
4+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Book;
5+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Observers\AuthorObserver;
6+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\PrefixedAuthor;
7+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Profile;
8+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Publisher;
9+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Store;
10+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedAuthor;
11+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedBook;
12+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedProfile;
13+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedPublisher;
14+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedStore;
15+
use GeneaLabs\LaravelModelCaching\Tests\IntegrationTestCase;
16+
use Illuminate\Foundation\Testing\RefreshDatabase;
17+
18+
class ModelFactoryTest extends IntegrationTestCase
19+
{
20+
public function testAllModelResultsCreatesCache()
21+
{
22+
$author = factory(Author::class)->create();
23+
$assignedBookIds = [];
24+
$numberOfBooks = 5;
25+
26+
foreach (range(1, $numberOfBooks) as $i) {
27+
$book = factory(Book::class)
28+
->make()
29+
->author()->associate($author)
30+
->save();
31+
$author->load("books");
32+
dump(count($author->books));
33+
34+
$assignedBookIds[] = $author
35+
->latestBook
36+
->id;
37+
38+
dump($assignedBookIds);
39+
}
40+
41+
$this->assertEquals($numberOfBooks, count($assignedBookIds));
42+
}
43+
}

tests/database/factories/BookFactory.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22

33
use Faker\Generator as Faker;
44
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Book;
5+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Publisher;
56

67
$factory->define(Book::class, function (Faker $faker) {
78
return [
89
'title' => $faker->title,
910
'description' => $faker->optional()->paragraphs(3, true),
1011
'published_at' => $faker->dateTime,
1112
'price' => $faker->randomFloat(2, 0, 999999),
13+
"publisher_id" => factory(Publisher::class)->create()->id,
1214
];
1315
});
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?php
2+
3+
use Faker\Generator as Faker;
4+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedAuthor;
5+
6+
$factory->define(UncachedAuthor::class, function (Faker $faker) {
7+
return [
8+
'name' => $faker->name,
9+
'email' => $faker->unique()->safeEmail,
10+
"finances" => [
11+
"total" => 5000,
12+
"weekly" => 100,
13+
"daily" => 20,
14+
],
15+
];
16+
});
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
use Faker\Generator as Faker;
4+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedBook;
5+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedPublisher;
6+
7+
$factory->define(UncachedBook::class, function (Faker $faker) {
8+
return [
9+
'title' => $faker->title,
10+
'description' => $faker->optional()->paragraphs(3, true),
11+
'published_at' => $faker->dateTime,
12+
'price' => $faker->randomFloat(2, 0, 999999),
13+
"publisher_id" => factory(UncachedPublisher::class)->create()->id,
14+
];
15+
});
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
3+
use Faker\Generator as Faker;
4+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedPublisher;
5+
6+
$factory->define(UncachedPublisher::class, function (Faker $faker) {
7+
return [
8+
'name' => $faker->name,
9+
];
10+
});

0 commit comments

Comments
 (0)