Newer
Older
package it.inaf.ia2.gms.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import it.inaf.ia2.gms.GmsTestUtils;
import it.inaf.ia2.gms.manager.GroupsManager;
import it.inaf.ia2.gms.manager.PermissionsManager;
import it.inaf.ia2.gms.model.request.AddGroupRequest;
import it.inaf.ia2.gms.model.response.GroupsTabResponse;
import it.inaf.ia2.gms.model.response.PaginatedData;
Sonia Zorba
committed
import it.inaf.ia2.gms.persistence.GroupsDAO;
import it.inaf.ia2.gms.persistence.LoggingDAO;
Sonia Zorba
committed
import it.inaf.ia2.gms.persistence.model.GroupEntity;
import it.inaf.ia2.gms.service.GroupNameService;
import it.inaf.ia2.gms.service.GroupsService;
import it.inaf.ia2.gms.service.GroupsTreeBuilder;
import javax.servlet.http.HttpServletRequest;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.mockito.ArgumentMatchers.any;
Sonia Zorba
committed
import static org.mockito.ArgumentMatchers.argThat;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
@RunWith(MockitoJUnitRunner.class)
public class GroupsControllerTest {
@Mock
private GroupsTabResponseBuilder groupsTabResponseBuilder;
@Mock
private GroupsManager groupsManager;
@Mock
private GroupsService groupsService;
@Mock
private HttpServletRequest servletRequest;
private PermissionsManager permissionsManager;
@Mock
private GroupsTreeBuilder groupsTreeBuilder;
Sonia Zorba
committed
@Mock
private GroupsDAO groupsDAO;
@Mock
private LoggingDAO loggingDAO;
@InjectMocks
private GroupsController controller;
private final ObjectMapper mapper = new ObjectMapper();
private MockMvc mockMvc;
@Before
public void init() {
mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
Sonia Zorba
committed
controller.groupNameService = new GroupNameService(groupsDAO);
GmsTestUtils.mockPrincipal(servletRequest);
}
@Test
public void testGetGroups() throws Exception {
GroupsTabResponse response = new GroupsTabResponse();
response.setBreadcrumbs(new ArrayList<>());
response.setGroupsPanel(new PaginatedData<>(new ArrayList<>(), 1, 10));
response.setPermission(Permission.ADMIN);
when(groupsTabResponseBuilder.getGroupsTab(any())).thenReturn(response);
mockMvc.perform(get("/groups?groupId=ROOT&paginatorPageSize=20&paginatorPage=1"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.breadcrumbs", notNullValue()))
.andExpect(jsonPath("$.groupsPanel", notNullValue()))
.andExpect(jsonPath("$.permission", is("ADMIN")));
Sonia Zorba
committed
public void testAddGroupPaginated() throws Exception {
AddGroupRequest request = new AddGroupRequest();
request.setNewGroupName("New Group");
request.setParentGroupId("abcd");
request.setLeaf(true);
request.setPaginatorPage(1);
request.setPaginatorPageSize(10);
List<GroupNode> nodes = new ArrayList<>();
PaginatedData<GroupNode> paginatedData = new PaginatedData<>(nodes, 1, 10);
when(groupsTreeBuilder.listSubGroups(any(), any(), any())).thenReturn(paginatedData);
mockMvc.perform(post("/group")
.content(mapper.writeValueAsString(request))
Sonia Zorba
committed
.accept(MediaType.APPLICATION_JSON)
@Test
public void testDeleteGroup() throws Exception {
mockMvc.perform(delete("/group/id?paginatorPageSize=20&paginatorPage=1&searchFilter="))
.andDo(print())
.andExpect(status().isOk());
verify(groupsManager, times(1)).deleteGroup(eq("id"));
}
Sonia Zorba
committed
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
@Test
public void testAddGroupTextPlain() throws Exception {
GroupEntity peopleGroup = getPeopleGroup();
when(groupsManager.getRoot()).thenReturn(getRoot());
when(groupsManager.createGroup(any(GroupEntity.class), eq("people"), eq(false))).thenReturn(peopleGroup);
when(groupsManager.createGroup(any(GroupEntity.class), eq("name.surname"), eq(true))).thenReturn(getNameSurnameGroup());
mockMvc.perform(post("/group")
.param("name", "people.name\\.surname")
.param("leaf", "true")
.accept(MediaType.TEXT_PLAIN)
.contentType(MediaType.APPLICATION_FORM_URLENCODED))
.andExpect(status().isCreated());
verify(groupsService, times(2)).findGroupByParentAndName(any(GroupEntity.class), any());
verify(groupsManager, times(1)).createGroup(argGroupIdEq(GroupsService.ROOT), eq("people"), eq(false));
verify(groupsManager, times(1)).createGroup(argGroupIdEq("people_id"), eq("name.surname"), eq(true));
}
private GroupEntity argGroupIdEq(String groupId) {
return argThat(g -> g.getId().equals(groupId));
}
private GroupEntity getRoot() {
GroupEntity root = new GroupEntity();
root.setId(GroupsService.ROOT);
root.setName(GroupsService.ROOT);
root.setPath("");
return root;
}
private GroupEntity getPeopleGroup() {
GroupEntity lbt = new GroupEntity();
lbt.setId("people_id");
lbt.setName("people");
lbt.setPath("people_id");
return lbt;
}
private GroupEntity getNameSurnameGroup() {
GroupEntity inaf = new GroupEntity();
inaf.setId("user_group_id");
inaf.setName("name.surname");
inaf.setPath("people_id.user_group_id");
return inaf;
}