Skip to content

Commit d4c1624

Browse files
authored
Add test case to cover "cares" relationship for NonStaged models #55 (#64)
1 parent 4a10c31 commit d4c1624

5 files changed

Lines changed: 77 additions & 0 deletions

File tree

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
3+
namespace Terraformers\KeysForCache\Tests\Mocks\Models;
4+
5+
use SilverStripe\Dev\TestOnly;
6+
use SilverStripe\ORM\DataObject;
7+
use SilverStripe\ORM\HasManyList;
8+
use SilverStripe\Versioned\Versioned;
9+
use Terraformers\KeysForCache\Extensions\CacheKeyExtension;
10+
use Terraformers\KeysForCache\Tests\Mocks\Pages\CaresPage;
11+
12+
/**
13+
* This model is referenced by CaresPage as a has_one, meaning that this model has a has_many back to CaresPage
14+
*
15+
* @property string $Title
16+
* @method HasManyList|CaresPage CaresPages()
17+
* @mixin Versioned
18+
* @mixin CacheKeyExtension
19+
*/
20+
class CaredHasOneVersionedNonStaged extends DataObject implements TestOnly
21+
{
22+
private static array $db = [
23+
'Title' => 'Varchar',
24+
];
25+
26+
private static array $has_many = [
27+
'CaresPages' => CaresPage::class,
28+
];
29+
30+
private static array $extensions = [
31+
Versioned::class.'.versioned',
32+
];
33+
34+
private static string $table_name = 'CaredHasOneVersionedNonStaged';
35+
36+
private static bool $has_cache_key = false;
37+
}

tests/Mocks/Pages/CaresPage.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use Terraformers\KeysForCache\Tests\Mocks\Models\CaredHasMany;
1414
use Terraformers\KeysForCache\Tests\Mocks\Models\CaredHasOne;
1515
use Terraformers\KeysForCache\Tests\Mocks\Models\CaredHasOneNonVersioned;
16+
use Terraformers\KeysForCache\Tests\Mocks\Models\CaredHasOneVersionedNonStaged;
1617
use Terraformers\KeysForCache\Tests\Mocks\Models\CaredManyMany;
1718
use Terraformers\KeysForCache\Tests\Mocks\Models\PolymorphicCaredHasMany;
1819
use Terraformers\KeysForCache\Tests\Mocks\Relations\CaredThrough;
@@ -40,6 +41,7 @@ class CaresPage extends Page implements TestOnly
4041
'CaredBelongsTo' => CaredBelongsTo::class,
4142
'CaredHasOne' => CaredHasOne::class,
4243
'CaredHasOneNonVersioned' => CaredHasOneNonVersioned::class,
44+
'CaredHasOneVersionedNonStaged' => CaredHasOneVersionedNonStaged::class,
4345
'PolymorphicHasOne' => DataObject::class,
4446
];
4547

@@ -62,6 +64,7 @@ class CaresPage extends Page implements TestOnly
6264
'CaredBelongsTo',
6365
'CaredHasOne',
6466
'CaredHasOneNonVersioned',
67+
'CaredHasOneVersionedNonStaged',
6568
'CaredHasMany',
6669
'CaredManyMany',
6770
'CaredThrough',

tests/RelationshipGraph/GraphTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use Terraformers\KeysForCache\Tests\Mocks\Models\CaredHasMany;
1717
use Terraformers\KeysForCache\Tests\Mocks\Models\CaredHasOne;
1818
use Terraformers\KeysForCache\Tests\Mocks\Models\CaredHasOneNonVersioned;
19+
use Terraformers\KeysForCache\Tests\Mocks\Models\CaredHasOneVersionedNonStaged;
1920
use Terraformers\KeysForCache\Tests\Mocks\Models\CaredManyMany;
2021
use Terraformers\KeysForCache\Tests\Mocks\Models\PolymorphicCaredHasMany;
2122
use Terraformers\KeysForCache\Tests\Mocks\Models\PolymorphicTouchedHasMany;
@@ -169,6 +170,7 @@ public function testGetRelationshipConfig(): void
169170
'CaredBelongsTo' => CaredBelongsTo::class,
170171
'CaredHasOne' => CaredHasOne::class,
171172
'CaredHasOneNonVersioned' => CaredHasOneNonVersioned::class,
173+
'CaredHasOneVersionedNonStaged' => CaredHasOneVersionedNonStaged::class,
172174
'CaredHasMany' => CaredHasMany::class,
173175
'CaredManyMany' => CaredManyMany::class,
174176
'CaredThrough' => [

tests/Scenarios/CaresTest.php

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use Terraformers\KeysForCache\Tests\Mocks\Models\CaredHasMany;
1111
use Terraformers\KeysForCache\Tests\Mocks\Models\CaredHasOne;
1212
use Terraformers\KeysForCache\Tests\Mocks\Models\CaredHasOneNonVersioned;
13+
use Terraformers\KeysForCache\Tests\Mocks\Models\CaredHasOneVersionedNonStaged;
1314
use Terraformers\KeysForCache\Tests\Mocks\Models\CaredManyMany;
1415
use Terraformers\KeysForCache\Tests\Mocks\Models\PolymorphicCaredHasMany;
1516
use Terraformers\KeysForCache\Tests\Mocks\Models\PolymorphicCaredHasOne;
@@ -32,6 +33,7 @@ class CaresTest extends SapphireTest
3233
CaredHasMany::class,
3334
CaredHasOne::class,
3435
CaredHasOneNonVersioned::class,
36+
CaredHasOneVersionedNonStaged::class,
3537
CaredManyMany::class,
3638
CaredThrough::class,
3739
PolymorphicCaredHasOne::class,
@@ -150,6 +152,34 @@ public function testCaresHasOneNonVersioned(): void
150152
$this->assertNotEquals($originalKey, $newKey);
151153
}
152154

155+
public function testCaresHasOneVersionedNonStaged(): void
156+
{
157+
// Updates are processed as part of scaffold, so we need to flush before we kick off
158+
ProcessedUpdatesService::singleton()->flush();
159+
160+
$page = $this->objFromFixture(CaresPage::class, 'page1');
161+
$model = $this->objFromFixture(CaredHasOneVersionedNonStaged::class, 'model1');
162+
163+
// Check that we're set up correctly
164+
$this->assertEquals(CaredHasOneVersionedNonStaged::class, $model->ClassName);
165+
$this->assertEquals($page->CaredHasOneVersionedNonStagedID, $model->ID);
166+
167+
$originalKey = $page->getCacheKey();
168+
169+
$this->assertNotNull($originalKey);
170+
$this->assertNotEmpty($originalKey);
171+
172+
// Begin changes
173+
$model->forceChange();
174+
$model->write();
175+
176+
$newKey = $page->getCacheKey();
177+
178+
$this->assertNotNull($newKey);
179+
$this->assertNotEmpty($newKey);
180+
$this->assertNotEquals($originalKey, $newKey);
181+
}
182+
153183
public function testPolymorphicCaresHasOne(): void
154184
{
155185
// Updates are processed as part of scaffold, so we need to flush before we kick off

tests/Scenarios/CaresTest.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ Terraformers\KeysForCache\Tests\Mocks\Models\CaredHasOneNonVersioned:
1010
model1:
1111
Title: Has One Non Versioned Model 1
1212

13+
Terraformers\KeysForCache\Tests\Mocks\Models\CaredHasOneVersionedNonStaged:
14+
model1:
15+
Title: Has One Versioned Non Staged Model 1
16+
1317
Terraformers\KeysForCache\Tests\Mocks\Models\CaredHasMany:
1418
model1:
1519
Title: Has Many Model 1
@@ -36,6 +40,7 @@ Terraformers\KeysForCache\Tests\Mocks\Pages\CaresPage:
3640
CaredBelongsTo: =>Terraformers\KeysForCache\Tests\Mocks\Models\CaredBelongsTo.model1
3741
CaredHasOne: =>Terraformers\KeysForCache\Tests\Mocks\Models\CaredHasOne.model1
3842
CaredHasOneNonVersioned: =>Terraformers\KeysForCache\Tests\Mocks\Models\CaredHasOneNonVersioned.model1
43+
CaredHasOneVersionedNonStaged: =>Terraformers\KeysForCache\Tests\Mocks\Models\CaredHasOneVersionedNonStaged.model1
3944
CaredHasMany:
4045
- =>Terraformers\KeysForCache\Tests\Mocks\Models\CaredHasMany.model1
4146
CaredManyMany:

0 commit comments

Comments
 (0)