From 70f9cd07dceda1bcd30fa1065e4b394435d5d5c1 Mon Sep 17 00:00:00 2001 From: Mathieu Santostefano Date: Mon, 8 Nov 2021 18:21:23 +0100 Subject: [PATCH] Fix Loco Provider --- Command/TranslationTrait.php | 3 +- Tests/Command/TranslationPullCommandTest.php | 71 +++++++++++++++++--- Tests/Command/TranslationPushCommandTest.php | 26 ++++--- 3 files changed, 81 insertions(+), 19 deletions(-) diff --git a/Command/TranslationTrait.php b/Command/TranslationTrait.php index 6a2b1ba8..eafaffd3 100644 --- a/Command/TranslationTrait.php +++ b/Command/TranslationTrait.php @@ -32,8 +32,7 @@ private function readLocalTranslations(array $locales, array $domains, array $tr if ($domains) { foreach ($domains as $domain) { - $catalogue = $this->filterCatalogue($catalogue, $domain); - $bag->addCatalogue($catalogue); + $bag->addCatalogue($this->filterCatalogue($catalogue, $domain)); } } else { $bag->addCatalogue($catalogue); diff --git a/Tests/Command/TranslationPullCommandTest.php b/Tests/Command/TranslationPullCommandTest.php index 195f2b07..8177c2c0 100644 --- a/Tests/Command/TranslationPullCommandTest.php +++ b/Tests/Command/TranslationPullCommandTest.php @@ -196,20 +196,30 @@ public function testPullNewXlf20Messages() public function testPullForceMessages() { $arrayLoader = new ArrayLoader(); - $filenameEn = $this->createFile(); - $filenameFr = $this->createFile(['note' => 'NOTE'], 'fr'); + $filenameMessagesEn = $this->createFile(['note' => 'NOTE'], 'en'); + $filenameMessagesFr = $this->createFile(['note' => 'NOTE'], 'fr'); + $filenameValidatorsEn = $this->createFile(['foo.error' => 'Wrong value'], 'en', 'validators.%locale%.xlf'); + $filenameValidatorsFr = $this->createFile(['foo.error' => 'Valeur erronée'], 'fr', 'validators.%locale%.xlf'); $locales = ['en', 'fr']; - $domains = ['messages']; + $domains = ['messages', 'validators']; $providerReadTranslatorBag = new TranslatorBag(); $providerReadTranslatorBag->addCatalogue($arrayLoader->load([ 'note' => 'UPDATED NOTE', 'new.foo' => 'newFoo', - ], 'en')); + ], 'en', 'messages')); $providerReadTranslatorBag->addCatalogue($arrayLoader->load([ 'note' => 'NOTE MISE À JOUR', 'new.foo' => 'nouveauFoo', - ], 'fr')); + ], 'fr', 'messages')); + $providerReadTranslatorBag->addCatalogue($arrayLoader->load([ + 'foo.error' => 'Bad value', + 'bar.error' => 'Bar error', + ], 'en', 'validators')); + $providerReadTranslatorBag->addCatalogue($arrayLoader->load([ + 'foo.error' => 'Valeur invalide', + 'bar.error' => 'Bar erreur', + ], 'fr', 'validators')); $provider = $this->createMock(ProviderInterface::class); $provider->expects($this->once()) @@ -222,9 +232,9 @@ public function testPullForceMessages() ->willReturn('null://default'); $tester = $this->createCommandTester($provider, $locales, $domains); - $tester->execute(['--locales' => ['en', 'fr'], '--domains' => ['messages'], '--force' => true]); + $tester->execute(['--locales' => $locales, '--domains' => $domains, '--force' => true]); - $this->assertStringContainsString('[OK] Local translations has been updated from "null" (for "en, fr" locale(s), and "messages" domain(s)).', trim($tester->getDisplay())); + $this->assertStringContainsString('[OK] Local translations has been updated from "null" (for "en, fr" locale(s), and "messages, validators" domain(s)).', trim($tester->getDisplay())); $this->assertXmlStringEqualsXmlString(<< @@ -245,7 +255,7 @@ public function testPullForceMessages() XLIFF - , file_get_contents($filenameEn)); + , file_get_contents($filenameMessagesEn)); $this->assertXmlStringEqualsXmlString(<< @@ -266,7 +276,50 @@ public function testPullForceMessages() XLIFF - , file_get_contents($filenameFr)); + , file_get_contents($filenameMessagesFr)); + + $this->assertXmlStringEqualsXmlString(<< + + +
+ +
+ + + foo.error + Bad value + + + bar.error + Bar error + + +
+
+XLIFF + , file_get_contents($filenameValidatorsEn)); + $this->assertXmlStringEqualsXmlString(<< + + +
+ +
+ + + foo.error + Valeur invalide + + + bar.error + Bar erreur + + +
+
+XLIFF + , file_get_contents($filenameValidatorsFr)); } /** diff --git a/Tests/Command/TranslationPushCommandTest.php b/Tests/Command/TranslationPushCommandTest.php index 1403fed0..bdbc1461 100644 --- a/Tests/Command/TranslationPushCommandTest.php +++ b/Tests/Command/TranslationPushCommandTest.php @@ -90,22 +90,32 @@ public function testPushNewMessages() public function testPushForceMessages() { $xliffLoader = new XliffFileLoader(); - $filenameEn = $this->createFile([ + $filenameMessagesEn = $this->createFile([ 'note' => 'NOTE UPDATED', 'new.foo' => 'newFoo', - ]); - $filenameFr = $this->createFile([ + ], 'en'); + $filenameMessagesFr = $this->createFile([ 'note' => 'NOTE MISE À JOUR', 'new.foo' => 'nouveauFoo', ], 'fr'); + $filenameValidatorsEn = $this->createFile([ + 'foo.error' => 'Wrong value', + 'bar.success' => 'Form valid!', + ], 'en', 'validators.%locale%.xlf'); + $filenameValidatorsFr = $this->createFile([ + 'foo.error' => 'Valeur erronée', + 'bar.success' => 'Formulaire valide !', + ], 'fr', 'validators.%locale%.xlf'); $locales = ['en', 'fr']; - $domains = ['messages']; + $domains = ['messages', 'validators']; $provider = $this->createMock(ProviderInterface::class); $localTranslatorBag = new TranslatorBag(); - $localTranslatorBag->addCatalogue($xliffLoader->load($filenameEn, 'en')); - $localTranslatorBag->addCatalogue($xliffLoader->load($filenameFr, 'fr')); + $localTranslatorBag->addCatalogue($xliffLoader->load($filenameMessagesEn, 'en', 'messages')); + $localTranslatorBag->addCatalogue($xliffLoader->load($filenameMessagesFr, 'fr', 'messages')); + $localTranslatorBag->addCatalogue($xliffLoader->load($filenameValidatorsEn, 'en', 'validators')); + $localTranslatorBag->addCatalogue($xliffLoader->load($filenameValidatorsFr, 'fr', 'validators')); $provider->expects($this->once()) ->method('write') @@ -117,9 +127,9 @@ public function testPushForceMessages() $tester = $this->createCommandTester($provider, $locales, $domains); - $tester->execute(['--locales' => ['en', 'fr'], '--domains' => ['messages'], '--force' => true]); + $tester->execute(['--locales' => $locales, '--domains' => $domains, '--force' => true]); - $this->assertStringContainsString('[OK] All local translations has been sent to "null" (for "en, fr" locale(s), and "messages" domain(s)).', trim($tester->getDisplay())); + $this->assertStringContainsString('[OK] All local translations has been sent to "null" (for "en, fr" locale(s), and "messages, validators" domain(s)).', trim($tester->getDisplay())); } public function testDeleteMissingMessages()