Skip to content

Commit 247cc74

Browse files
authored
Merge pull request #980 from creative-commoners/pulls/8/test-generated-columns
MNT Add tests for generated columns
2 parents 90b08f5 + 5fc3197 commit 247cc74

File tree

2 files changed

+72
-0
lines changed

2 files changed

+72
-0
lines changed

tests/php/Extension/FluentExtensionTest.php

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
use TractorCow\Fluent\Tests\Extension\FluentExtensionTest\UnlocalisedChild;
2121
use TractorCow\Fluent\Tests\Extension\Stub\FluentStubObject;
2222
use PHPUnit\Framework\Attributes\DataProvider;
23+
use TractorCow\Fluent\Tests\Extension\FluentExtensionTest\TestGeneratedColumns;
2324

2425
class FluentExtensionTest extends SapphireTest
2526
{
@@ -33,6 +34,7 @@ class FluentExtensionTest extends SapphireTest
3334
UnlocalisedChild::class,
3435
TestRelationPage::class,
3536
TestModel::class,
37+
TestGeneratedColumns::class,
3638
];
3739

3840
protected static $required_extensions = [
@@ -510,6 +512,45 @@ public static function sortRecordProvider()
510512
];
511513
}
512514

515+
public function testLocalisedGeneratedColumns(): void
516+
{
517+
// Setup first localisation
518+
$recordID = FluentState::singleton()->withState(function (FluentState $state): int {
519+
$state->setLocale('en_US');
520+
521+
$record = new TestGeneratedColumns();
522+
$record->BaseField = 'EN copy test';
523+
return $record->write();
524+
});
525+
526+
// Setup second localisation and make sure we have two localisations to work with
527+
FluentState::singleton()->withState(function (FluentState $state) use ($recordID): void {
528+
$state->setLocale('de_DE');
529+
530+
$record = TestGeneratedColumns::get()->byID($recordID);
531+
$record->BaseField = 'DE copy test';
532+
$record->write();
533+
});
534+
535+
// Check the values of the generated columns in en_US
536+
FluentState::singleton()->withState(function (FluentState $state) use ($recordID): void {
537+
$state->setLocale('en_US');
538+
539+
$record = TestGeneratedColumns::get()->byID($recordID);
540+
$this->assertSame('EN copy test_virtual', $record->GeneratedField1);
541+
$this->assertSame('EN copy test_stored', $record->GeneratedField2);
542+
});
543+
544+
// Check the values of the generated columns in de_DE
545+
FluentState::singleton()->withState(function (FluentState $state) use ($recordID): void {
546+
$state->setLocale('de_DE');
547+
548+
$record = TestGeneratedColumns::get()->byID($recordID);
549+
$this->assertSame('DE copy test_virtual', $record->GeneratedField1);
550+
$this->assertSame('DE copy test_stored', $record->GeneratedField2);
551+
});
552+
}
553+
513554
/**
514555
* Get a Locale field value directly from a record's localised database table, skipping the ORM
515556
*
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
namespace TractorCow\Fluent\Tests\Extension\FluentExtensionTest;
4+
5+
use SilverStripe\Dev\TestOnly;
6+
use SilverStripe\ORM\DataObject;
7+
use TractorCow\Fluent\Extension\FluentExtension;
8+
9+
/**
10+
* @mixin FluentExtension
11+
*/
12+
class TestGeneratedColumns extends DataObject implements TestOnly
13+
{
14+
private static string $table_name = 'FluentExtensionTest_TestGeneratedColumns';
15+
16+
private static array $db = [
17+
'BaseField' => 'Varchar(255)',
18+
'GeneratedField1' => 'Generated("Varchar(255)", "CONCAT(\\"BaseField\\", \'_virtual\')", "VIRTUAL")',
19+
'GeneratedField2' => 'Generated("Varchar(255)", "CONCAT(\\"BaseField\\", \'_stored\')", "STORED")',
20+
];
21+
22+
private static array $extensions = [
23+
FluentExtension::class,
24+
];
25+
26+
private static $translate = [
27+
'BaseField',
28+
'GeneratedField1',
29+
'GeneratedField2',
30+
];
31+
}

0 commit comments

Comments
 (0)