@@ -217,7 +217,10 @@ public function testCompleteWriteProcessUpdateFiles()
217217$ provider ->write ($ translatorBag );
218218 }
219219
220- public function testCompleteWriteProcessAddFileAndUploadTranslations ()
220+ /**
221+ * @dataProvider getResponsesForProcessAddFileAndUploadTranslations
222+ */
223+ public function testCompleteWriteProcessAddFileAndUploadTranslations (TranslatorBag $ translatorBag ,string $ expectedLocale ,string $ expectedMessagesTranslationsContent )
221224 {
222225$ this ->xliffFileDumper =new XliffFileDumper ();
223226
@@ -237,24 +240,6 @@ public function testCompleteWriteProcessAddFileAndUploadTranslations()
237240 </file>
238241</xliff>
239242
240- XLIFF;
241-
242- $ expectedMessagesTranslationsContent = <<<'XLIFF'
243- <?xml version="1.0" encoding="utf-8"?>
244- <xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
245- <file source-language="en" target-language="fr" datatype="plaintext" original="file.ext">
246- <header>
247- <tool tool-id="symfony" tool-name="Symfony"/>
248- </header>
249- <body>
250- <trans-unit id="ypeBEso" resname="a">
251- <source>a</source>
252- <target>trans_fr_a</target>
253- </trans-unit>
254- </body>
255- </file>
256- </xliff>
257-
258243XLIFF;
259244
260245$ responses = [
@@ -296,23 +281,15 @@ public function testCompleteWriteProcessAddFileAndUploadTranslations()
296281
297282return new MockResponse (json_encode (['data ' => ['id ' =>19 ]]), ['http_code ' =>201 ]);
298283 },
299- 'UploadTranslations ' =>function (string $ method ,string $ url ,array $ options = []):ResponseInterface {
284+ 'UploadTranslations ' =>function (string $ method ,string $ url ,array $ options = [])use ( $ expectedLocale ) :ResponseInterface {
300285$ this ->assertSame ('POST ' ,$ method );
301- $ this ->assertSame ('https://api.crowdin.com/api/v2/projects/1/translations/fr ' ,$ url );
286+ $ this ->assertSame (sprintf ( 'https://api.crowdin.com/api/v2/projects/1/translations/%s ' , $ expectedLocale ) ,$ url );
302287$ this ->assertSame ('{"storageId":19,"fileId":12} ' ,$ options ['body ' ]);
303288
304289return new MockResponse ();
305290 },
306291 ];
307292
308- $ translatorBag =new TranslatorBag ();
309- $ translatorBag ->addCatalogue (new MessageCatalogue ('en ' , [
310- 'messages ' => ['a ' =>'trans_en_a ' ],
311- ]));
312- $ translatorBag ->addCatalogue (new MessageCatalogue ('fr ' , [
313- 'messages ' => ['a ' =>'trans_fr_a ' ],
314- ]));
315-
316293$ provider =$ this ->createProvider ((new MockHttpClient ($ responses ))->withOptions ([
317294'base_uri ' =>'https://api.crowdin.com/api/v2/projects/1/ ' ,
318295'auth_bearer ' =>'API_TOKEN ' ,
@@ -321,10 +298,69 @@ public function testCompleteWriteProcessAddFileAndUploadTranslations()
321298$ provider ->write ($ translatorBag );
322299 }
323300
301+ public function getResponsesForProcessAddFileAndUploadTranslations ():\Generator
302+ {
303+ $ arrayLoader =new ArrayLoader ();
304+
305+ $ translatorBagFr =new TranslatorBag ();
306+ $ translatorBagFr ->addCatalogue ($ arrayLoader ->load ([
307+ 'a ' =>'trans_en_a ' ,
308+ ],'en ' ));
309+ $ translatorBagFr ->addCatalogue ($ arrayLoader ->load ([
310+ 'a ' =>'trans_fr_a ' ,
311+ ],'fr ' ));
312+
313+ yield [$ translatorBagFr ,'fr ' , <<<'XLIFF'
314+ <?xml version="1.0" encoding="utf-8"?>
315+ <xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
316+ <file source-language="en" target-language="fr" datatype="plaintext" original="file.ext">
317+ <header>
318+ <tool tool-id="symfony" tool-name="Symfony"/>
319+ </header>
320+ <body>
321+ <trans-unit id="ypeBEso" resname="a">
322+ <source>a</source>
323+ <target>trans_fr_a</target>
324+ </trans-unit>
325+ </body>
326+ </file>
327+ </xliff>
328+
329+ XLIFF
330+ ];
331+
332+ $ translatorBagEnGb =new TranslatorBag ();
333+ $ translatorBagEnGb ->addCatalogue ($ arrayLoader ->load ([
334+ 'a ' =>'trans_en_a ' ,
335+ ],'en ' ));
336+ $ translatorBagEnGb ->addCatalogue ($ arrayLoader ->load ([
337+ 'a ' =>'trans_en_gb_a ' ,
338+ ],'en_GB ' ));
339+
340+ yield [$ translatorBagEnGb ,'en-GB ' , <<<'XLIFF'
341+ <?xml version="1.0" encoding="utf-8"?>
342+ <xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
343+ <file source-language="en" target-language="en-GB" datatype="plaintext" original="file.ext">
344+ <header>
345+ <tool tool-id="symfony" tool-name="Symfony"/>
346+ </header>
347+ <body>
348+ <trans-unit id="ypeBEso" resname="a">
349+ <source>a</source>
350+ <target>trans_en_gb_a</target>
351+ </trans-unit>
352+ </body>
353+ </file>
354+ </xliff>
355+
356+ XLIFF
357+ ];
358+ }
359+
324360/**
325361 * @dataProvider getResponsesForOneLocaleAndOneDomain
326362 */
327- public function testReadForOneLocaleAndOneDomain (string $ locale ,string $ domain ,string $ responseContent ,TranslatorBag $ expectedTranslatorBag )
363+ public function testReadForOneLocaleAndOneDomain (string $ locale ,string $ domain ,string $ responseContent ,TranslatorBag $ expectedTranslatorBag, string $ expectedTargetLanguageId )
328364 {
329365$ responses = [
330366'listFiles ' =>function (string $ method ,string $ url ):ResponseInterface {
@@ -340,10 +376,10 @@ public function testReadForOneLocaleAndOneDomain(string $locale, string $domain,
340376 ],
341377 ]));
342378 },
343- 'exportProjectTranslations ' =>function (string $ method ,string $ url ,array $ options = []):ResponseInterface {
379+ 'exportProjectTranslations ' =>function (string $ method ,string $ url ,array $ options = [])use ( $ expectedTargetLanguageId ) :ResponseInterface {
344380$ this ->assertSame ('POST ' ,$ method );
345381$ this ->assertSame ('https://api.crowdin.com/api/v2/projects/1/translations/exports ' ,$ url );
346- $ this ->assertSame ('{"targetLanguageId":"fr ","fileIds":[12]} ' ,$ options ['body ' ]);
382+ $ this ->assertSame (sprintf ( '{"targetLanguageId":"%s ","fileIds":[12]} ' , $ expectedTargetLanguageId ) ,$ options ['body ' ]);
347383
348384return new MockResponse (json_encode (['data ' => ['url ' =>'https://file.url ' ]]));
349385 },
@@ -401,7 +437,37 @@ public function getResponsesForOneLocaleAndOneDomain(): \Generator
401437</xliff>
402438XLIFF
403439 ,
404- $ expectedTranslatorBagFr ,
440+ $ expectedTranslatorBagFr ,'fr ' ,
441+ ];
442+
443+ $ expectedTranslatorBagEnUs =new TranslatorBag ();
444+ $ expectedTranslatorBagEnUs ->addCatalogue ($ arrayLoader ->load ([
445+ 'index.hello ' =>'Hello ' ,
446+ 'index.greetings ' =>'Welcome, {firstname}! ' ,
447+ ],'en_GB ' ));
448+
449+ yield ['en_GB ' ,'messages ' , <<<'XLIFF'
450+ <?xml version="1.0" encoding="UTF-8"?>
451+ <xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
452+ <file source-language="en" target-language="en_GB" datatype="database" tool-id="crowdin">
453+ <header>
454+ <tool tool-id="crowdin" tool-name="Crowdin" tool-version="1.0.25 20201211-1" tool-company="Crowdin"/>
455+ </header>
456+ <body>
457+ <trans-unit id="crowdin:5fd89b853ee27904dd6c5f67" resname="index.hello" datatype="plaintext">
458+ <source>index.hello</source>
459+ <target state="translated">Hello</target>
460+ </trans-unit>
461+ <trans-unit id="crowdin:5fd89b8542e5aa5cc27457e2" resname="index.greetings" datatype="plaintext" extradata="crowdin:format=icu">
462+ <source>index.greetings</source>
463+ <target state="translated">Welcome, {firstname}!</target>
464+ </trans-unit>
465+ </body>
466+ </file>
467+ </xliff>
468+ XLIFF
469+ ,
470+ $ expectedTranslatorBagEnUs ,'en-GB ' ,
405471 ];
406472 }
407473