68 lines
2.1 KiB
PHP
68 lines
2.1 KiB
PHP
<?php namespace RainLab\Translate\Tests\Unit\Behaviors;
|
|
|
|
use File;
|
|
use PluginTestCase;
|
|
use October\Rain\Halcyon\Model;
|
|
use October\Rain\Filesystem\Filesystem;
|
|
use October\Rain\Halcyon\Datasource\FileDatasource;
|
|
use October\Rain\Halcyon\Datasource\Resolver;
|
|
use RainLab\Translate\Tests\Fixtures\Classes\TranslatablePage;
|
|
|
|
class TranslatablePageTest extends PluginTestCase
|
|
{
|
|
public $themePath;
|
|
|
|
public function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
|
|
$this->themePath = __DIR__ . '/../../fixtures/themes/test';
|
|
|
|
$datasource = new FileDatasource($this->themePath, new Filesystem);
|
|
$resolver = new Resolver(['theme1' => $datasource]);
|
|
$resolver->setDefaultDatasource('theme1');
|
|
Model::setDatasourceResolver($resolver);
|
|
|
|
TranslatablePage::extend(function($page) {
|
|
if (!$page->isClassExtendedWith('RainLab\Translate\Behaviors\TranslatablePage')) {
|
|
$page->addDynamicProperty('translatable', ['title']);
|
|
$page->extendClassWith('RainLab\Translate\Behaviors\TranslatablePage');
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
public function tearDown(): void
|
|
{
|
|
File::deleteDirectory($this->themePath.'/pages');
|
|
}
|
|
|
|
public function testUseFallback()
|
|
{
|
|
$page = TranslatablePage::create([
|
|
'fileName' => 'translatable',
|
|
'title' => 'english title',
|
|
'url' => '/test',
|
|
]);
|
|
$page->translateContext('fr');
|
|
$this->assertEquals('english title', $page->title);
|
|
$page->noFallbackLocale()->translateContext('fr');
|
|
$this->assertEquals(null, $page->title);
|
|
}
|
|
|
|
public function testAlternateLocale()
|
|
{
|
|
$page = TranslatablePage::create([
|
|
'fileName' => 'translatable',
|
|
'title' => 'english title',
|
|
'url' => '/test',
|
|
]);
|
|
$page->setAttributeTranslated('title', 'titre francais', 'fr');
|
|
$title_en = $page->title;
|
|
$this->assertEquals('english title', $title_en);
|
|
$page->translateContext('fr');
|
|
$title_fr = $page->title;
|
|
$this->assertEquals('titre francais', $title_fr);
|
|
}
|
|
}
|