Doubles
1 month ago
Providers
1 month ago
BulkRearmOnGrowthTest.php
1 month ago
BulkReviewsUpdateStuckStateTest.php
1 month ago
ClearCacheRelayResetTest.php
1 month ago
DeleteSourceRelayFailureTest.php
1 month ago
ErrorHandlerFalsyOptionTest.php
1 month ago
FeedCacheUpdateServiceTest.php
1 month ago
FeedMalformedPayloadTest.php
1 month ago
ForceKeylessRefetchTest.php
1 month ago
LicenseDeactivateStaleStateTest.php
1 month ago
MediaFinderMemoTest.php
1 month ago
MultiSourceAggregationTest.php
1 month ago
ReconcileMigratedLicenseRoutineTest.php
1 month ago
ReconcileRemovalTest.php
1 month ago
RegisterWebsiteRoutineTest.php
1 month ago
RemoteRequestMemoTest.php
1 month ago
ReviewAlertHeaderTotalsTest.php
1 month ago
ReviewAlertPageTargetingTest.php
1 month ago
ReviewAlertStarFillTest.php
1 month ago
ShortcodeNeutralizationTest.php
1 month ago
SiteMigrationRecoveryTest.php
1 month ago
Smash1583HeaderParityTest.php
1 month ago
Smash1631MultiLanguageBulkTest.php
1 month ago
Smash1631UpdateSingleLangScopeTest.php
1 month ago
Smash782BookingHeaderRatingTest.php
1 month ago
Smash782CountryFlagEmojiTest.php
1 month ago
Smash782ExternalRefreshCronTest.php
1 month ago
Smash782ExtrasTemplateTest.php
1 month ago
Smash782ReviewAlertProviderDataTest.php
1 month ago
SourceIdLookupTest.php
1 month ago
WpmlGetCurrentLanguageTest.php
1 month ago
WpmlLanguageMappingTest.php
1 month ago
WpmlLanguageMappingTest.php
96 lines
| 1 | <?php |
| 2 | |
| 3 | namespace SmashBalloon\Reviews\Tests\Unit; |
| 4 | |
| 5 | use PHPUnit\Framework\TestCase; |
| 6 | use SmashBalloon\Reviews\Common\Util; |
| 7 | |
| 8 | /** |
| 9 | * Pins Util::map_wpml_to_google_language() — maps a WPML/locale code to a code the |
| 10 | * Google Places API actually accepts, so reviews come back translated (SMASH-1617, |
| 11 | * WPSA #62626). The reported case: a WPML `es-mx` site sent an unsupported code and |
| 12 | * Google returned reviews untranslated; this maps it to `es-419`. |
| 13 | * |
| 14 | * Pure static (only reads the in-code supported-language list), so it runs in the |
| 15 | * plain-PHPUnit suite. |
| 16 | */ |
| 17 | final class WpmlLanguageMappingTest extends TestCase |
| 18 | { |
| 19 | /** |
| 20 | * @dataProvider provideCodes |
| 21 | * |
| 22 | * @param string|null $input |
| 23 | * @param string|null $expected |
| 24 | */ |
| 25 | public function test_map_wpml_to_google_language($input, $expected): void |
| 26 | { |
| 27 | $this->assertSame($expected, Util::map_wpml_to_google_language($input)); |
| 28 | } |
| 29 | |
| 30 | /** @return array<string, array{0: string|null, 1: string|null}> */ |
| 31 | public static function provideCodes(): array |
| 32 | { |
| 33 | return [ |
| 34 | // --- The reported regression: every Latin-American Spanish variant -> es-419 --- |
| 35 | 'es-mx -> es-419' => ['es-mx', 'es-419'], |
| 36 | 'es_MX underscore' => ['es_MX', 'es-419'], |
| 37 | 'ES-MX uppercase' => ['ES-MX', 'es-419'], |
| 38 | 'es-ar -> es-419' => ['es-ar', 'es-419'], |
| 39 | 'es-cl -> es-419' => ['es-cl', 'es-419'], |
| 40 | 'es-co -> es-419' => ['es-co', 'es-419'], |
| 41 | 'es-pe -> es-419' => ['es-pe', 'es-419'], |
| 42 | 'es-ve -> es-419' => ['es-ve', 'es-419'], |
| 43 | 'es-uy -> es-419' => ['es-uy', 'es-419'], |
| 44 | 'es-419 exact' => ['es-419', 'es-419'], |
| 45 | |
| 46 | // --- Spain Spanish stays es --- |
| 47 | 'es -> es' => ['es', 'es'], |
| 48 | 'es-es -> es' => ['es-es', 'es'], |
| 49 | 'es-ES -> es' => ['es-ES', 'es'], |
| 50 | 'es_ES underscore -> es' => ['es_ES', 'es'], |
| 51 | |
| 52 | // --- Already-supported codes pass through unchanged (BC) --- |
| 53 | 'en exact' => ['en', 'en'], |
| 54 | 'en-GB exact' => ['en-GB', 'en-GB'], |
| 55 | 'en-AU exact' => ['en-AU', 'en-AU'], |
| 56 | 'fr exact' => ['fr', 'fr'], |
| 57 | 'fr-CA exact' => ['fr-CA', 'fr-CA'], |
| 58 | 'pt exact' => ['pt', 'pt'], |
| 59 | 'pt-BR exact' => ['pt-BR', 'pt-BR'], |
| 60 | 'pt-PT exact' => ['pt-PT', 'pt-PT'], |
| 61 | 'zh exact' => ['zh', 'zh'], |
| 62 | 'zh-CN exact' => ['zh-CN', 'zh-CN'], |
| 63 | 'zh-TW exact' => ['zh-TW', 'zh-TW'], |
| 64 | 'hy (Armenian) exact' => ['hy', 'hy'], |
| 65 | |
| 66 | // --- Case-insensitive match for region variants Google lists --- |
| 67 | 'en-gb -> en-GB' => ['en-gb', 'en-GB'], |
| 68 | 'en-au -> en-AU' => ['en-au', 'en-AU'], |
| 69 | 'pt-br -> pt-BR' => ['pt-br', 'pt-BR'], |
| 70 | 'pt_br underscore -> pt-BR' => ['pt_br', 'pt-BR'], |
| 71 | 'fr-ca -> fr-CA' => ['fr-ca', 'fr-CA'], |
| 72 | 'zh-tw -> zh-TW' => ['zh-tw', 'zh-TW'], |
| 73 | 'zh-hk -> zh-HK' => ['zh-hk', 'zh-HK'], |
| 74 | |
| 75 | // --- Region strip to a supported base language --- |
| 76 | 'en-us -> en' => ['en-us', 'en'], |
| 77 | 'fr-fr -> fr' => ['fr-fr', 'fr'], |
| 78 | 'de-de -> de' => ['de-de', 'de'], |
| 79 | 'de_DE underscore -> de' => ['de_DE', 'de'], |
| 80 | 'it-it -> it' => ['it-it', 'it'], |
| 81 | 'nl-nl -> nl' => ['nl-nl', 'nl'], |
| 82 | 'ja-jp -> ja' => ['ja-jp', 'ja'], |
| 83 | 'ru-ru -> ru' => ['ru-ru', 'ru'], |
| 84 | 'EN uppercase base -> en' => ['EN', 'en'], |
| 85 | |
| 86 | // --- Unmappable -> null so the caller falls back (never sends a bogus code) --- |
| 87 | 'literal wpml -> null' => ['wpml', null], |
| 88 | 'unknown 2-letter -> null' => ['xx', null], |
| 89 | 'unknown region -> null' => ['xx-yy', null], |
| 90 | 'gibberish -> null' => ['zz-zz', null], |
| 91 | 'empty string -> null' => ['', null], |
| 92 | 'null -> null' => [null, null], |
| 93 | ]; |
| 94 | } |
| 95 | } |
| 96 |