public function testPersistUpdateScenario() { $testValue = 'some Value'; $existsTranslation = new Translation(); $existsTranslation->setValue($testValue); $this->repo->expects($this->any())->method('findValue')->will($this->returnValueMap([['key_1', $this->testLocale, 'messages', Translation::SCOPE_SYSTEM, null], ['key_2', $this->testLocale, 'messages', Translation::SCOPE_SYSTEM, null], ['key_3', $this->testLocale, 'messages', Translation::SCOPE_SYSTEM, null], ['key_1', $this->testLocale, 'validators', Translation::SCOPE_SYSTEM, $existsTranslation], ['key_2', $this->testLocale, 'validators', Translation::SCOPE_SYSTEM, null]])); $this->em->expects($this->once())->method('beginTransaction'); $this->em->expects($this->exactly(5))->method('persist'); $this->em->expects($this->exactly(3))->method('flush'); $this->em->expects($this->exactly(3))->method('clear'); $this->em->expects($this->once())->method('commit'); $this->em->expects($this->never())->method('rollback'); $this->metadataCache->expects($this->once())->method('updateTimestamp')->with($this->testLocale); $this->persister->persist($this->testLocale, $this->testData); $this->assertSame($this->testData['validators']['key_1'], $existsTranslation->getValue()); $this->assertNotSame($testValue, $existsTranslation->getValue()); }
public function testLoad() { $locale = 'fr'; $domain = 'test'; $metadataCache = $this->getMockBuilder('Oro\\Bundle\\TranslationBundle\\Translation\\DynamicTranslationMetadataCache')->disableOriginalConstructor()->getMock(); $resource = new OrmTranslationResource($locale, $metadataCache); $value1 = new Translation(); $value1->setKey('label1'); $value1->setScope(Translation::SCOPE_SYSTEM); $value1->setLocale($locale); $value1->setDomain($domain); $value1->setValue('value1 (SYSTEM_SCOPE)'); $value2 = new Translation(); $value2->setKey('label1'); $value2->setScope(Translation::SCOPE_UI); $value2->setLocale($locale); $value2->setDomain($domain); $value2->setValue('value1 (UI_SCOPE)'); $value3 = new Translation(); $value3->setKey('label3'); $value3->setScope(Translation::SCOPE_UI); $value3->setLocale($locale); $value3->setDomain($domain); $value3->setValue('value3'); $values = [$value1, $value2, $value3]; $translationTable = 'translation_table'; $repo = $this->getMockBuilder('Oro\\Bundle\\TranslationBundle\\Entity\\Repository\\TranslationRepository')->disableOriginalConstructor()->getMock(); $repo->expects($this->once())->method('findValues')->with($locale, $domain)->willReturn($values); $metadata = $this->getMockBuilder('Doctrine\\ORM\\Mapping\\ClassMetadata')->disableOriginalConstructor()->getMock(); $metadata->expects($this->once())->method('getTableName')->willReturn($translationTable); $this->em->expects($this->once())->method('getClassMetadata')->with(Translation::ENTITY_NAME)->willReturn($metadata); $this->em->expects($this->once())->method('getRepository')->with(Translation::ENTITY_NAME)->willReturn($repo); $schemaManager = $this->getMockBuilder('Doctrine\\DBAL\\Schema\\AbstractSchemaManager')->disableOriginalConstructor()->setMethods(['tablesExist'])->getMockForAbstractClass(); $this->connection->expects($this->once())->method('connect'); $this->connection->expects($this->once())->method('getSchemaManager')->willReturn($schemaManager); $schemaManager->expects($this->once())->method('tablesExist')->with($translationTable)->willReturn(true); /** @var MessageCatalogue $result */ $result = $this->loader->load($resource, $locale, $domain); $this->assertInstanceOf('Symfony\\Component\\Translation\\MessageCatalogue', $result); $this->assertEquals($locale, $result->getLocale()); $this->assertEquals('value1 (UI_SCOPE)', $result->get('label1', $domain)); $this->assertEquals('value3', $result->get('label3', $domain)); }
/** * Find existing translation in database * * @param string $key * @param string $locale * @param string $domain * @param string $value * * @return Translation */ private function getTranslationObject($key, $locale, $domain, $value) { $object = $this->repository->findValue($key, $locale, $domain); if (null === $object) { $object = new Translation(); $object->setScope(Translation::SCOPE_SYSTEM); $object->setLocale($locale); $object->setDomain($domain); $object->setKey($key); } $object->setValue($value); return $object; }
/** * Copies a translation value * * @param string $srcKey * @param string $destKey * @param string $domain * @return bool TRUE if a translation key exists and it was copied */ public function copyValue($srcKey, $destKey, $domain = self::DEFAULT_DOMAIN) { /** @var Translation[] $srcTranslationValues */ $srcTranslationValues = $this->findBy(['key' => $srcKey, 'domain' => $domain]); /** @var Translation[] $destTranslationValues */ $destTranslationValues = $this->findBy(['key' => $destKey, 'domain' => $domain]); $result = false; foreach ($srcTranslationValues as $srcTranslationValue) { $destTranslationValue = null; foreach ($destTranslationValues as $val) { if ($val->getLocale() === $srcTranslationValue->getLocale()) { $destTranslationValue = $val; break; } } if (!$destTranslationValue) { $destTranslationValue = new Translation(); $destTranslationValue->setKey($destKey)->setValue($srcTranslationValue->getValue())->setLocale($srcTranslationValue->getLocale())->setDomain($srcTranslationValue->getDomain())->setScope($srcTranslationValue->getScope()); } else { $destTranslationValue->setValue($srcTranslationValue->getValue()); } $this->getEntityManager()->persist($destTranslationValue); $result = true; } return $result; }
public function testGettersAndSetters() { $this->assertNull($this->translation->getId()); $this->assertNull($this->translation->getKey()); $this->assertNull($this->translation->getValue()); $this->assertNull($this->translation->getLocale()); $this->assertNull($this->translation->getDomain()); $this->assertEquals(Translation::SCOPE_SYSTEM, $this->translation->getScope()); $this->translation->setKey('test.key')->setValue('Test value')->setLocale('en')->setDomain('messages')->setScope(Translation::SCOPE_UI); $this->assertNull($this->translation->getId()); $this->assertEquals('test.key', $this->translation->getKey()); $this->assertEquals('Test value', $this->translation->getValue()); $this->assertEquals('en', $this->translation->getLocale()); $this->assertEquals('messages', $this->translation->getDomain()); $this->assertEquals(Translation::SCOPE_UI, $this->translation->getScope()); }