Package org.zanata.webtrans.server.rpc

Source Code of org.zanata.webtrans.server.rpc.ActivateWorkspaceHandlerTest

package org.zanata.webtrans.server.rpc;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Matchers.isA;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import net.customware.gwt.dispatch.server.ExecutionContext;

import org.hamcrest.Matchers;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import org.zanata.dao.AccountDAO;
import org.zanata.dao.ProjectDAO;
import org.zanata.dao.ProjectIterationDAO;
import org.zanata.model.HAccount;
import org.zanata.model.HLocale;
import org.zanata.model.HProject;
import org.zanata.model.HProjectIteration;
import org.zanata.model.TestFixture;
import org.zanata.seam.SeamAutowire;
import org.zanata.security.ZanataIdentity;
import org.zanata.service.GravatarService;
import org.zanata.service.LocaleService;
import org.zanata.webtrans.client.presenter.UserConfigHolder;
import org.zanata.webtrans.client.resources.ValidationMessages;
import org.zanata.webtrans.server.TranslationWorkspace;
import org.zanata.webtrans.server.TranslationWorkspaceManager;
import org.zanata.webtrans.server.locale.Gwti18nReader;
import org.zanata.webtrans.shared.auth.EditorClientId;
import org.zanata.webtrans.shared.auth.Identity;
import org.zanata.webtrans.shared.model.Person;
import org.zanata.webtrans.shared.model.ProjectIterationId;
import org.zanata.webtrans.shared.model.UserWorkspaceContext;
import org.zanata.webtrans.shared.model.ValidationAction;
import org.zanata.webtrans.shared.model.ValidationAction.State;
import org.zanata.webtrans.shared.model.ValidationId;
import org.zanata.webtrans.shared.model.WorkspaceContext;
import org.zanata.webtrans.shared.model.WorkspaceId;
import org.zanata.webtrans.shared.rpc.ActivateWorkspaceAction;
import org.zanata.webtrans.shared.rpc.ActivateWorkspaceResult;
import org.zanata.webtrans.shared.rpc.EnterWorkspace;
import org.zanata.webtrans.shared.rpc.GetValidationRulesAction;
import org.zanata.webtrans.shared.rpc.GetValidationRulesResult;
import org.zanata.webtrans.shared.rpc.LoadOptionsAction;
import org.zanata.webtrans.shared.rpc.LoadOptionsResult;
import org.zanata.webtrans.shared.validation.ValidationFactory;

/**
* @author Patrick Huang <a
*         href="mailto:pahuang@redhat.com">pahuang@redhat.com</a>
*/
@Test(groups = "unit-tests")
public class ActivateWorkspaceHandlerTest {
    public static final String HTTP_SESSION_ID = "httpSessionId";
    private ActivateWorkspaceHandler handler;
    @Mock
    private ZanataIdentity identity;
    @Mock
    private TranslationWorkspaceManager translationWorkspaceManager;
    @Mock
    private WorkspaceContext workspaceContext;
    @Mock
    private TranslationWorkspace translationWorkspace;
    @Mock
    private GravatarService gravatarServiceImpl;
    @Mock
    private AccountDAO accountDAO;
    @Mock
    private ProjectDAO projectDAO;
    @Mock
    private ProjectIterationDAO projectIterationDAO;
    @Mock
    private LocaleService localeServiceImpl;
    private Person person;
    @Mock
    private HAccount hAccount;
    @Captor
    private ArgumentCaptor<EnterWorkspace> enterWorkspaceEventCaptor;
    @Captor
    private ArgumentCaptor<EditorClientId> editorClientIdCaptor;
    @Mock
    private LoadOptionsHandler loadOptionsHandler;
    @Mock
    private GetValidationRulesHandler getValidationRulesHandler;

    private ValidationFactory validationFactory;

    @BeforeMethod
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
        // @formatter:off
        ActivateWorkspaceHandler activateWorkspaceHandler = SeamAutowire.instance()
            .reset()
            .use("identity", identity)
            .use("translationWorkspaceManager", translationWorkspaceManager)
            .use("accountDAO", accountDAO)
            .use("projectDAO", projectDAO)
            .use("projectIterationDAO", projectIterationDAO)
            .use("localeServiceImpl", localeServiceImpl)
            .use("webtrans.gwt.LoadOptionsHandler", loadOptionsHandler)
            .use("webtrans.gwt.GetValidationRulesHandler", getValidationRulesHandler)
            .ignoreNonResolvable()
            .autowire(ActivateWorkspaceHandler.class);
        // @formatter:on
        handler = spy(activateWorkspaceHandler);
        person = TestFixture.person();
        doReturn(person).when(handler).retrievePerson();
        doReturn(HTTP_SESSION_ID).when(handler).getHttpSessionId();

        ValidationMessages message =
                Gwti18nReader.create(ValidationMessages.class);
        validationFactory = new ValidationFactory(message);
    }

    @Test
    public void testExecute() throws Exception {
        WorkspaceId workspaceId = TestFixture.workspaceId();
        ActivateWorkspaceAction action =
                new ActivateWorkspaceAction(workspaceId);
        when(translationWorkspaceManager.getOrRegisterWorkspace(workspaceId))
                .thenReturn(translationWorkspace);
        HLocale hLocale = new HLocale(workspaceId.getLocaleId());
        when(localeServiceImpl.getByLocaleId(workspaceId.getLocaleId()))
                .thenReturn(hLocale);
        ProjectIterationId projectIterationId =
                workspaceId.getProjectIterationId();
        HProject hProject = new HProject();
        when(projectDAO.getBySlug(projectIterationId.getProjectSlug()))
                .thenReturn(hProject);
        HProjectIteration hProjectIteration = new HProjectIteration();
        when(
                projectIterationDAO.getBySlug(
                        projectIterationId.getProjectSlug(),
                        projectIterationId.getIterationSlug())).thenReturn(
                hProjectIteration);
        when(identity.hasPermission("modify-translation", hProject, hLocale))
                .thenReturn(true);
        when(identity.hasPermission("glossary-update", "")).thenReturn(true);
        LoadOptionsResult optionsResult =
                new LoadOptionsResult(new UserConfigHolder().getState());
        when(
                loadOptionsHandler.execute(isA(LoadOptionsAction.class),
                        any(ExecutionContext.class))).thenReturn(optionsResult);

        when(translationWorkspace.getWorkspaceContext()).thenReturn(
                workspaceContext);
        when(workspaceContext.getWorkspaceId()).thenReturn(workspaceId);

        Collection<ValidationAction> validationList =
                validationFactory.getAllValidationActions().values();
        Map<ValidationId, State> validationStates =
                new HashMap<ValidationId, State>();
        for (ValidationAction valAction : validationList) {
            validationStates.put(valAction.getId(), valAction.getState());
        }

        GetValidationRulesResult validationResult =
                new GetValidationRulesResult(validationStates);
        when(
                getValidationRulesHandler.execute(
                        isA(GetValidationRulesAction.class),
                        any(ExecutionContext.class))).thenReturn(
                validationResult);

        ActivateWorkspaceResult result = handler.execute(action, null);

        verify(identity).checkLoggedIn();
        verify(translationWorkspace).addEditorClient(eq(HTTP_SESSION_ID),
                editorClientIdCaptor.capture(), eq(person.getId()));
        EditorClientId editorClientId = editorClientIdCaptor.getValue();
        assertThat(editorClientId.getHttpSessionId(),
                Matchers.equalTo(HTTP_SESSION_ID));

        verify(translationWorkspace).publish(
                enterWorkspaceEventCaptor.capture());
        EnterWorkspace enterWorkspace = enterWorkspaceEventCaptor.getValue();
        assertThat(enterWorkspace.getPerson(), Matchers.equalTo(person));
        assertThat(enterWorkspace.getEditorClientId(),
                Matchers.equalTo(editorClientId));

        Identity userIdentity = result.getIdentity();
        assertThat(userIdentity.getPerson(), Matchers.equalTo(person));
        assertThat(userIdentity.getEditorClientId(),
                Matchers.equalTo(editorClientId));

        UserWorkspaceContext userWorkspaceContext =
                result.getUserWorkspaceContext();
        assertThat(userWorkspaceContext.getWorkspaceRestrictions()
                .isHasGlossaryUpdateAccess(), Matchers.equalTo(true));
        assertThat(userWorkspaceContext.getWorkspaceRestrictions()
                .isProjectActive(), Matchers.equalTo(true));
        assertThat(userWorkspaceContext.getWorkspaceRestrictions()
                .isHasEditTranslationAccess(), Matchers.equalTo(true));

        assertThat(result.getStoredUserConfiguration(),
                Matchers.sameInstance(optionsResult.getConfiguration()));
    }

    @Test
    public void testRollback() throws Exception {
        handler.rollback(null, null, null);
    }
}
TOP

Related Classes of org.zanata.webtrans.server.rpc.ActivateWorkspaceHandlerTest

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.