Package org.nuxeo.ecm.social.workspace

Source Code of org.nuxeo.ecm.social.workspace.TestVisibilityManagement

/*
* (C) Copyright 2006-2011 Nuxeo SA (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:
*     ronan
*/
package org.nuxeo.ecm.social.workspace;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.nuxeo.ecm.core.api.security.SecurityConstants.EVERYTHING;
import static org.nuxeo.ecm.core.api.security.SecurityConstants.READ;
import static org.nuxeo.ecm.core.api.security.SecurityConstants.READ_WRITE;
import static org.nuxeo.ecm.social.workspace.SocialConstants.ARTICLE_TYPE;
import static org.nuxeo.ecm.social.workspace.SocialConstants.NEWS_ITEM_TYPE;
import static org.nuxeo.ecm.social.workspace.SocialConstants.SOCIAL_DOCUMENT_FACET;
import static org.nuxeo.ecm.social.workspace.SocialConstants.SOCIAL_DOCUMENT_IS_PUBLIC_PROPERTY;
import static org.nuxeo.ecm.social.workspace.helper.SocialWorkspaceHelper.toSocialDocument;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Before;
import org.junit.Test;
import org.nuxeo.ecm.core.api.ClientException;
import org.nuxeo.ecm.core.api.DocumentModel;
import org.nuxeo.ecm.core.api.NuxeoPrincipal;
import org.nuxeo.ecm.core.event.EventService;
import org.nuxeo.ecm.platform.usermanager.NuxeoPrincipalImpl;
import org.nuxeo.ecm.social.workspace.adapters.SocialDocument;
import org.nuxeo.ecm.social.workspace.adapters.SocialWorkspace;
import org.nuxeo.runtime.test.runner.Deploy;
import org.nuxeo.runtime.test.runner.LocalDeploy;

import com.google.inject.Inject;

/**
* @author <a href="mailto:rlegall@nuxeo.com">Ronan Le Gall</a>
*/
// no listener configured
@Deploy({ "org.nuxeo.ecm.automation.core", "org.nuxeo.ecm.automation.features" })
@LocalDeploy("org.nuxeo.ecm.automation.core:override-social-workspace-operation-chains-contrib.xml")
public class TestVisibilityManagement extends AbstractSocialWorkspaceTest {

    public static final String SOCIAL_WORKSPACE_NAME = "sws";

    private static final Log log = LogFactory.getLog(TestVisibilityManagement.class);

    @Inject
    protected EventService eventService;

    protected DocumentModel socialWorkspaceDoc;

    protected SocialWorkspace socialWorkspace;

    protected NuxeoPrincipal notMember;

    protected NuxeoPrincipal member;

    protected NuxeoPrincipal administrator;

    @Before
    public void setUp() throws Exception {
        socialWorkspace = createSocialWorkspace(SOCIAL_WORKSPACE_NAME, true);
        socialWorkspaceDoc = socialWorkspace.getDocument();

        String membersGroup = socialWorkspace.getMembersGroupName();
        String administratorsGroup = socialWorkspace.getAdministratorsGroupName();

        notMember = new NuxeoPrincipalImpl("notMember");
        member = createUserWithGroup("member", membersGroup);
        assertTrue(member.getAllGroups().contains(membersGroup));
        administrator = createUserWithGroup("administratorOfSW",
                administratorsGroup);
    }

    @Test
    public void testShouldNotBeSocialDocument() throws Exception {
        DocumentModel outOfSocialWorkspace = createDocument("/",
                "wrong place of creation", ARTICLE_TYPE);
        assertNull(toSocialDocument(outOfSocialWorkspace));
    }

    @Test
    public void shouldCreatePrivateProxyForSocialDocumentPrivate()
            throws Exception {
        DocumentModel privateNews = createSocialDocument(
                socialWorkspaceDoc.getPathAsString(), "private news",
                NEWS_ITEM_TYPE, false);
        SocialDocument socialDocument = toSocialDocument(privateNews);

        assertTrue(socialDocument.isDocumentInSocialWorkspace());
        assertTrue(socialDocument.isRestrictedToMembers());
        assertFalse(socialDocument.isPublic());
        assertNull(socialDocument.getPublicDocument());
        assertNotNull(socialDocument.getRestrictedDocument());
        assertTrue(socialDocument.getRestrictedDocument().isProxy());
        checkRestricted(socialDocument.getRestrictedDocument());

        socialDocument.makePublic();
        assertFalse(socialDocument.isRestrictedToMembers());
        assertTrue(socialDocument.isPublic());
        assertNotNull(socialDocument.getPublicDocument());
        assertNull(socialDocument.getRestrictedDocument());
        assertTrue(socialDocument.getPublicDocument().isProxy());
        checkPublic(socialDocument.getPublicDocument());

        socialDocument.restrictToMembers();
        assertTrue(socialDocument.isRestrictedToMembers());
        assertFalse(socialDocument.isPublic());
        assertNull(socialDocument.getPublicDocument());
        assertNotNull(socialDocument.getRestrictedDocument());
        assertTrue(socialDocument.getRestrictedDocument().isProxy());
        checkRestricted(socialDocument.getRestrictedDocument());
    }

    @Test
    public void shouldCreatePrivateProxyForSocialDocumentWithFacetAdded()
            throws Exception {
        DocumentModel socialDocumentFacetedNotePrivate = session.createDocumentModel(
                socialWorkspaceDoc.getPathAsString(), "Social Document Note1",
                "Note");
        socialDocumentFacetedNotePrivate.addFacet(SOCIAL_DOCUMENT_FACET);
        socialDocumentFacetedNotePrivate = session.createDocument(socialDocumentFacetedNotePrivate);
        session.save();
        eventService.waitForAsyncCompletion();
        session.save();
        socialDocumentFacetedNotePrivate = session.getDocument(socialDocumentFacetedNotePrivate.getRef());

        SocialDocument socialDocument = toSocialDocument(socialDocumentFacetedNotePrivate);
        assertTrue(socialDocument.isRestrictedToMembers());
        assertFalse(socialDocument.isPublic());
        assertNull(socialDocument.getPublicDocument());
        assertNotNull(socialDocument.getRestrictedDocument());
        assertTrue(socialDocument.getRestrictedDocument().isProxy());
        checkRestricted(socialDocument.getRestrictedDocument());

        DocumentModel socialDocumentFacetedNotePublic = session.createDocumentModel(
                socialWorkspaceDoc.getPathAsString(), "Social Document Note2",
                "Note");
        socialDocumentFacetedNotePublic.addFacet(SOCIAL_DOCUMENT_FACET);
        socialDocumentFacetedNotePublic.setPropertyValue(
                SOCIAL_DOCUMENT_IS_PUBLIC_PROPERTY, true);
        socialDocumentFacetedNotePublic = session.createDocument(socialDocumentFacetedNotePublic);
        session.save();
        eventService.waitForAsyncCompletion();
        session.save();
        socialDocumentFacetedNotePublic = session.getDocument(socialDocumentFacetedNotePublic.getRef());

        socialDocument = toSocialDocument(socialDocumentFacetedNotePublic);
        assertFalse(socialDocument.isRestrictedToMembers());
        assertTrue(socialDocument.isPublic());
        assertNotNull(socialDocument.getPublicDocument());
        assertTrue(socialDocument.getPublicDocument().isProxy());
        assertNull(socialDocument.getRestrictedDocument());
        checkPublic(socialDocument.getPublicDocument());
    }

    @Test
    public void shouldCreatePrivateProxyForSocialDocumentPublic()
            throws Exception {
        DocumentModel privateNews = createSocialDocument(
                socialWorkspaceDoc.getPathAsString(), "private news",
                NEWS_ITEM_TYPE, true);

        SocialDocument socialDocument = toSocialDocument(privateNews);

        assertFalse(socialDocument.isRestrictedToMembers());
        assertTrue(socialDocument.isPublic());
        assertNotNull(socialDocument.getPublicDocument());
        assertNull(socialDocument.getRestrictedDocument());
        assertTrue(socialDocument.getPublicDocument().isProxy());
        checkPublic(socialDocument.getPublicDocument());

        socialDocument.restrictToMembers();
        assertTrue(socialDocument.isDocumentInSocialWorkspace());
        assertTrue(socialDocument.isRestrictedToMembers());
        assertFalse(socialDocument.isPublic());
        assertNull(socialDocument.getPublicDocument());
        assertNotNull(socialDocument.getRestrictedDocument());
        assertTrue(socialDocument.getRestrictedDocument().isProxy());
        checkRestricted(socialDocument.getRestrictedDocument());

        socialDocument.makePublic();
        assertFalse(socialDocument.isRestrictedToMembers());
        assertTrue(socialDocument.isPublic());
        assertNotNull(socialDocument.getPublicDocument());
        assertNull(socialDocument.getRestrictedDocument());
        assertTrue(socialDocument.getPublicDocument().isProxy());
        checkPublic(socialDocument.getPublicDocument());
    }

    @Test
    public void shouldNotCreatePrivateProxyForArticlePrivate() throws Exception {
        DocumentModel privateArticle = createSocialDocument(
                socialWorkspaceDoc.getPathAsString(), "privatenews",
                ARTICLE_TYPE, false);

        SocialDocument socialDocument = toSocialDocument(privateArticle);

        assertTrue(socialDocument.isDocumentInSocialWorkspace());
        assertTrue(socialDocument.isRestrictedToMembers());
        assertFalse(socialDocument.isPublic());
        assertNull(socialDocument.getPublicDocument());
        assertNotNull(socialDocument.getRestrictedDocument());
        assertFalse(socialDocument.getRestrictedDocument().isProxy());
        checkRestricted(socialDocument.getRestrictedDocument());

        socialDocument.makePublic();
        assertFalse(socialDocument.isRestrictedToMembers());
        assertTrue(socialDocument.isPublic());
        assertNull(socialDocument.getRestrictedDocument());
        assertNotNull(socialDocument.getPublicDocument());
        assertTrue(socialDocument.getPublicDocument().isProxy());
        checkPublic(socialDocument.getPublicDocument());

        socialDocument.restrictToMembers();
        assertTrue(socialDocument.isRestrictedToMembers());
        assertFalse(socialDocument.isPublic());
        assertNull(socialDocument.getPublicDocument());
        assertNotNull(socialDocument.getRestrictedDocument());
        assertFalse(socialDocument.getRestrictedDocument().isProxy());
        checkRestricted(socialDocument.getRestrictedDocument());

    }

    @Test
    public void shouldNotCreatePrivateProxyForArticlePublic() throws Exception {
        DocumentModel privateArticle = createSocialDocument(
                socialWorkspaceDoc.getPathAsString(), "privatenews",
                ARTICLE_TYPE, true);

        SocialDocument socialDocument = toSocialDocument(privateArticle);

        assertFalse(socialDocument.isRestrictedToMembers());
        assertTrue(socialDocument.isPublic());
        assertNull(socialDocument.getRestrictedDocument());
        assertNotNull(socialDocument.getPublicDocument());
        assertTrue(socialDocument.getPublicDocument().isProxy());
        checkPublic(socialDocument.getPublicDocument());

        socialDocument.restrictToMembers();
        assertTrue(socialDocument.isDocumentInSocialWorkspace());
        assertTrue(socialDocument.isRestrictedToMembers());
        assertFalse(socialDocument.isPublic());
        assertNull(socialDocument.getPublicDocument());
        assertNotNull(socialDocument.getRestrictedDocument());
        assertFalse(socialDocument.getRestrictedDocument().isProxy());
        checkRestricted(socialDocument.getRestrictedDocument());

        socialDocument.makePublic();
        assertFalse(socialDocument.isRestrictedToMembers());
        assertTrue(socialDocument.isPublic());
        assertNull(socialDocument.getRestrictedDocument());
        assertNotNull(socialDocument.getPublicDocument());
        assertTrue(socialDocument.getPublicDocument().isProxy());
        checkPublic(socialDocument.getPublicDocument());
    }

    protected void checkPublic(DocumentModel doc) throws ClientException {
        assertTrue(session.hasPermission(notMember, doc.getRef(), READ));
        assertFalse(session.hasPermission(notMember, doc.getRef(), READ_WRITE));
        assertTrue(session.hasPermission(member, doc.getRef(), READ_WRITE));
        assertTrue(session.hasPermission(administrator, doc.getRef(),
                EVERYTHING));
    }

    protected void checkRestricted(DocumentModel doc) throws ClientException {
        assertFalse(session.hasPermission(notMember, doc.getRef(), READ));
        assertTrue(session.hasPermission(member, doc.getRef(), READ_WRITE));
        assertTrue(session.hasPermission(administrator, doc.getRef(),
                EVERYTHING));
    }

}
TOP

Related Classes of org.nuxeo.ecm.social.workspace.TestVisibilityManagement

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.