mirror of
https://github.com/Einundzwanzig-Podcast/einundzwanzig-portal.git
synced 2025-12-11 06:46:47 +00:00
huge Laravel 10 upgrade
This commit is contained in:
375
support/laravel-translation/tests/DatabaseDriverTest.php
Normal file
375
support/laravel-translation/tests/DatabaseDriverTest.php
Normal file
@@ -0,0 +1,375 @@
|
||||
<?php
|
||||
|
||||
namespace JoeDixon\Translation\Tests;
|
||||
|
||||
use Illuminate\Foundation\Testing\DatabaseMigrations;
|
||||
use Illuminate\Support\Facades\Event;
|
||||
use JoeDixon\Translation\Drivers\Translation;
|
||||
use JoeDixon\Translation\Events\TranslationAdded;
|
||||
use JoeDixon\Translation\Exceptions\LanguageExistsException;
|
||||
use JoeDixon\Translation\Language;
|
||||
use JoeDixon\Translation\Translation as TranslationModel;
|
||||
use JoeDixon\Translation\TranslationBindingsServiceProvider;
|
||||
use JoeDixon\Translation\TranslationServiceProvider;
|
||||
use Orchestra\Testbench\TestCase;
|
||||
|
||||
class DatabaseDriverTest extends TestCase
|
||||
{
|
||||
use DatabaseMigrations;
|
||||
|
||||
private $translation;
|
||||
|
||||
/**
|
||||
* Setup the test environment.
|
||||
*/
|
||||
public function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
$this->withFactories(__DIR__.'/../database/factories');
|
||||
$this->translation = $this->app[Translation::class];
|
||||
}
|
||||
|
||||
protected function getEnvironmentSetUp($app)
|
||||
{
|
||||
$app['config']->set('translation.driver', 'database');
|
||||
$app['config']->set('database.default', 'testing');
|
||||
$app['config']->set('database.connections.testing', [
|
||||
'driver' => 'sqlite',
|
||||
'database' => ':memory:',
|
||||
]);
|
||||
}
|
||||
|
||||
protected function getPackageProviders($app)
|
||||
{
|
||||
return [
|
||||
TranslationServiceProvider::class,
|
||||
TranslationBindingsServiceProvider::class,
|
||||
];
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function it_returns_all_languages()
|
||||
{
|
||||
$newLanguages = factory(Language::class, 2)->create();
|
||||
$newLanguages = $newLanguages->mapWithKeys(function ($language) {
|
||||
return [$language->language => $language->name];
|
||||
})->toArray();
|
||||
$languages = $this->translation->allLanguages();
|
||||
|
||||
$this->assertEquals($languages->count(), 3);
|
||||
$this->assertEquals($languages->toArray(), ['en' => 'en'] + $newLanguages);
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function it_returns_all_translations()
|
||||
{
|
||||
$default = Language::where('language', config('app.locale'))->first();
|
||||
factory(Language::class)->create(['language' => 'es', 'name' => 'Español']);
|
||||
factory(TranslationModel::class)->states('group')->create(['language_id' => $default->id, 'group' => 'test', 'key' => 'hello', 'value' => 'Hello']);
|
||||
factory(TranslationModel::class)->states('group')->create(['language_id' => $default->id, 'group' => 'test', 'key' => 'whats_up', 'value' => "What's up!"]);
|
||||
factory(TranslationModel::class)->states('single')->create(['language_id' => $default->id, 'group' => 'single', 'key' => 'Hello', 'value' => 'Hello']);
|
||||
factory(TranslationModel::class)->states('single')->create(['language_id' => $default->id, 'group' => 'single', 'key' => "What's up", 'value' => "What's up!"]);
|
||||
|
||||
$translations = $this->translation->allTranslations();
|
||||
|
||||
$this->assertEquals($translations->count(), 2);
|
||||
$this->assertEquals(['single' => ['single' => ['Hello' => 'Hello', "What's up" => "What's up!"]], 'group' => ['test' => ['hello' => 'Hello', 'whats_up' => "What's up!"]]], $translations->toArray()['en']);
|
||||
$this->assertArrayHasKey('en', $translations->toArray());
|
||||
$this->assertArrayHasKey('es', $translations->toArray());
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function it_returns_all_translations_for_a_given_language()
|
||||
{
|
||||
$default = Language::where('language', config('app.locale'))->first();
|
||||
factory(TranslationModel::class)->states('group')->create(['language_id' => $default->id, 'group' => 'test', 'key' => 'hello', 'value' => 'Hello']);
|
||||
factory(TranslationModel::class)->states('group')->create(['language_id' => $default->id, 'group' => 'test', 'key' => 'whats_up', 'value' => "What's up!"]);
|
||||
factory(TranslationModel::class)->states('single')->create(['language_id' => $default->id, 'group' => 'single', 'key' => 'Hello', 'value' => 'Hello']);
|
||||
factory(TranslationModel::class)->states('single')->create(['language_id' => $default->id, 'group' => 'single', 'key' => "What's up", 'value' => "What's up!"]);
|
||||
|
||||
$translations = $this->translation->allTranslationsFor('en');
|
||||
$this->assertEquals($translations->count(), 2);
|
||||
$this->assertEquals(['single' => ['single' => ['Hello' => 'Hello', "What's up" => "What's up!"]], 'group' => ['test' => ['hello' => 'Hello', 'whats_up' => "What's up!"]]], $translations->toArray());
|
||||
$this->assertArrayHasKey('single', $translations->toArray());
|
||||
$this->assertArrayHasKey('group', $translations->toArray());
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function it_throws_an_exception_if_a_language_exists()
|
||||
{
|
||||
$this->expectException(LanguageExistsException::class);
|
||||
$this->translation->addLanguage('en');
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function it_can_add_a_new_language()
|
||||
{
|
||||
$this->assertDatabaseMissing(config('translation.database.languages_table'), [
|
||||
'language' => 'fr',
|
||||
'name' => 'Français',
|
||||
]);
|
||||
|
||||
$this->translation->addLanguage('fr', 'Français');
|
||||
$this->assertDatabaseHas(config('translation.database.languages_table'), [
|
||||
'language' => 'fr',
|
||||
'name' => 'Français',
|
||||
]);
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function it_can_add_a_new_translation_to_a_new_group()
|
||||
{
|
||||
$this->translation->addGroupTranslation('es', 'test', 'hello', 'Hola!');
|
||||
|
||||
$translations = $this->translation->allTranslationsFor('es');
|
||||
|
||||
$this->assertEquals(['test' => ['hello' => 'Hola!']], $translations->toArray()['group']);
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function it_can_add_a_new_translation_to_an_existing_translation_group()
|
||||
{
|
||||
$translation = factory(TranslationModel::class)->create();
|
||||
|
||||
$this->translation->addGroupTranslation($translation->language->language, "{$translation->group}", 'test', 'Testing');
|
||||
|
||||
$translations = $this->translation->allTranslationsFor($translation->language->language);
|
||||
$this->assertSame([$translation->group => [$translation->key => $translation->value, 'test' => 'Testing']], $translations->toArray()['group']);
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function it_can_add_a_new_single_translation()
|
||||
{
|
||||
$this->translation->addSingleTranslation('es', 'single', 'Hello', 'Hola!');
|
||||
|
||||
$translations = $this->translation->allTranslationsFor('es');
|
||||
|
||||
$this->assertEquals(['single' => ['Hello' => 'Hola!']], $translations->toArray()['single']);
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function it_can_add_a_new_single_translation_to_an_existing_language()
|
||||
{
|
||||
$translation = factory(TranslationModel::class)->states('single')->create();
|
||||
|
||||
$this->translation->addSingleTranslation($translation->language->language, 'single', 'Test', 'Testing');
|
||||
|
||||
$translations = $this->translation->allTranslationsFor($translation->language->language);
|
||||
|
||||
$this->assertEquals(['single' => ['Test' => 'Testing', $translation->key => $translation->value]], $translations->toArray()['single']);
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function it_can_get_a_collection_of_group_names_for_a_given_language()
|
||||
{
|
||||
$language = factory(Language::class)->create(['language' => 'en']);
|
||||
factory(TranslationModel::class)->create([
|
||||
'language_id' => $language->id,
|
||||
'group' => 'test',
|
||||
]);
|
||||
|
||||
$groups = $this->translation->getGroupsFor('en');
|
||||
|
||||
$this->assertEquals($groups->toArray(), ['test']);
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function it_can_merge_a_language_with_the_base_language()
|
||||
{
|
||||
$default = Language::where('language', config('app.locale'))->first();
|
||||
factory(TranslationModel::class)->states('group')->create(['language_id' => $default->id, 'group' => 'test', 'key' => 'hello', 'value' => 'Hello']);
|
||||
factory(TranslationModel::class)->states('group')->create(['language_id' => $default->id, 'group' => 'test', 'key' => 'whats_up', 'value' => "What's up!"]);
|
||||
factory(TranslationModel::class)->states('single')->create(['language_id' => $default->id, 'group' => 'single', 'key' => 'Hello', 'value' => 'Hello']);
|
||||
factory(TranslationModel::class)->states('single')->create(['language_id' => $default->id, 'group' => 'single', 'key' => "What's up", 'value' => "What's up!"]);
|
||||
|
||||
$this->translation->addGroupTranslation('es', 'test', 'hello', 'Hola!');
|
||||
$translations = $this->translation->getSourceLanguageTranslationsWith('es');
|
||||
|
||||
$this->assertEquals($translations->toArray(), [
|
||||
'group' => [
|
||||
'test' => [
|
||||
'hello' => ['en' => 'Hello', 'es' => 'Hola!'],
|
||||
'whats_up' => ['en' => "What's up!", 'es' => ''],
|
||||
],
|
||||
],
|
||||
'single' => [
|
||||
'single' => [
|
||||
'Hello' => [
|
||||
'en' => 'Hello',
|
||||
'es' => '',
|
||||
],
|
||||
"What's up" => [
|
||||
'en' => "What's up!",
|
||||
'es' => '',
|
||||
],
|
||||
],
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function it_can_add_a_vendor_namespaced_translations()
|
||||
{
|
||||
$this->translation->addGroupTranslation('es', 'translation_test::test', 'hello', 'Hola!');
|
||||
|
||||
$this->assertEquals($this->translation->allTranslationsFor('es')->toArray(), [
|
||||
'group' => [
|
||||
'translation_test::test' => [
|
||||
'hello' => 'Hola!',
|
||||
],
|
||||
],
|
||||
'single' => [],
|
||||
]);
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function it_can_add_a_nested_translation()
|
||||
{
|
||||
$this->translation->addGroupTranslation('en', 'test', 'test.nested', 'Nested!');
|
||||
|
||||
$this->assertEquals($this->translation->getGroupTranslationsFor('en')->toArray(), [
|
||||
'test' => [
|
||||
'test.nested' => 'Nested!',
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function it_can_add_nested_vendor_namespaced_translations()
|
||||
{
|
||||
$this->translation->addGroupTranslation('es', 'translation_test::test', 'nested.hello', 'Hola!');
|
||||
|
||||
$this->assertEquals($this->translation->allTranslationsFor('es')->toArray(), [
|
||||
'group' => [
|
||||
'translation_test::test' => [
|
||||
'nested.hello' => 'Hola!',
|
||||
],
|
||||
],
|
||||
'single' => [],
|
||||
]);
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function it_can_merge_a_namespaced_language_with_the_base_language()
|
||||
{
|
||||
$this->translation->addGroupTranslation('en', 'translation_test::test', 'hello', 'Hello');
|
||||
$this->translation->addGroupTranslation('es', 'translation_test::test', 'hello', 'Hola!');
|
||||
$translations = $this->translation->getSourceLanguageTranslationsWith('es');
|
||||
|
||||
$this->assertEquals($translations->toArray(), [
|
||||
'group' => [
|
||||
'translation_test::test' => [
|
||||
'hello' => ['en' => 'Hello', 'es' => 'Hola!'],
|
||||
],
|
||||
],
|
||||
'single' => [],
|
||||
]);
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function a_list_of_languages_can_be_viewed()
|
||||
{
|
||||
$newLanguages = factory(Language::class, 2)->create();
|
||||
$response = $this->get(config('translation.ui_url'));
|
||||
|
||||
$response->assertSee(config('app.locale'));
|
||||
foreach ($newLanguages as $language) {
|
||||
$response->assertSee($language->language);
|
||||
}
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function the_language_creation_page_can_be_viewed()
|
||||
{
|
||||
$this->translation->addGroupTranslation(config('app.locale'), 'translation::translation', 'add_language', 'Add a new language');
|
||||
$this->get(config('translation.ui_url').'/create')
|
||||
->assertSee('Add a new language');
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function a_language_can_be_added()
|
||||
{
|
||||
$this->post(config('translation.ui_url'), ['locale' => 'de'])
|
||||
->assertRedirect();
|
||||
|
||||
$this->assertDatabaseHas('languages', ['language' => 'de']);
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function a_list_of_translations_can_be_viewed()
|
||||
{
|
||||
$default = Language::where('language', config('app.locale'))->first();
|
||||
factory(TranslationModel::class)->states('group')->create(['language_id' => $default->id, 'group' => 'test', 'key' => 'hello', 'value' => 'Hello']);
|
||||
factory(TranslationModel::class)->states('group')->create(['language_id' => $default->id, 'group' => 'test', 'key' => 'whats_up', 'value' => "What's up!"]);
|
||||
factory(TranslationModel::class)->states('single')->create(['language_id' => $default->id, 'key' => 'Hello', 'value' => 'Hello!']);
|
||||
factory(TranslationModel::class)->states('single')->create(['language_id' => $default->id, 'key' => "What's up", 'value' => 'Sup!']);
|
||||
|
||||
$this->get(config('translation.ui_url').'/en/translations')
|
||||
->assertSee('hello')
|
||||
->assertSee('whats_up')
|
||||
->assertSee('Hello')
|
||||
->assertSee('Sup!');
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function the_translation_creation_page_can_be_viewed()
|
||||
{
|
||||
$this->translation->addGroupTranslation('en', 'translation::translation', 'add_translation', 'Add a translation');
|
||||
$this->get(config('translation.ui_url').'/'.config('app.locale').'/translations/create')
|
||||
->assertSee('Add a translation');
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function a_new_translation_can_be_added()
|
||||
{
|
||||
$this->post(config('translation.ui_url').'/'.config('app.locale').'/translations', ['group' => 'single', 'key' => 'joe', 'value' => 'is cool'])
|
||||
->assertRedirect();
|
||||
|
||||
$this->assertDatabaseHas('translations', ['language_id' => 1, 'key' => 'joe', 'value' => 'is cool']);
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function a_translation_can_be_updated()
|
||||
{
|
||||
$default = Language::where('language', config('app.locale'))->first();
|
||||
factory(TranslationModel::class)->states('group')->create(['language_id' => $default->id, 'group' => 'test', 'key' => 'hello', 'value' => 'Hello']);
|
||||
$this->assertDatabaseHas('translations', ['language_id' => 1, 'group' => 'test', 'key' => 'hello', 'value' => 'Hello']);
|
||||
|
||||
$this->post(config('translation.ui_url').'/en', ['group' => 'test', 'key' => 'hello', 'value' => 'Hello there!'])
|
||||
->assertStatus(200);
|
||||
|
||||
$this->assertDatabaseHas('translations', ['language_id' => 1, 'group' => 'test', 'key' => 'hello', 'value' => 'Hello there!']);
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function adding_a_translation_fires_an_event_with_the_expected_data()
|
||||
{
|
||||
Event::fake();
|
||||
|
||||
$data = ['key' => 'joe', 'value' => 'is cool'];
|
||||
$this->post(config('translation.ui_url').'/en/translations', $data);
|
||||
|
||||
Event::assertDispatched(TranslationAdded::class, function ($event) use ($data) {
|
||||
return $event->language === 'en' &&
|
||||
$event->group === 'single' &&
|
||||
$event->value === $data['value'] &&
|
||||
$event->key === $data['key'];
|
||||
});
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function updating_a_translation_fires_an_event_with_the_expected_data()
|
||||
{
|
||||
Event::fake();
|
||||
|
||||
$data = ['group' => 'test', 'key' => 'hello', 'value' => 'Hello there!'];
|
||||
$this->post(config('translation.ui_url').'/en/translations', $data);
|
||||
|
||||
Event::assertDispatched(TranslationAdded::class, function ($event) use ($data) {
|
||||
return $event->language === 'en' &&
|
||||
$event->group === $data['group'] &&
|
||||
$event->value === $data['value'] &&
|
||||
$event->key === $data['key'];
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user