public function testLoadTranslation()
 {
     // First save some translations
     $data = array();
     $data['author'] = 'John Doe';
     $data['topic'] = 'English topic';
     $data['text'] = 'English text';
     $node = $this->getTestNode();
     $strategy = new ChildTranslationStrategy();
     $strategy->saveTranslation($data, $node, $this->metadata, 'en');
     // Save translation in another language
     $data['topic'] = 'Sujet français';
     $data['text'] = null;
     $strategy->saveTranslation($data, $node, $this->metadata, 'fr');
     $this->dm->flush();
     $doc = new Article();
     $doc->author = $data['author'];
     $doc->topic = $data['topic'];
     $doc->setText($data['text']);
     $strategy->loadTranslation($doc, $node, $this->metadata, 'en');
     // And check the translatable properties have the correct value
     $this->assertEquals('English topic', $doc->topic);
     $this->assertEquals('English text', $doc->getText());
     // Load another language and test the document has been updated
     $strategy->loadTranslation($doc, $node, $this->metadata, 'fr');
     $this->assertEquals('Sujet français', $doc->topic);
     $this->assertNull($doc->getText());
 }
 public function testRemove()
 {
     $this->dm->persist($this->doc);
     $this->dm->bindTranslation($this->doc, 'en');
     $this->dm->bindTranslation($this->doc, 'fr');
     $this->dm->flush();
     $this->dm->remove($this->doc);
     $this->dm->flush();
     $this->dm->clear();
     $this->doc = $this->dm->find($this->class, '/functional/' . $this->testNodeName);
     $this->assertNull($this->doc, 'Document must be null after deletion');
     $this->doc = new Article();
     $this->doc->id = '/functional/' . $this->testNodeName;
     $this->doc->author = 'John Doe';
     $this->doc->topic = 'Some interesting subject';
     $this->doc->setText('Lorem ipsum...');
     $this->dm->persist($this->doc);
     $this->dm->bindTranslation($this->doc, 'en');
     $this->dm->flush();
     $locales = $this->dm->getLocalesFor($this->doc);
     $this->assertEquals(array('en'), $locales, 'Removing a document must remove all translations');
 }
 /**
  * Caution : Jackalope\Property guess the property type on the first element
  * So if it's an boolean, all your array will be set to true
  * The Array has to be an array of string
  */
 public function testTranslationArrayProperties()
 {
     // First save some translations
     $data = array();
     $data['author'] = 'John Doe';
     $data['topic'] = 'Some interesting subject';
     $data['text'] = 'Lorem ipsum...';
     $data['settings'] = array('is-active' => 'true', 'url' => 'great-article-in-english.html');
     $node = $this->getTestNode();
     $strategy = new ChildTranslationStrategy($this->dm);
     $strategy->saveTranslation($data, $node, $this->metadata, 'en');
     // Save translation in another language
     $data['topic'] = 'Un sujet intéressant';
     $data['settings'] = array('is-active' => 'true', 'url' => 'super-article-en-francais.html');
     $strategy->saveTranslation($data, $node, $this->metadata, 'fr');
     $this->dm->flush();
     $doc = new Article();
     $doc->author = $data['author'];
     $doc->topic = $data['topic'];
     $doc->setText($data['text']);
     $strategy->loadTranslation($doc, $node, $this->metadata, 'en');
     $this->assertEquals(array('is-active', 'url'), array_keys($doc->getSettings()));
     $this->assertEquals(array('is-active' => 'true', 'url' => 'great-article-in-english.html'), $doc->getSettings());
     $strategy->loadTranslation($doc, $node, $this->metadata, 'fr');
     $this->assertEquals(array('is-active', 'url'), array_keys($doc->getSettings()));
     $this->assertEquals(array('is-active' => 'true', 'url' => 'super-article-en-francais.html'), $doc->getSettings());
 }
 public function testRemoveTranslation()
 {
     // First save some translations
     $data = array();
     $data['author'] = 'John Doe';
     $data['topic'] = 'Some interesting subject';
     $data['text'] = 'Lorem ipsum...';
     $node = $this->getTestNode();
     $strategy = new AttributeTranslationStrategy();
     $strategy->saveTranslation($data, $node, $this->metadata, 'en');
     $doc['topic'] = 'sujet interessant';
     $strategy->saveTranslation($data, $node, $this->metadata, 'fr');
     $this->assertTrue($node->hasProperty(self::propertyNameForLocale('en', 'topic')));
     $this->assertTrue($node->hasProperty(self::propertyNameForLocale('en', 'text')));
     // Then remove the french translation
     $doc = new Article();
     $doc->author = $data['author'];
     $doc->topic = $data['topic'];
     $doc->setText($data['text']);
     $strategy->removeTranslation($doc, $node, $this->metadata, 'fr');
     $this->assertFalse($node->hasProperty(self::propertyNameForLocale('fr', 'topic')));
     $this->assertFalse($node->hasProperty(self::propertyNameForLocale('fr', 'text')));
     $this->assertTrue($node->hasProperty(self::propertyNameForLocale('en', 'topic')));
     $this->assertTrue($node->hasProperty(self::propertyNameForLocale('en', 'text')));
 }
 /**
  * Just make one field of a document untranslated again
  */
 public function testPartialUntranslateAttribute()
 {
     $article = new Article();
     $article->id = '/functional/convert';
     $article->topic = 'Some interesting subject';
     $article->setText('Lorem ipsum...');
     $this->dm->persist($article);
     $this->dm->flush();
     $this->dm->clear();
     $class = 'Doctrine\\Tests\\Models\\Translation\\Article';
     $field = 'author';
     $comment = $this->node->getNode('convert');
     $comment->setProperty(AttributeTranslationStrategyTest::propertyNameForLocale('en', $field), 'Move to untranslated');
     $this->session->save();
     $this->assertFalse($this->converter->convert($class, array('en'), array($field)));
     $this->session->save();
     $this->dm->clear();
     $this->dm = $this->createDocumentManager();
     $this->dm->setLocaleChooserStrategy(new LocaleChooser($this->localePrefs, 'en'));
     $this->assertTrue($comment->hasProperty($field), 'new property was not created');
     $this->assertFalse($comment->hasProperty(AttributeTranslationStrategyTest::propertyNameForLocale('en', $field)), 'old property was not removed');
     $article = $this->dm->find(null, '/functional/convert');
     $this->assertInstanceof($class, $article);
     $this->assertEquals('Move to untranslated', $article->author);
     $this->assertEquals('Lorem ipsum...', $article->getText());
     $this->dm->clear();
     $article = $this->dm->find(null, '/functional/convert');
     $this->assertInstanceof($class, $article);
     $this->assertEquals('Move to untranslated', $article->author);
     $this->assertEquals('Lorem ipsum...', $article->getText());
 }