Skip to content

Commit 2ff27e1

Browse files
committed
Update tests to include dynamic global scopes.
1 parent d5c930a commit 2ff27e1

File tree

4 files changed

+40
-7
lines changed

4 files changed

+40
-7
lines changed

tests/Fixtures/AuthorBeginsWithA.php renamed to tests/Fixtures/AuthorBeginsWithScoped.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
99
use Illuminate\Database\Eloquent\Relations\HasOne;
1010

11-
class AuthorBeginsWithA extends Model
11+
class AuthorBeginsWithScoped extends Model
1212
{
1313
use Cachable;
1414

tests/Fixtures/Scopes/NameBeginsWith.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@
33
use Illuminate\Database\Eloquent\Scope;
44
use Illuminate\Database\Eloquent\Model;
55
use Illuminate\Database\Eloquent\Builder;
6+
use Illuminate\Support\Str;
67

78
class NameBeginsWith implements Scope
89
{
910
public function apply(Builder $builder, Model $model)
1011
{
11-
$builder->where('name', 'LIKE', "A%");
12+
$letter = (new Str)->substr(auth()->user()->name, 0, 1);
13+
$builder->where('name', 'LIKE', "{$letter}%");
1214
}
1315
}

tests/Fixtures/User.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
<?php namespace GeneaLabs\LaravelModelCaching\Tests\Fixtures;
22

33
use GeneaLabs\LaravelModelCaching\Traits\Cachable;
4+
use Illuminate\Foundation\Auth\User as Authenticatable;
45
use Illuminate\Database\Eloquent\Model;
56
use Illuminate\Database\Eloquent\Relations\BelongsTo;
67
use Illuminate\Database\Eloquent\Relations\MorphOne;
78
use Illuminate\Database\Eloquent\SoftDeletes;
89

9-
class User extends Model
10+
class User extends Authenticatable
1011
{
1112
use Cachable;
1213

tests/Integration/CachedBuilder/ScopeTest.php

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Author;
44
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedAuthor;
55
use GeneaLabs\LaravelModelCaching\Tests\IntegrationTestCase;
6-
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\AuthorBeginsWithA;
6+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\AuthorBeginsWithScoped;
77
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\AuthorWithInlineGlobalScope;
88
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedAuthorWithInlineGlobalScope;
9+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\User;
910
use Illuminate\Database\Eloquent\Relations\HasMany;
11+
use Illuminate\Support\Str;
1012

1113
class ScopeTest extends IntegrationTestCase
1214
{
@@ -58,13 +60,15 @@ public function testScopeClauseWithParameter()
5860

5961
public function testGlobalScopesAreCached()
6062
{
63+
$user = factory(User::class)->create(["name" => "Abernathy Kings"]);
64+
$this->actingAs($user);
6165
$author = factory(UncachedAuthor::class, 1)
6266
->create(['name' => 'Alois'])
6367
->first();
64-
$authors = (new AuthorBeginsWithA)
68+
$authors = (new AuthorBeginsWithScoped)
6569
->get();
66-
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:authors:genealabslaravelmodelcachingtestsfixturesauthorbeginswitha-name_like_A%");
67-
$tags = ["genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixturesauthorbeginswitha"];
70+
$key = sha1("genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:authors:genealabslaravelmodelcachingtestsfixturesauthorbeginswithscoped-name_like_A%");
71+
$tags = ["genealabs:laravel-model-caching:testing:{$this->testingSqlitePath}testing.sqlite:genealabslaravelmodelcachingtestsfixturesauthorbeginswithscoped"];
6872

6973
$cachedResults = $this->cache()
7074
->tags($tags)
@@ -99,6 +103,32 @@ public function testInlineGlobalScopesAreCached()
99103
$this->assertTrue($liveResults->contains($author));
100104
}
101105

106+
public function testGlobalScopesWhenSwitchingContext()
107+
{
108+
factory(Author::class, 200)->create();
109+
$user = factory(User::class)->create(["name" => "Anton Junior"]);
110+
$this->actingAs($user);
111+
$authorsA = (new AuthorBeginsWithScoped)
112+
->get()
113+
->map(function ($author) {
114+
return (new Str)->substr($author->name, 0, 1);
115+
})
116+
->unique();
117+
$user = factory(User::class)->create(["name" => "Burli Burli Burli"]);
118+
$this->actingAs($user);
119+
$authorsB = (new AuthorBeginsWithScoped)
120+
->get()
121+
->map(function ($author) {
122+
return (new Str)->substr($author->name, 0, 1);
123+
})
124+
->unique();
125+
126+
$this->assertCount(1, $authorsA);
127+
$this->assertCount(1, $authorsB);
128+
$this->assertEquals("A", $authorsA->first());
129+
$this->assertEquals("B", $authorsB->first());
130+
}
131+
102132
public function testLocalScopesInRelationship()
103133
{
104134
$first = "A";

0 commit comments

Comments
 (0)