Package org.zanata.service.impl

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

/*
* Copyright 2014, Red Hat, Inc. and individual contributors as indicated by the
* @author tags. See the copyright.txt file in the distribution for a full
* listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This software is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this software; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF
* site: http://www.fsf.org.
*/

package org.zanata.service.impl;

import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import java.util.List;

import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import org.zanata.common.ContentState;
import org.zanata.common.LocaleId;
import org.zanata.dao.DocumentDAO;
import org.zanata.dao.ProjectIterationDAO;
import org.zanata.events.DocumentMilestoneEvent;
import org.zanata.events.DocumentStatisticUpdatedEvent;
import org.zanata.i18n.Messages;
import org.zanata.model.HDocument;
import org.zanata.model.HProject;
import org.zanata.model.HProjectIteration;
import org.zanata.model.WebHook;
import org.zanata.service.DocumentService;
import org.zanata.ui.model.statistic.WordStatistic;
import org.zanata.util.StatisticsUtil;

import com.google.common.collect.Lists;

/**
* @author Alex Eng <a href="mailto:aeng@redhat.com">aeng@redhat.com</a>
*/
@Test(groups = { "unit-tests" })
public class DocumentServiceImplTest {

    @Mock
    private ProjectIterationDAO projectIterationDAO;

    @Mock
    private DocumentDAO documentDAO;

    @Mock
    private Messages msgs;

    private DocumentServiceImpl documentService;

    private Long docId = 1L, versionId = 1L, tfId = 1L;
    private LocaleId localeId = LocaleId.DE;
    private String docIdString = "documentId";
    private String projectSlug = "project-slug";
    private String versionSlug = "version-slug";

    private int milestone = DocumentService.DOC_EVENT_MILESTONE;

    List<WebHook> webHooks = Lists.newArrayList();

    @BeforeMethod(firstTimeOnly = true)
    public void setup() {
        MockitoAnnotations.initMocks(this);
        documentService = new DocumentServiceImpl();
        documentService.init(projectIterationDAO, documentDAO, msgs);

        HProjectIteration version = Mockito.mock(HProjectIteration.class);
        HProject project = Mockito.mock(HProject.class);
        HDocument document = Mockito.mock(HDocument.class);

        webHooks = Lists.newArrayList();
        webHooks.add(new WebHook(project, "http://test.com"));
        webHooks.add(new WebHook(project, "http://test1.com"));

        when(projectIterationDAO.findById(versionId)).thenReturn(version);
        when(version.getProject()).thenReturn(project);
        when(version.getSlug()).thenReturn(versionSlug);
        when(project.getSlug()).thenReturn(projectSlug);
        when(project.getWebHooks()).thenReturn(webHooks);
        when(documentDAO.getById(docId)).thenReturn(document);
        when(document.getDocId()).thenReturn(docIdString);

        when(msgs.format(anyString())).thenReturn("test message");
    }

    @Test
    public void documentMilestoneEventTranslatedTest() {
        DocumentServiceImpl spyService = Mockito.spy(documentService);

        WordStatistic stats = new WordStatistic(0, 0, 0, 10, 0);
        runDocumentStatisticUpdatedTest(spyService, ContentState.New,
                ContentState.Translated, stats);

        DocumentMilestoneEvent milestoneEvent =
                new DocumentMilestoneEvent(projectSlug, versionSlug,
                        docIdString, localeId,
                        msgs.format("jsf.webhook.response.state", milestone,
                                ContentState.Translated));

        verify(spyService).publishDocumentMilestoneEvent(webHooks.get(0),
                milestoneEvent);
        verify(spyService).publishDocumentMilestoneEvent(webHooks.get(1),
                milestoneEvent);
    }

    @Test
    public void documentMilestoneEventTranslatedNot100Test() {
        DocumentServiceImpl spyService = Mockito.spy(documentService);

        WordStatistic stats = new WordStatistic(0, 1, 0, 9, 0);
        runDocumentStatisticUpdatedTest(spyService, ContentState.New,
                ContentState.Translated, stats);

        DocumentMilestoneEvent milestoneEvent =
                new DocumentMilestoneEvent(projectSlug, versionSlug,
                        docIdString, localeId,
                        msgs.format("jsf.webhook.response.state", milestone,
                                ContentState.Translated));

        verify(spyService, never()).publishDocumentMilestoneEvent(
                webHooks.get(0), milestoneEvent);
        verify(spyService, never()).publishDocumentMilestoneEvent(
                webHooks.get(1), milestoneEvent);
    }

    @Test
    public void documentMilestoneEventApprovedTest() {
        DocumentServiceImpl spyService = Mockito.spy(documentService);

        WordStatistic stats = new WordStatistic(10, 0, 0, 0, 0);
        runDocumentStatisticUpdatedTest(spyService, ContentState.Translated,
                ContentState.Approved, stats);

        DocumentMilestoneEvent milestoneEvent =
                new DocumentMilestoneEvent(projectSlug,
                        versionSlug, docIdString,
                        localeId, msgs.format("jsf.webhook.response.state",
                                milestone, ContentState.Approved));
        verify(spyService).publishDocumentMilestoneEvent(webHooks.get(0),
                milestoneEvent);
        verify(spyService).publishDocumentMilestoneEvent(webHooks.get(1),
                milestoneEvent);
    }

    @Test
    public void documentMilestoneEventApprovedNot100Test() {
        DocumentServiceImpl spyService = Mockito.spy(documentService);

        WordStatistic stats = new WordStatistic(9, 0, 0, 1, 0);
        runDocumentStatisticUpdatedTest(spyService, ContentState.Translated,
                ContentState.Approved, stats);

        DocumentMilestoneEvent milestoneEvent =
                new DocumentMilestoneEvent(projectSlug, versionSlug,
                        docIdString, localeId, msgs.format(
                                "jsf.webhook.response.state", milestone,
                                ContentState.Approved));

        verify(spyService, never()).publishDocumentMilestoneEvent(
                webHooks.get(0), milestoneEvent);
        verify(spyService, never()).publishDocumentMilestoneEvent(
                webHooks.get(1), milestoneEvent);
    }

    @Test
    public void documentMilestoneEventSameStateTest1() {
        DocumentServiceImpl spyService = Mockito.spy(documentService);
        WordStatistic stats = new WordStatistic(10, 0, 0, 0, 0);

        runDocumentStatisticUpdatedTest(spyService, ContentState.Approved,
                ContentState.Approved, stats);

        DocumentMilestoneEvent milestoneEvent =
                new DocumentMilestoneEvent(projectSlug, versionSlug,
                        docIdString, localeId, msgs.format(
                                "jsf.webhook.response.state", milestone,
                                ContentState.Approved));
        verify(spyService, never()).publishDocumentMilestoneEvent(
                webHooks.get(0), milestoneEvent);
        verify(spyService, never()).publishDocumentMilestoneEvent(
                webHooks.get(1), milestoneEvent);
    }

    @Test
    public void documentMilestoneEventSameStateTest2() {
        DocumentServiceImpl spyService = Mockito.spy(documentService);
        WordStatistic stats = new WordStatistic(0, 0, 0, 10, 0);

        runDocumentStatisticUpdatedTest(spyService, ContentState.Translated,
                ContentState.Translated, stats);

        DocumentMilestoneEvent milestoneEvent =
                new DocumentMilestoneEvent(projectSlug, versionSlug,
                        docIdString, localeId, msgs.format(
                                "jsf.webhook.response.state", milestone,
                                ContentState.Translated));
        verify(spyService, never()).publishDocumentMilestoneEvent(
                webHooks.get(0), milestoneEvent);
        verify(spyService, never()).publishDocumentMilestoneEvent(
                webHooks.get(1), milestoneEvent);
    }

    private void runDocumentStatisticUpdatedTest(
            DocumentServiceImpl spyService,
            ContentState oldState, ContentState newState, WordStatistic stats) {

        int wordCount = 10;
        WordStatistic oldStats = StatisticsUtil.copyWordStatistic(stats);
        oldStats.decrement(newState, wordCount);
        oldStats.increment(oldState, wordCount);

        DocumentStatisticUpdatedEvent event =
                new DocumentStatisticUpdatedEvent(oldStats, stats, versionId,
                        docId, localeId, oldState, newState);

        spyService.documentStatisticUpdated(event);
    }
}
TOP

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

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.