/* * * Copyright (C) 2007-2015 Licensed to the Comunes Association (CA) under * one or more contributor license agreements (see COPYRIGHT for details). * The CA licenses this file to you under the GNU Affero General Public * License version 3, (the "License"); you may not use this file except in * compliance with the License. This file is part of kune. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ package cc.kune.gspace.client.share; import static cc.kune.core.shared.dto.GroupListDTO.*; import static cc.kune.docs.shared.DocsToolConstants.TYPE_DOCUMENT; import static cc.kune.wiki.shared.WikiToolConstants.TYPE_WIKIPAGE; import static org.junit.Assert.*; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.Set; import org.junit.Before; import org.junit.Test; import org.mockito.InOrder; import org.mockito.Mockito; import cc.kune.core.shared.dto.AccessListsDTO; import cc.kune.core.shared.dto.GroupDTO; import cc.kune.core.shared.dto.GroupListDTO; import cc.kune.core.shared.dto.GroupType; import cc.kune.gspace.client.actions.share.ShareMenu; import cc.kune.lists.shared.ListsToolConstants; public class ShareDialogHelperTest { private static final String DOMAIN = "example.com"; private static final String EVERYONE_IN_WAVE = "@" + DOMAIN; private static final String SOMEBODY1 = "somebody1@example.com"; private static final String SOMEBODY2 = "somebody2@example.com"; private GroupDTO currentGroup; private String currentUser; private GroupDTO group1; private String group1address; private GroupDTO group2; private String group2address; private GroupDTO group3; private ShareDialogHelper helper; private ArrayList<String> participants; private ShareToListView shareToList; private InOrder shareToListInOrder; private ShareToOthersView shareToOthers; private ShareToTheNetView shareToTheNet; private AccessListsDTO acl(final GroupListDTO adminList, final GroupListDTO editorList, final GroupListDTO viewerList) { final AccessListsDTO acl = acl(NORMAL, NORMAL, NORMAL); acl.setAdmins(adminList); acl.setEditors(editorList); acl.setViewers(viewerList); return acl; } private AccessListsDTO acl(final GroupListDTO adminList, final GroupListDTO editorList, final String viewMode) { final AccessListsDTO acl = acl(NORMAL, NORMAL, viewMode); acl.setAdmins(adminList); acl.setEditors(editorList); return acl; } private AccessListsDTO acl(final GroupListDTO adminList, final String editMode, final String viewMode) { final AccessListsDTO acl = acl(NORMAL, editMode, viewMode); acl.setAdmins(adminList); return acl; } @SuppressWarnings("unused") private AccessListsDTO acl(final String adminMode, final String editorMode, final GroupListDTO viewList) { final AccessListsDTO acl = acl(adminMode, editorMode, NORMAL); acl.setViewers(viewList); return acl; } private AccessListsDTO acl(final String adminMode, final String editMode, final String viewMode) { final GroupListDTO adminsList = new GroupListDTO(); final GroupListDTO editorsList = new GroupListDTO(); final GroupListDTO viewList = new GroupListDTO(); adminsList.setMode(adminMode); editorsList.setMode(editMode); viewList.setMode(viewMode); final AccessListsDTO acl = new AccessListsDTO(adminsList, editorsList, viewList); return acl; } @Before public void before() { shareToOthers = Mockito.mock(ShareToOthersView.class); shareToList = Mockito.mock(ShareToListView.class); shareToTheNet = Mockito.mock(ShareToTheNetView.class); final ShareMenu menuBtn = Mockito.mock(ShareMenu.class); currentGroup = new GroupDTO("current", "current", GroupType.PROJECT); group1 = new GroupDTO("shortname1", "longname 1", GroupType.PROJECT); group2 = new GroupDTO("shortname2", "longname 2", GroupType.PROJECT); group3 = new GroupDTO("shortname3", "longname 3", GroupType.PROJECT); helper = new ShareDialogHelper(shareToList, shareToTheNet, shareToOthers, menuBtn); assertTrue(helper.isNotInitialized()); helper.init(DOMAIN); assertFalse(helper.isNotInitialized()); shareToListInOrder = Mockito.inOrder(shareToList); participants = new ArrayList<String>(); participants.add(SOMEBODY1); participants.add(SOMEBODY2); group1address = group1.getShortName() + "@" + DOMAIN; currentUser = group1address; group2address = group2.getShortName() + "@" + DOMAIN; } private GroupListDTO list(final GroupDTO... groups) { final Set<GroupDTO> set = new LinkedHashSet<GroupDTO>(); for (final GroupDTO group : groups) { set.add(group); } final GroupListDTO gList = new GroupListDTO(set); gList.setMode(NORMAL); return gList; } @Test public void whenEveryone() { final AccessListsDTO acl = acl(EVERYONE, EVERYONE, EVERYONE); helper.setState(currentGroup, currentUser, acl, TYPE_DOCUMENT); Mockito.verify(shareToTheNet, Mockito.times(1)).setVisible(true); Mockito.verify(shareToOthers, Mockito.times(1)).setVisible(false); } @Test public void whenShareDocToEmptyListNobody() { final AccessListsDTO acl = acl(list(currentGroup, group1, group2), list(), NOBODY); helper.setState(currentGroup, currentUser, acl, TYPE_DOCUMENT); shareToListInOrder.verify(shareToList, Mockito.times(1)).addOwner(currentGroup); shareToListInOrder.verify(shareToList, Mockito.times(1)).addAdmin(group1); shareToListInOrder.verify(shareToList, Mockito.times(1)).addAdmin(group2); shareToListInOrder.verify(shareToList, Mockito.times(1)).addNotEditableByOthers(); shareToListInOrder.verify(shareToList, Mockito.times(1)).addNotVisibleByOthers(); Mockito.verify(shareToTheNet, Mockito.times(1)).setVisible(false); Mockito.verify(shareToOthers, Mockito.times(1)).setVisible(true); } @Test public void whenShareDocToEveryOneEveryOne() { final AccessListsDTO acl = acl(list(currentGroup, group1, group2, group3), EVERYONE, EVERYONE); helper.setState(currentGroup, currentUser, acl, TYPE_DOCUMENT); shareToListInOrder.verify(shareToList, Mockito.times(1)).addOwner(currentGroup); shareToListInOrder.verify(shareToList, Mockito.times(1)).addAdmin(group1); shareToListInOrder.verify(shareToList, Mockito.times(1)).addAdmin(group2); shareToListInOrder.verify(shareToList, Mockito.times(1)).addAdmin(group3); shareToListInOrder.verify(shareToList, Mockito.times(1)).addEditableByAnyone(); shareToListInOrder.verify(shareToList, Mockito.times(1)).addVisibleByAnyone(); Mockito.verify(shareToTheNet, Mockito.times(1)).setVisible(true); Mockito.verify(shareToOthers, Mockito.times(1)).setVisible(false); } @Test public void whenShareDocToListEveryone() { final AccessListsDTO acl = acl(list(currentGroup, group1), list(), EVERYONE); helper.setState(currentGroup, currentUser, acl, TYPE_DOCUMENT); Mockito.verify(shareToTheNet, Mockito.times(1)).setVisible(true); Mockito.verify(shareToOthers, Mockito.times(1)).setVisible(true); } @Test public void whenShareDocToListListEmpty() { final AccessListsDTO acl = acl(list(currentGroup, group1), list(group2), list()); helper.setState(currentGroup, currentUser, acl, TYPE_DOCUMENT); shareToListInOrder.verify(shareToList, Mockito.times(1)).addOwner(currentGroup); shareToListInOrder.verify(shareToList, Mockito.times(1)).addAdmin(group1); shareToListInOrder.verify(shareToList, Mockito.times(1)).addEditor(group2); shareToListInOrder.verify(shareToList, Mockito.times(0)).addNotEditableByOthers(); shareToListInOrder.verify(shareToList, Mockito.times(1)).addNotVisibleByOthers(); Mockito.verify(shareToTheNet, Mockito.times(1)).setVisible(false); Mockito.verify(shareToOthers, Mockito.times(1)).setVisible(true); } @Test public void whenShareDocToListListList() { final AccessListsDTO acl = acl(list(group1), list(group2), list(group3)); helper.setState(currentGroup, currentUser, acl, TYPE_DOCUMENT); shareToListInOrder.verify(shareToList, Mockito.times(1)).addOwner(currentGroup); shareToListInOrder.verify(shareToList, Mockito.times(1)).addAdmin(group1); shareToListInOrder.verify(shareToList, Mockito.times(1)).addEditor(group2); shareToListInOrder.verify(shareToList, Mockito.times(1)).addViewer(group3); shareToListInOrder.verify(shareToList, Mockito.times(0)).addNotEditableByOthers(); shareToListInOrder.verify(shareToList, Mockito.times(0)).addNotVisibleByOthers(); Mockito.verify(shareToTheNet, Mockito.times(1)).setVisible(false); Mockito.verify(shareToOthers, Mockito.times(1)).setVisible(true); } @Test public void whenShareDocToListNobody() { final AccessListsDTO acl = acl(list(group1), list(group2), NOBODY); helper.setState(currentGroup, currentUser, acl, TYPE_DOCUMENT); shareToListInOrder.verify(shareToList, Mockito.times(1)).addOwner(currentGroup); shareToListInOrder.verify(shareToList, Mockito.times(1)).addAdmin(group1); shareToListInOrder.verify(shareToList, Mockito.times(1)).addEditor(group2); shareToListInOrder.verify(shareToList, Mockito.times(0)).addNotEditableByOthers(); shareToListInOrder.verify(shareToList, Mockito.times(1)).addNotVisibleByOthers(); Mockito.verify(shareToTheNet, Mockito.times(1)).setVisible(false); Mockito.verify(shareToOthers, Mockito.times(1)).setVisible(true); } @Test public void whenShareDocToListNobodyAndEveryoneParticipants() { final AccessListsDTO acl = acl(list(currentGroup, group1), list(group2), NOBODY); participants.add(EVERYONE_IN_WAVE); helper.setState(currentGroup, currentUser, acl, TYPE_DOCUMENT, group1address, participants); shareToListInOrder.verify(shareToList, Mockito.times(1)).addOwner(currentGroup); shareToListInOrder.verify(shareToList, Mockito.times(0)).addAdmin(group1); shareToListInOrder.verify(shareToList, Mockito.times(1)).addEditableByAnyone(); shareToListInOrder.verify(shareToList, Mockito.times(1)).addParticipant(SOMEBODY1, false); shareToListInOrder.verify(shareToList, Mockito.times(1)).addParticipant(SOMEBODY2, false); shareToListInOrder.verify(shareToList, Mockito.times(0)).addParticipant(EVERYONE_IN_WAVE); shareToListInOrder.verify(shareToList, Mockito.times(1)).addNotVisibleByOthers(); Mockito.verify(shareToTheNet, Mockito.times(1)).setVisible(false); Mockito.verify(shareToOthers, Mockito.times(1)).setVisible(true); } @Test public void whenShareDocToListNobodyAndParticipants() { final AccessListsDTO acl = acl(list(currentGroup, group1), list(group2), NOBODY); helper.setState(currentGroup, currentUser, acl, TYPE_DOCUMENT, group1address, participants); shareToListInOrder.verify(shareToList, Mockito.times(1)).addOwner(currentGroup); shareToListInOrder.verify(shareToList, Mockito.times(0)).addAdmin(group1); shareToListInOrder.verify(shareToList, Mockito.times(1)).addParticipant(SOMEBODY1, false); shareToListInOrder.verify(shareToList, Mockito.times(1)).addParticipant(SOMEBODY2, false); shareToListInOrder.verify(shareToList, Mockito.times(1)).addNotEditableByOthers(); shareToListInOrder.verify(shareToList, Mockito.times(0)).addEditableByAnyone(); shareToListInOrder.verify(shareToList, Mockito.times(1)).addNotVisibleByOthers(); Mockito.verify(shareToTheNet, Mockito.times(1)).setVisible(false); Mockito.verify(shareToOthers, Mockito.times(1)).setVisible(true); } @Test public void whenShareDocToNobodyNobody() { final AccessListsDTO acl = acl(list(currentGroup, group1, group2), NOBODY, NOBODY); helper.setState(currentGroup, currentUser, acl, TYPE_DOCUMENT); shareToListInOrder.verify(shareToList, Mockito.times(1)).addOwner(currentGroup); shareToListInOrder.verify(shareToList, Mockito.times(1)).addAdmin(group2); shareToListInOrder.verify(shareToList, Mockito.times(1)).addNotEditableByOthers(); shareToListInOrder.verify(shareToList, Mockito.times(1)).addNotVisibleByOthers(); Mockito.verify(shareToTheNet, Mockito.times(1)).setVisible(false); Mockito.verify(shareToOthers, Mockito.times(1)).setVisible(true); } @Test public void whenShareDocToNobodyNobodyAndParticipants() { final AccessListsDTO acl = acl(list(currentGroup, group1), NOBODY, NOBODY); helper.setState(currentGroup, currentUser, acl, TYPE_DOCUMENT, group1address, participants); shareToListInOrder.verify(shareToList, Mockito.times(1)).addOwner(currentGroup); shareToListInOrder.verify(shareToList, Mockito.times(0)).addAdmin(group1); shareToListInOrder.verify(shareToList, Mockito.times(0)).addEditor(group2); shareToListInOrder.verify(shareToList, Mockito.times(1)).addParticipant(SOMEBODY1, false); shareToListInOrder.verify(shareToList, Mockito.times(1)).addParticipant(SOMEBODY2, false); shareToListInOrder.verify(shareToList, Mockito.times(1)).addNotEditableByOthers(); shareToListInOrder.verify(shareToList, Mockito.times(1)).addNotVisibleByOthers(); Mockito.verify(shareToTheNet, Mockito.times(1)).setVisible(false); Mockito.verify(shareToOthers, Mockito.times(1)).setVisible(true); } @Test public void whenShareListToGroupListAndClosed() { final AccessListsDTO acl = acl(list(group1), list(group1, group2), NOBODY); helper.setState(currentGroup, currentUser, acl, ListsToolConstants.TYPE_LIST); shareToListInOrder.verify(shareToList, Mockito.times(1)).addOwner(currentGroup); shareToListInOrder.verify(shareToList, Mockito.times(1)).addAdmin(group1); shareToListInOrder.verify(shareToList, Mockito.times(1)).addEditor(group1); shareToListInOrder.verify(shareToList, Mockito.times(1)).addEditor(group2); shareToListInOrder.verify(shareToList, Mockito.times(0)).addNotEditableByOthers(); shareToListInOrder.verify(shareToList, Mockito.times(0)).addEditableByAnyone(); shareToListInOrder.verify(shareToList, Mockito.times(1)).addNotVisibleByOthers(); Mockito.verify(shareToTheNet, Mockito.times(1)).setVisible(false); Mockito.verify(shareToOthers, Mockito.times(1)).setVisible(true); } @Test public void whenShareListToGroupListAndPublic() { final AccessListsDTO acl = acl(list(group1), EVERYONE, EVERYONE); helper.setState(currentGroup, currentUser, acl, ListsToolConstants.TYPE_LIST); shareToListInOrder.verify(shareToList, Mockito.times(1)).addOwner(currentGroup); shareToListInOrder.verify(shareToList, Mockito.times(1)).addAdmin(group1); shareToListInOrder.verify(shareToList, Mockito.times(0)).addNotEditableByOthers(); shareToListInOrder.verify(shareToList, Mockito.times(0)).addEditableByAnyone(); shareToListInOrder.verify(shareToList, Mockito.times(0)).addNotVisibleByOthers(); shareToListInOrder.verify(shareToList, Mockito.times(1)).addVisibleByAnyone(); Mockito.verify(shareToTheNet, Mockito.times(1)).setVisible(true); Mockito.verify(shareToOthers, Mockito.times(1)).setVisible(true); } @Test public void whenShareWikiEditable() { final AccessListsDTO acl = acl(list(group1), list(group2), NOBODY); participants.add(EVERYONE_IN_WAVE); participants.add(group1address); participants.add(group2address); helper.setState(currentGroup, currentUser, acl, TYPE_WIKIPAGE, group1address, participants); shareToListInOrder.verify(shareToList, Mockito.times(1)).addOwner(currentGroup); shareToListInOrder.verify(shareToList, Mockito.times(0)).addAdmin(group1); shareToListInOrder.verify(shareToList, Mockito.times(1)).addEditableByAnyone(); shareToListInOrder.verify(shareToList, Mockito.times(1)).addParticipant(group1address, true); shareToListInOrder.verify(shareToList, Mockito.times(1)).addParticipant(group2address, false); shareToListInOrder.verify(shareToList, Mockito.times(0)).addNotEditableByOthers(); shareToListInOrder.verify(shareToList, Mockito.times(1)).addNotVisibleByOthers(); Mockito.verify(shareToTheNet, Mockito.times(1)).setVisible(false); Mockito.verify(shareToOthers, Mockito.times(1)).setVisible(true); } @Test public void whenShareWikiNotEditable() { final AccessListsDTO acl = acl(list(group1), list(group2), NOBODY); participants.add(group2address); helper.setState(currentGroup, currentUser, acl, TYPE_WIKIPAGE, group1address, participants); shareToListInOrder.verify(shareToList, Mockito.times(1)).addOwner(currentGroup); shareToListInOrder.verify(shareToList, Mockito.times(0)).addAdmin(group1); shareToListInOrder.verify(shareToList, Mockito.times(1)).addParticipant(group2address, false); shareToListInOrder.verify(shareToList, Mockito.times(1)).addNotEditableByOthers(); shareToListInOrder.verify(shareToList, Mockito.times(1)).addNotVisibleByOthers(); Mockito.verify(shareToTheNet, Mockito.times(1)).setVisible(false); Mockito.verify(shareToOthers, Mockito.times(1)).setVisible(true); } }