Procházet zdrojové kódy

Fixes for the mongodb tests

Albert Casademont před 13 roky
rodič
revize
62b6940c8f

+ 13 - 10
lib/Gedmo/Translatable/TranslationListener.php

@@ -259,7 +259,7 @@ class TranslationListener extends MappedEventSubscriber
                 $locale = strtolower($value);
             } catch(\Gedmo\Exception\InvalidArgumentException $e) {}
         }
-        
+
         return $locale;
     }
 
@@ -470,7 +470,7 @@ class TranslationListener extends MappedEventSubscriber
                 $scheduleUpdate = !$isInsert;
             }
 
-            if (!is_null($translation)) {
+            if (!empty($translation)) {
                 // set the translated field, take value using reflection
                 $value = $wrapped->getPropertyValue($field);
                 $translation->setContent($ea->getTranslationValue($object, $field));
@@ -492,21 +492,24 @@ class TranslationListener extends MappedEventSubscriber
             $modifiedChangeSet = $changeSet;
             foreach ($changeSet as $field => $changes) {
                 if (in_array($field, $translatableFields)) {
-                    if ($locale != $this->defaultLocale /*&& !empty($changes[0])*/) {
+                    if ($locale !== $this->defaultLocale) {
                         $wrapped->setPropertyValue($field, $changes[0]);
                         $ea->setOriginalObjectProperty($uow, $oid, $field, $changes[0]);
                         unset($modifiedChangeSet[$field]);
                     }
                 }
             }
-            // cleanup current changeset
-            $ea->clearObjectChangeSet($uow, $oid);
-            // recompute changeset only if there are changes other than reverted translations
-            if ($modifiedChangeSet) {
-                foreach ($modifiedChangeSet as $field => $changes) {
-                    $ea->setOriginalObjectProperty($uow, $oid, $field, $changes[0]);
+            // cleanup current changeset only if working in a another locale different than de default one, otherwise the changeset will always be reverted
+            if($locale !== $this->defaultLocale)
+            {
+                $ea->clearObjectChangeSet($uow, $oid);
+                // recompute changeset only if there are changes other than reverted translations
+                if ($modifiedChangeSet) {
+                    foreach ($modifiedChangeSet as $field => $changes) {
+                        $ea->setOriginalObjectProperty($uow, $oid, $field, $changes[0]);
+                    }
+                    $ea->recomputeSingleObjectChangeset($uow, $meta, $object);
                 }
-                $ea->recomputeSingleObjectChangeset($uow, $meta, $object);
             }
         }
     }

+ 1 - 12
tests/Gedmo/Translatable/TranslatableDocumentCollectionTest.php

@@ -28,6 +28,7 @@ class TranslatableDocumentCollectionTest extends BaseTestCaseMongoODM
 
         $evm = new EventManager;
         $this->translatableListener = new TranslationListener();
+        $this->translatableListener->setDefaultLocale('en_us');
         $this->translatableListener->setTranslatableLocale('en_us');
         $evm->addEventSubscriber($this->translatableListener);
 
@@ -41,12 +42,6 @@ class TranslatableDocumentCollectionTest extends BaseTestCaseMongoODM
         $sport = $this->dm->getRepository(self::ARTICLE)->find($this->id);
         $translations = $repo->findTranslations($sport);
 
-        $this->assertArrayHasKey('en_us', $translations);
-        $this->assertArrayHasKey('title', $translations['en_us']);
-        $this->assertArrayHasKey('content', $translations['en_us']);
-        $this->assertEquals('Sport', $translations['en_us']['title']);
-        $this->assertEquals('about sport', $translations['en_us']['content']);
-
         $this->assertArrayHasKey('de_de', $translations);
         $this->assertArrayHasKey('title', $translations['de_de']);
         $this->assertArrayHasKey('content', $translations['de_de']);
@@ -75,12 +70,6 @@ class TranslatableDocumentCollectionTest extends BaseTestCaseMongoODM
         $this->dm->flush();
         $translations = $repo->findTranslations($sport);
 
-        $this->assertArrayHasKey('en_us', $translations);
-        $this->assertArrayHasKey('title', $translations['en_us']);
-        $this->assertArrayHasKey('content', $translations['en_us']);
-        $this->assertEquals('Changed', $translations['en_us']['title']);
-        $this->assertEquals('about sport', $translations['en_us']['content']);
-
         $this->assertArrayHasKey('de_de', $translations);
         $this->assertArrayHasKey('title', $translations['de_de']);
         $this->assertArrayHasKey('content', $translations['de_de']);

+ 3 - 12
tests/Gedmo/Translatable/TranslatableDocumentTest.php

@@ -28,6 +28,7 @@ class TranslatableDocumentTest extends BaseTestCaseMongoODM
         parent::setUp();
         $evm = new EventManager();
         $this->translationListener = new TranslationListener;
+        $this->translationListener->setDefaultLocale('en_us');
         $this->translationListener->setTranslatableLocale('en_us');
         $evm->addEventSubscriber(new SluggableListener);
         $evm->addEventSubscriber($this->translationListener);
@@ -46,17 +47,7 @@ class TranslatableDocumentTest extends BaseTestCaseMongoODM
         $this->assertTrue($transRepo instanceof Document\Repository\TranslationRepository);
 
         $translations = $transRepo->findTranslations($article);
-        $this->assertEquals(1, count($translations));
-
-        $this->assertArrayHasKey('en_us', $translations);
-        $this->assertArrayHasKey('title', $translations['en_us']);
-        $this->assertEquals('Title EN', $translations['en_us']['title']);
-
-        $this->assertArrayHasKey('code', $translations['en_us']);
-        $this->assertEquals('Code EN', $translations['en_us']['code']);
-
-        $this->assertArrayHasKey('slug', $translations['en_us']);
-        $this->assertEquals('title-en-code-en', $translations['en_us']['slug']);
+        $this->assertEquals(0, count($translations));
 
         // test second translations
         $this->translationListener->setTranslatableLocale('de_de');
@@ -69,7 +60,7 @@ class TranslatableDocumentTest extends BaseTestCaseMongoODM
 
         $article = $repo->find($this->articleId);
         $translations = $transRepo->findTranslations($article);
-        $this->assertEquals(2, count($translations));
+        $this->assertEquals(1, count($translations));
 
         $this->assertArrayHasKey('de_de', $translations);
         $this->assertArrayHasKey('title', $translations['de_de']);