public function testSetPrefixAndGetPropertyName() { $dm = $this->getMockBuilder('Doctrine\\ODM\\PHPCR\\DocumentManager')->disableOriginalConstructor()->getMock(); $s = new AttributeTranslationStrategy($dm); $s->setPrefix('test'); $class = new \ReflectionClass('Doctrine\\ODM\\PHPCR\\Translation\\TranslationStrategy\\AttributeTranslationStrategy'); $method = $class->getMethod('getTranslatedPropertyName'); $method->setAccessible(true); $name = $method->invokeArgs($s, array('fr', 'field')); $this->assertEquals('test:fr-field', $name); }
/** * {@inheritdoc} */ public function loadTranslation($document, NodeInterface $node, ClassMetadata $metadata, $locale) { $translationNode = $this->getTranslationNode($node, $locale, false); if (!$translationNode) { return false; } return parent::loadTranslation($document, $translationNode, $metadata, $locale); }
public function testGetLocaleFor() { $node = $this->getTestNode(); $node->setProperty(self::propertyNameForLocale('en', 'topic'), 'English topic'); $node->setProperty(self::propertyNameForLocale('en', 'text'), 'English text'); $node->setProperty(self::propertyNameForLocale('fr', 'topic'), 'Sujet français'); $node->setProperty(self::propertyNameForLocale('fr', 'text'), 'Texte français'); $node->setProperty(self::propertyNameForLocale('de', 'topic'), 'Deutche Betreff'); $node->setProperty(self::propertyNameForLocale('de', 'text'), 'Deutche Texte'); $this->session->save(); $doc = new Article(); $strategy = new AttributeTranslationStrategy(); $locales = $strategy->getLocalesFor($doc, $node, $this->metadata); $this->assertTrue(is_array($locales)); $this->assertEquals(3, count($locales)); $this->assertContains('fr', $locales); $this->assertContains('en', $locales); $this->assertContains('de', $locales); }
/** * 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['topic'] = 'Some interesting subject'; $data['text'] = 'Lorem ipsum...'; $data['settings'] = array('is-active' => 'true', 'url' => 'great-article-in-english.html'); $node = $this->getTestNode(); $node->setProperty('author', 'John Doe'); $strategy = new AttributeTranslationStrategy($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 = 'John Doe'; $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()); }