Package org.nuxeo.ecm.social.workspace.service

Source Code of org.nuxeo.ecm.social.workspace.service.TestSocialWorkspaceComponent

/*
* (C) Copyright 2006-2011 Nuxeo SAS (http://nuxeo.com/) and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser General Public License
* (LGPL) version 2.1 which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/lgpl-2.1.html
*
* This library 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.
*
* Contributors:
*     Nuxeo - initial API and implementation
*/
package org.nuxeo.ecm.social.workspace.service;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import com.google.inject.Inject;
import org.junit.Before;
import org.junit.Test;
import org.nuxeo.common.collections.ScopeType;
import org.nuxeo.ecm.core.api.ClientException;
import org.nuxeo.ecm.core.api.DocumentModel;
import org.nuxeo.ecm.core.api.PathRef;
import org.nuxeo.ecm.core.event.EventService;
import org.nuxeo.ecm.core.test.DefaultRepositoryInit;
import org.nuxeo.ecm.core.test.annotations.RepositoryConfig;
import org.nuxeo.ecm.platform.ec.notification.service.NotificationServiceHelper;
import org.nuxeo.ecm.platform.url.api.DocumentViewCodecManager;
import org.nuxeo.ecm.social.workspace.AbstractSocialWorkspaceTest;
import org.nuxeo.ecm.social.workspace.adapters.SocialWorkspace;
import org.nuxeo.runtime.api.Framework;
import org.nuxeo.runtime.test.runner.Deploy;
import org.nuxeo.runtime.test.runner.LocalDeploy;

@RepositoryConfig(init = DefaultRepositoryInit.class)
@Deploy({ "org.nuxeo.ecm.automation.core", "org.nuxeo.ecm.automation.features",
        "org.nuxeo.ecm.platform.url.api", "org.nuxeo.ecm.platform.url.core",
        "org.nuxeo.ecm.platform.notification.core", "org.nuxeo.ecm.user.invite",
        "org.nuxeo.ecm.user.registration" })
@LocalDeploy({
        "org.nuxeo.ecm.social.workspace.core:test-social-workspace-listener-contrib.xml",
        "org.nuxeo.ecm.social.workspace.core:test-social-workspace-service-contrib.xml",
        "org.nuxeo.ecm.social.workspace.core:test-social-workspace-usermanager-contrib.xml",
        "org.nuxeo.ecm.social.workspace.core:test-user-registration-contrib.xml"})
public class TestSocialWorkspaceComponent extends AbstractSocialWorkspaceTest {

    @Inject
    SocialWorkspaceService socialWorkspaceService;

    @Inject
    EventService eventService;

    @Before
    public void testSetUp() {
        ImportEventListener.reset();
    }

    @Test
    public void testService() {
        // Services needed for testing SendMail operation
        assertNotNull(Framework.getLocalService(DocumentViewCodecManager.class));
        assertNotNull(NotificationServiceHelper.getNotificationService());
    }

    @Test
    public void testAddSeveralSocialWorkspaceMembers() throws Exception {
        assertEquals(0, ImportEventListener.getMemberAddedCount());
        SocialWorkspace socialWorkspace = createSocialWorkspace("Social workspace for test");
        assertTrue(socialWorkspace.isMembersNotificationEnabled());

        String userAlreadyMember1Email = "userAlreadyMember1@mail.net";
        DocumentModel userAlreadyMember1 = createUserForTest(
                userAlreadyMember1Email, "userAlreadyMember1");
        socialWorkspace.addMember(userManager.getPrincipal(userAlreadyMember1.getId()));
        assertEquals(2, ImportEventListener.getMemberAddedCount());

        socialWorkspace.getDocument().putContextData(ScopeType.REQUEST,
                "memberNotificationDisabled", true);
        assertFalse(socialWorkspace.isMembersNotificationEnabled());

        DocumentModel userAlreadyMember2 = createUserForTest(
                "userAlreadyMember2@mail.net", "userAlreadyMember2");
        socialWorkspace.addMember(userManager.getPrincipal(userAlreadyMember2.getId()));

        assertEquals(2, ImportEventListener.getMemberAddedCount());
        socialWorkspace.getDocument().putContextData(ScopeType.REQUEST,
                "memberNotificationDisabled", false);

        DocumentModel fulltextEmailUser1 = createUserForTest(
                "fulltextEmailUser1@mail.net", "fulltextEmailUser1");

        String userNewMember1Email = "userNewMember1@mail.net";
        createUserForTest(userNewMember1Email, "userNewMember1");
        createUserForTest("userNewMember2@mail.net", "userNewMember2");

        String nonExsitingUser1Email = "nonExistingUser1@mail.net";
        List<String> emails = Arrays.asList(userAlreadyMember1Email,
                "userAlreadyMember2@mail.net", "userNewMember1@mail.net",
                "userNewMember2@mail.net", nonExsitingUser1Email,
                "nonExistingUser2@mail.net", fulltextEmailUser1.getId());

        Framework.getLocalService(EventService.class).waitForAsyncCompletion();

        List<String> addedUsers = socialWorkspaceService.addSocialWorkspaceMembers(
                socialWorkspace, emails);
        assertEquals(3, socialWorkspace.getMembers().size());
        assertTrue(socialWorkspace.isAdministratorOrMember(userManager.getPrincipal("userAlreadyMember1")));
        assertEquals(3, addedUsers.size());
        assertEquals(5, ImportEventListener.getMemberAddedCount());
        assertEquals(3, ImportEventListener.getLastPrincipalsCount());
        assertFalse(addedUsers.contains(userAlreadyMember1Email));
        assertFalse(addedUsers.contains(nonExsitingUser1Email));
        assertTrue(addedUsers.contains(userNewMember1Email));

        session.save();

        addedUsers = socialWorkspaceService.addSocialWorkspaceMembers(
                socialWorkspace, new ArrayList<String>());
        assertTrue(addedUsers.isEmpty());
    }

    @Test(expected = ClientException.class)
    public void testaddSocialWorkspaceMembersFromGroup() throws Exception {
        assertEquals(0, ImportEventListener.getMemberAddedCount());

        String existingUser1 = "userAlreadyMember1";
        String existingUser2 = "userAlreadyMember2";

        DocumentModel group1 = userManager.getBareGroupModel();
        group1.setPropertyValue(userManager.getGroupSchemaName() + ":"
                + userManager.getGroupIdField(), "group1");
        List<String> members = Arrays.asList(existingUser1, existingUser2,
                "Administrator", "unknown");
        group1.setProperty(userManager.getGroupSchemaName(),
                userManager.getGroupMembersField(), members);

        group1 = userManager.createGroup(group1);
        members = (List<String>) group1.getPropertyValue(userManager.getGroupSchemaName()
                + ":" + userManager.getGroupMembersField());
        assertEquals(4, members.size());

        SocialWorkspace sw = createSocialWorkspace("SocialWorkspaceWithGroup");
        assertEquals(1, sw.getMembers().size());

        int beforeImportCount = ImportEventListener.getMemberAddedCount();
        sw.getDocument().putContextData("allowMemberNotification", false);
        List<String> imported = socialWorkspaceService.addSocialWorkspaceMembers(
                sw, group1.getName());
        assertEquals(2, imported.size());
        assertEquals(beforeImportCount,
                ImportEventListener.getMemberAddedCount());
        assertTrue(imported.contains(existingUser1));
        assertTrue(imported.contains(existingUser2));
        assertFalse(imported.contains("Administrator"));

        assertEquals(3, sw.getMembers().size());

        // Will throw a ClientException
        socialWorkspaceService.addSocialWorkspaceMembers(sw, "john_doe_group");
    }

    @Test
    public void testSocialWorkspaceContainer() throws ClientException {
        assertTrue(session.exists(new PathRef("/collaboration")));
        DocumentModel container = socialWorkspaceService.getSocialWorkspaceContainer(session);
        assertEquals("Collaboration", container.getTitle());
        assertEquals("/",
                session.getDocument(container.getParentRef()).getPathAsString());
    }

    protected DocumentModel createUserForTest(String userEmail, String userId)
            throws ClientException {
        DocumentModel user = userManager.getBareUserModel();
        user.setPropertyValue(userManager.getUserSchemaName() + ":"
                + userManager.getUserEmailField(), userEmail);
        user.setPropertyValue(userManager.getUserSchemaName() + ":"
                + userManager.getUserIdField(), userId);

        return userManager.createUser(user);
    }

}
TOP

Related Classes of org.nuxeo.ecm.social.workspace.service.TestSocialWorkspaceComponent

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.