Package org.zanata.service.impl

Source Code of org.zanata.service.impl.TranslationServiceImplJpaTest

package org.zanata.service.impl;

import java.util.List;
import java.util.Set;

import javax.persistence.EntityManager;

import lombok.extern.slf4j.Slf4j;

import org.assertj.core.api.Assertions;
import org.jboss.seam.security.management.JpaIdentityStore;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import org.zanata.PerformanceProfiling;
import org.zanata.ZanataJpaTest;
import org.zanata.common.ContentState;
import org.zanata.common.ContentType;
import org.zanata.common.LocaleId;
import org.zanata.common.MergeType;
import org.zanata.model.HAccount;
import org.zanata.model.HDocument;
import org.zanata.model.HLocale;
import org.zanata.model.HProject;
import org.zanata.model.HProjectIteration;
import org.zanata.model.HTextFlowBuilder;
import org.zanata.model.HTextFlowTargetHistory;
import org.zanata.rest.dto.resource.TextFlowTarget;
import org.zanata.rest.dto.resource.TranslationsResource;
import org.zanata.seam.SeamAutowire;
import org.zanata.security.ZanataIdentity;

import com.github.huangp.entityunit.entity.EntityMaker;
import com.github.huangp.entityunit.entity.EntityMakerBuilder;
import com.github.huangp.entityunit.maker.FixedValueMaker;
import com.google.common.collect.Sets;
import com.jamonapi.Monitor;
import com.jamonapi.MonitorFactory;

@Slf4j
//@Test(groups = { "jpa-tests" })
public class TranslationServiceImplJpaTest extends ZanataJpaTest {

    static SeamAutowire seam = SeamAutowire.instance();
    @Mock
    private ZanataIdentity identity;
    private TranslationServiceImpl service;
    private Set<String> extensions = Sets.newHashSet("gettext", "comment");

    @BeforeMethod
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        deleteAllTables();
        HAccount authenticatedUser =
                EntityMakerBuilder.builder().includeOptionalOneToOne().build()
                        .makeAndPersist(getEm(), HAccount.class);
        service = seam.reset()
                .use("entityManager", getEm())
                .use("session", getSession())
                .use(JpaIdentityStore.AUTHENTICATED_USER,
                        authenticatedUser)
                .use("identity", identity)
                .useImpl(LocaleServiceImpl.class)
                .useImpl(ValidationServiceImpl.class).ignoreNonResolvable()
                .autowire(TranslationServiceImpl.class);
    }

    @AfterMethod
    public void cleanUp() {
        deleteAllTables();
    }

    @Test(enabled = true, description = "this should only be executed manually in IDE")
    @PerformanceProfiling
    public void pushTranslation() {
        EntityMaker entityMaker = EntityMakerBuilder.builder()
                .addFieldOrPropertyMaker(HProject.class, "sourceViewURL",
                        FixedValueMaker.EMPTY_STRING_MAKER).build();
        HProjectIteration iteration = entityMaker
                .makeAndPersist(getEm(), HProjectIteration.class);
        HLocale srcLocale = createAndPersistLocale(LocaleId.EN_US, getEm());
        HLocale transLocale = createAndPersistLocale(LocaleId.DE, getEm());

        String versionSlug = iteration.getSlug();
        String projectSlug = iteration.getProject().getSlug();

        HDocument document = new HDocument("message", ContentType.PO, srcLocale);
        document.setProjectIteration(iteration);
        getEm().persist(document);
        getEm().flush();

        // adjust this number to suit testing purpose
        int numOfTextFlows = 50;
        int numOfTextFlowsHavingTarget =
                createSourceAndSomeTargets(document, transLocale,
                        numOfTextFlows);
        getEm().getTransaction().commit();
        getEm().getTransaction().begin();

        Long targetsCountBefore = getEm().createQuery(
                "select count(*) from HTextFlowTarget where locale = :locale",
                Long.class).setParameter("locale", transLocale).getSingleResult();
        Assertions.assertThat(targetsCountBefore).isEqualTo(numOfTextFlowsHavingTarget);

        // ============ add targets =========
        TranslationsResource translations = new TranslationsResource();
        translations.setRevision(1);
        for (int i = 0; i < numOfTextFlows; i++) {
            addSampleTranslation(translations, "res" + i);
        }
        Monitor mon = MonitorFactory.start("");
        log.info("==== start translateAllInDoc");
        service.translateAllInDoc(projectSlug, versionSlug, document.getDocId(),
                transLocale.getLocaleId(), translations,
                extensions, MergeType.AUTO);
        log.info("==== stop translateAllInDoc: {}", mon.stop());
        getEm().getTransaction().commit();
        getEm().getTransaction().begin();

        Long targetsCount = getEm().createQuery(
                "select count(*) from HTextFlowTarget where locale = :locale",
                Long.class).setParameter("locale", transLocale).getSingleResult();
        Assertions.assertThat(targetsCount).isEqualTo(numOfTextFlows);

        List<HTextFlowTargetHistory> histories =
                getEm().createQuery("from HTextFlowTargetHistory",
                        HTextFlowTargetHistory.class).getResultList();
        Assertions.assertThat(histories).hasSize(numOfTextFlowsHavingTarget);
    }

    private static HLocale createAndPersistLocale(LocaleId localeId,
            EntityManager entityManager) {
        HLocale hLocale = new HLocale(localeId, true, true);
        entityManager.persist(hLocale);
        return hLocale;
    }

    /**
     * Half of the HTextFlow will have target in it.
     * @return number of textflows that has target in it.
     */
    private static int createSourceAndSomeTargets(HDocument doc,
            HLocale transLocale,
            int numOfTextFlows) {
        HTextFlowBuilder baseBuilder =
                new HTextFlowBuilder().withDocument(doc)
                        .withTargetLocale(transLocale);
        int targetCount = 0;
        for (int i = 0; i < numOfTextFlows; i++) {
            HTextFlowBuilder builder = baseBuilder.withResId("res" + i)
                    .withSourceContent("hello world " + i);
            if (i % 2 == 0) {
                builder = builder.withTargetState(ContentState.NeedReview)
                        .withTargetContent("previous translation");
                targetCount++;
            }
            doc.getTextFlows().add(builder.build());
        }
        return targetCount;
    }

    private static void addSampleTranslation(TranslationsResource translations,
            String resId) {
        TextFlowTarget target = new TextFlowTarget(resId);
        target.setRevision(1);
        target.setState(ContentState.Translated);
        target.setContents("translated " + resId);
        translations.getTextFlowTargets().add(target);
    }

}
TOP

Related Classes of org.zanata.service.impl.TranslationServiceImplJpaTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.