Skip to content

Commit ee03f1d

Browse files
committed
Add tests for polumorphic one-to-one relationship.
1 parent 7a36e05 commit ee03f1d

File tree

5 files changed

+112
-0
lines changed

5 files changed

+112
-0
lines changed

tests/Fixtures/UncachedImage.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php namespace GeneaLabs\LaravelModelCaching\Tests\Fixtures;
2+
3+
use Illuminate\Database\Eloquent\Model;
4+
use Illuminate\Database\Eloquent\Relations\MorphTo;
5+
6+
class UncachedImage extends Model
7+
{
8+
protected $fillable = [
9+
'path',
10+
];
11+
protected $table = "images";
12+
13+
public function imagable() : MorphTo
14+
{
15+
return $this->morphTo();
16+
}
17+
}

tests/Fixtures/UncachedUser.php

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

33
use Illuminate\Database\Eloquent\Model;
44
use Illuminate\Database\Eloquent\Relations\BelongsTo;
5+
use Illuminate\Database\Eloquent\Relations\MorphOne;
56

67
class UncachedUser extends Model
78
{
@@ -15,4 +16,9 @@ public function supplier() : BelongsTo
1516
{
1617
return $this->belongsTo(UncachedSupplier::class, "supplier_id");
1718
}
19+
20+
public function image() : MorphOne
21+
{
22+
return $this->morphOne(UncachedImage::class, "imagable");
23+
}
1824
}

tests/Fixtures/User.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
use GeneaLabs\LaravelModelCaching\Traits\Cachable;
44
use Illuminate\Database\Eloquent\Model;
55
use Illuminate\Database\Eloquent\Relations\BelongsTo;
6+
use Illuminate\Database\Eloquent\Relations\MorphOne;
67
use Illuminate\Database\Eloquent\SoftDeletes;
78

89
class User extends Model
@@ -18,4 +19,9 @@ public function supplier() : BelongsTo
1819
{
1920
return $this->belongsTo(Supplier::class);
2021
}
22+
23+
public function image() : MorphOne
24+
{
25+
return $this->morphOne(Image::class, "imagable");
26+
}
2127
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
<?php namespace GeneaLabs\LaravelModelCaching\Tests\Integration\CachedBuilder;
2+
3+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Author;
4+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Supplier;
5+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedAuthor;
6+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedSupplier;
7+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedUser;
8+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\User;
9+
use GeneaLabs\LaravelModelCaching\Tests\IntegrationTestCase;
10+
11+
class PolymorphicOneToOneTest extends IntegrationTestCase
12+
{
13+
public function testEagerloadedRelationship()
14+
{
15+
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:images:genealabslaravelmodelcachingtestsfixturesimage-images.imagable_id_inraw_2-images.imagable_type_=_GeneaLabs\LaravelModelCaching\Tests\Fixtures\User");
16+
$tags = [
17+
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixturesimage",
18+
];
19+
20+
$result = (new User)
21+
->with("image")
22+
->whereHas("image")
23+
->first()
24+
->image;
25+
$cachedResults = $this->cache()
26+
->tags($tags)
27+
->get($key)['value']
28+
->first();
29+
$liveResults = (new UncachedUser)
30+
->with("image")
31+
->whereHas("image")
32+
->first()
33+
->image;
34+
35+
$this->assertEquals($liveResults->path, $result->path);
36+
$this->assertEquals($liveResults->path, $cachedResults->path);
37+
$this->assertNotEmpty($result);
38+
$this->assertNotEmpty($cachedResults);
39+
$this->assertNotEmpty($liveResults);
40+
}
41+
42+
/** @group test */
43+
public function testLazyloadedHasOneThrough()
44+
{
45+
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:images:genealabslaravelmodelcachingtestsfixturesimage-images.imagable_id_=_2-images.imagable_id_notnull-images.imagable_type_=_GeneaLabs\LaravelModelCaching\Tests\Fixtures\User-limit_1");
46+
$tags = [
47+
"genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixturesimage",
48+
];
49+
50+
$result = (new User)
51+
->whereHas("image")
52+
->first()
53+
->image;
54+
$cachedResults = $this->cache()
55+
->tags($tags)
56+
->get($key)['value']
57+
->first();
58+
$liveResults = (new UncachedUser)
59+
->whereHas("image")
60+
->first()
61+
->image;
62+
63+
$this->assertEquals($liveResults->path, $result->path);
64+
$this->assertEquals($liveResults->path, $cachedResults->path);
65+
$this->assertNotEmpty($result);
66+
$this->assertNotEmpty($cachedResults);
67+
$this->assertNotEmpty($liveResults);
68+
}
69+
}

tests/database/seeds/DatabaseSeeder.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,32 @@
33
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Author;
44
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Book;
55
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\History;
6+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Image;
67
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Observers\AuthorObserver;
78
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Printer;
89
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Profile;
910
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Publisher;
1011
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Store;
12+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedImage;
13+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedUser;
14+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\User;
1115
use Illuminate\Database\Seeder;
1216

1317
class DatabaseSeeder extends Seeder
1418
{
1519
public function run()
1620
{
1721
factory(History::class)->create();
22+
$user = factory(User::class)->create();
23+
$image = factory(Image::class)->create([
24+
"imagable_id" => $user->id,
25+
"imagable_type" => User::class,
26+
]);
27+
factory(Image::class)->create([
28+
"imagable_id" => $user->id,
29+
"imagable_type" => UncachedUser::class,
30+
"path" => $image->path,
31+
]);
1832
$publishers = factory(Publisher::class, 10)->create();
1933
(new Author)->observe(AuthorObserver::class);
2034
factory(Author::class, 10)->create()

0 commit comments

Comments
 (0)