/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.ngrinder.user.controller;
import com.google.common.collect.Lists;
import org.junit.Test;
import org.ngrinder.AbstractNGrinderTransactionalTest;
import org.ngrinder.common.controller.BaseController;
import org.ngrinder.model.Role;
import org.ngrinder.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpEntity;
import org.springframework.ui.ModelMap;
import java.util.Date;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
public class UserControllerTest extends AbstractNGrinderTransactionalTest {
@Autowired
private UserController userController;
/**
* Test method for
* {@link org.ngrinder.user.controller.UserController#getAll(org.springframework.ui.ModelMap, org.ngrinder.model.Role,
* org.springframework.data.domain.Pageable, java.lang.String)}
* .
*/
@Test
public void testGetAll() {
Pageable page = new PageRequest(1, 10);
ModelMap model = new ModelMap();
userController.getAll(model, null, page, null);
model.clear();
userController.getAll(model, Role.ADMIN, page, null);
model.clear();
userController.getAll(model, null, page, "user");
}
/**
* Test method for
* {@link org.ngrinder.user.controller.UserController#getOne(org.ngrinder.model.User,
* org.springframework.ui.ModelMap)}
* .
*/
@Test
public void testGetOne() {
ModelMap model = new ModelMap();
userController.getOne(getTestUser().getUserId(), model);
User user = (User) model.get("user");
assertThat(user.getId(), is(getTestUser().getId()));
}
/**
* Test method for
* {@link org.ngrinder.user.controller.UserController#save(org.ngrinder.model.User,
* org.ngrinder.model.User, org.springframework.ui.ModelMap)}
* .
*/
@Test
public void testSave() {
// test update
ModelMap model = new ModelMap();
User currUser = getTestUser();
currUser.setUserName("new name");
userController.save(currUser, currUser, model);
userController.getOne(currUser.getUserId(), model);
User user = (User) model.get("user");
assertThat(user.getUserName(), is("new name"));
assertThat(user.getPassword(), is(currUser.getPassword()));
User admin = getAdminUser();
User temp = new User("temp1", "temp1", "temp1", "temp@nhn.com", Role.USER);
userController.save(admin, temp, model);
temp = new User("temp2", "temp2", "temp2", "temp@nhn.com", Role.USER);
userController.save(admin, temp, model);
model.clear();
currUser.setFollowersStr("temp1, temp2");
userController.save(currUser, currUser, model);
userController.getOne(currUser.getUserId(), model);
user = (User) model.get("user");
assertThat(user.getFollowers().size(), is(2));
assertThat(user.getFollowers().get(0).getUserId(), is("temp1"));
}
@Test
public void testUpdate() {
// test update the role of current user.
ModelMap model = new ModelMap();
User currUser = getTestUser();
assertThat(currUser.getRole(), is(Role.USER)); // current test user is "USER"
User updatedUser = new User(currUser.getUserId(), currUser.getUserName(), currUser.getPassword(),
"temp@nhn.com", currUser.getRole());
updatedUser.setId(currUser.getId());
updatedUser.setEmail("test@test.com");
updatedUser.setRole(Role.ADMIN); // Attempt to modify himself as ADMIN
userController.save(currUser, updatedUser, model);
userController.getOne(currUser.getUserId(), model);
User user = (User) model.get("user");
assertThat(user.getUserName(), is(currUser.getUserName()));
assertThat(user.getPassword(), is(currUser.getPassword()));
assertThat(user.getRole(), is(Role.USER));
}
private void saveTestUser(String userId, String userName) {
User newUser = new User();
newUser.setUserId(userId);
newUser.setUserName(userName);
newUser.setEmail("junoyoon@gmail.com");
newUser.setCreatedUser(getTestUser());
newUser.setCreatedDate(new Date());
newUser.setRole(Role.USER);
ModelMap model = new ModelMap();
userController.save(getAdminUser(), newUser, model);
}
/**
* Test method for
* {@link org.ngrinder.user.controller.UserController#delete(org.springframework.ui.ModelMap, java.lang.String)}
* .
*/
@SuppressWarnings("unchecked")
@Test
public void testDelete() {
ModelMap model = new ModelMap();
// save new user for test
saveTestUser("NewUserId1", "NewUserName1");
saveTestUser("NewUserId2", "NewUserName2");
saveTestUser("NewUserId3", "NewUserName3");
Pageable page = new PageRequest(0, 10);
// search
userController.getAll(model, null, page, "NewUserName");
PageImpl userList = (PageImpl<User>) model.get("users");
assertThat(userList.getContent().size(), is(3));
// test to delete one
model.clear();
userController.delete(testUser, "NewUserId1", model);
model.clear();
userController.getAll(model, Role.USER, page, "NewUserName");
userList = (PageImpl<User>) model.get("users");
assertThat(userList.getContent().size(), is(2));
// test to delete more
model.clear();
userController.delete(testUser, "NewUserId2,NewUserId3", model);
model.clear();
userController.getAll(model, Role.USER, page, "NewUserName");
userList = (PageImpl<User>) model.get("users");
assertThat(userList.getContent().size(), is(0));
}
/**
* Test method for
* {@link UserController#checkDuplication(String)}
* .
*/
@Test
public void testDuplication() {
BaseController ngrinderBaseController = new BaseController();
HttpEntity<String> rtnStr = userController.checkDuplication("not-exist");
assertThat(rtnStr.getBody(), is(ngrinderBaseController.returnSuccess()));
rtnStr = userController.checkDuplication(getTestUser().getUserId());
assertThat(rtnStr.getBody(), is(ngrinderBaseController.returnError()));
}
@Test
public void testProfile() {
ModelMap model = new ModelMap();
String viewName = userController.getOne(getTestUser(), model);
assertThat(viewName, is("user/info"));
}
@Test
public void testSwitchOptions() {
ModelMap model = new ModelMap();
User currUser = getTestUser();
User temp = new User("temp1", "temp1", "temp1", "temp@nhn.com", Role.USER);
User admin = getAdminUser();
userController.save(admin, temp, model);
currUser.setOwners(Lists.newArrayList(temp));
currUser.setOwnerUser(temp);
userController.save(currUser, currUser, model);
HttpEntity<String> shareUsersStr = userController.switchOptions(currUser, "");
assertTrue(shareUsersStr.getBody().contains("id"));
}
}