/**
* Copyright (C) 2016 Bonitasoft S.A.
* Bonitasoft, 32 rue Gustave Eiffel - 38000 Grenoble
* This library 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
* version 2.1 of the License.
* 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.
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
* Floor, Boston, MA 02110-1301, USA.
**/
package org.bonitasoft.web.rest.server.datastore.organization;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyLong;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.*;
import java.util.Collections;
import org.bonitasoft.console.common.server.i18n.I18n;
import org.bonitasoft.console.common.server.utils.BonitaHomeFolderAccessor;
import org.bonitasoft.console.common.server.utils.IconDescriptor;
import org.bonitasoft.engine.api.IdentityAPI;
import org.bonitasoft.engine.identity.RoleCreator;
import org.bonitasoft.engine.identity.RoleUpdater;
import org.bonitasoft.engine.identity.impl.RoleImpl;
import org.bonitasoft.engine.session.APISession;
import org.bonitasoft.web.rest.model.ModelFactory;
import org.bonitasoft.web.rest.model.identity.RoleItem;
import org.bonitasoft.web.toolkit.client.ItemDefinitionFactory;
import org.bonitasoft.web.toolkit.client.data.APIID;
import org.bonitasoft.web.toolkit.client.data.item.Item;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
import org.mockito.runners.MockitoJUnitRunner;
/**
* @author Baptiste Mesta
*/
@RunWith(MockitoJUnitRunner.class)
public class RoleDatastoreTest {
private static final long TENANT_ID = 67534L;
@InjectMocks
@Spy
private RoleDatastore roleDatastore;
@Mock
private APISession apiSession;
@Mock
private IdentityAPI identityAPI;
@Mock
private BonitaHomeFolderAccessor bonitaHomeFolderAccessor;
@Captor
private ArgumentCaptor<RoleUpdater> roleUpdaterArgumentCaptor;
@Captor
private ArgumentCaptor<RoleCreator> roleCreatorArgumentCaptor;
@Before
public void before() throws Exception {
ItemDefinitionFactory.setDefaultFactory(new ModelFactory());
I18n.getInstance();
Item.setApplyInputModifiersByDefault(false);
Item.setApplyValidatorsByDefault(false);
Item.setApplyOutputModifiersByDefault(false);
Item.setApplyValidatorMandatoryByDefault(false);
doReturn(identityAPI).when(roleDatastore).getIdentityAPI();
doReturn(bonitaHomeFolderAccessor).when(roleDatastore).getBonitaHomeFolderAccessor();
doReturn(TENANT_ID).when(apiSession).getTenantId();
}
@Test
public void should_get_retrieve_role_with_icon() throws Exception {
//given
RoleImpl myRole = new RoleImpl(12L, "myRole");
myRole.setIconId(2134L);
doReturn(myRole).when(identityAPI).getRole(12L);
//when
RoleItem roleItem = roleDatastore.get(APIID.makeAPIID(12L));
//then
assertThat(roleItem.getIcon()).isEqualTo("../avatars/2134");
}
@Test
public void should_get_retrieve_role_without_icon() throws Exception {
//given
RoleImpl myRole = new RoleImpl(12L, "myRole");
doReturn(myRole).when(identityAPI).getRole(12L);
//when
RoleItem roleItem = roleDatastore.get(APIID.makeAPIID(12L));
//then
assertThat(roleItem.getIcon()).isEmpty();
}
@Test
public void should_retrieve_role_from_engine() throws Exception {
//given
doReturn(new RoleImpl(123, "myRole")).when(identityAPI).getRole(123L);
//when
RoleItem roleItem = roleDatastore.get(APIID.makeAPIID(123L));
//then
assertThat(roleItem.getName()).isEqualTo("myRole");
}
@Test
public void should_update_role_in_the_engine() throws Exception {
RoleUpdater roleUpdater = new RoleUpdater().setName("newName");
doReturn(new RoleImpl(123, "newName")).when(identityAPI).updateRole(eq(123L), eq(roleUpdater));
//when
roleDatastore.update(APIID.makeAPIID(123L), Collections.singletonMap("name", "newName"));
//then
verify(identityAPI).updateRole(eq(123L), eq(roleUpdater));
}
@Test
public void should_update_icon_of_role_give_content_to_engine() throws Exception {
doReturn(new RoleImpl(123, "newName")).when(identityAPI).updateRole(anyLong(), any(RoleUpdater.class));
IconDescriptor iconDescriptor = new IconDescriptor("iconName", "content".getBytes());
doReturn(iconDescriptor).when(bonitaHomeFolderAccessor).getIconFromFileSystem(eq("temp_icon_on_fs"), eq(TENANT_ID));
//when
roleDatastore.update(APIID.makeAPIID(123L), Collections.singletonMap("icon", "temp_icon_on_fs"));
//then
verify(identityAPI).updateRole(eq(123L), roleUpdaterArgumentCaptor.capture());
RoleUpdater roleUpdater = roleUpdaterArgumentCaptor.getValue();
assertThat(roleUpdater.getFields().get(RoleUpdater.RoleField.ICON_FILENAME)).isEqualTo("iconName");
assertThat(roleUpdater.getFields().get(RoleUpdater.RoleField.ICON_CONTENT)).isEqualTo("content".getBytes());
}
@Test
public void should_add_role_with_icon_give_content_to_engine() throws Exception {
doReturn(new RoleImpl(123, "newName")).when(identityAPI).createRole(any(RoleCreator.class));
IconDescriptor iconDescriptor = new IconDescriptor("iconName", "content".getBytes());
doReturn(iconDescriptor).when(bonitaHomeFolderAccessor).getIconFromFileSystem(eq("temp_icon_on_fs"), eq(TENANT_ID));
RoleItem roleItem = new RoleItem();
roleItem.setIcon("temp_icon_on_fs");
roleItem.setName("name");
//when
roleDatastore.add(roleItem);
//then
verify(identityAPI).createRole(roleCreatorArgumentCaptor.capture());
RoleCreator roleUpdater = roleCreatorArgumentCaptor.getValue();
assertThat(roleUpdater.getFields().get(RoleCreator.RoleField.ICON_FILENAME)).isEqualTo("iconName");
assertThat(roleUpdater.getFields().get(RoleCreator.RoleField.ICON_CONTENT)).isEqualTo("content".getBytes());
assertThat(roleUpdater.getFields().get(RoleCreator.RoleField.NAME)).isEqualTo("name");
}
@Test
public void add_role_without_icon_should_create_role_without_retrieving_icon_from_filesystem() throws Exception {
doReturn(new RoleImpl(123, "name")).when(identityAPI).createRole(any(RoleCreator.class));
RoleItem roleItem = new RoleItem();
roleItem.setIcon("");
roleItem.setName("name");
//when
roleDatastore.add(roleItem);
//then
verify(bonitaHomeFolderAccessor, never()).getIconFromFileSystem(anyString(), anyLong());
verify(identityAPI).createRole(any(RoleCreator.class));
}
}