package org.nextprot.api.user.service;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.nextprot.api.commons.exception.NotAuthorizedException;
import org.nextprot.api.user.dao.UserApplicationDao;
import org.nextprot.api.user.dao.UserDao;
import org.nextprot.api.user.dao.UserProteinListDao;
import org.nextprot.api.user.dao.UserQueryDao;
import org.nextprot.api.user.domain.User;
import org.nextprot.api.user.domain.UserApplication;
import org.nextprot.api.user.domain.UserProteinList;
import org.nextprot.api.user.domain.UserQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.Arrays;
import static org.mockito.Matchers.*;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring/user-context-test.xml")
public class UserResourceAuthorizationServiceTest {
@Autowired
private UserQueryService userQueryService;
@Autowired
private UserApplicationService userApplicationService;
@Autowired
private UserProteinListService userProteinListService;
@Autowired
private UserQueryDao userQueryDao;
@Autowired
private UserDao userDao;
@Autowired
private UserApplicationDao userApplicationDao;
@Autowired
private UserProteinListDao userProteinListDao;
@Mock
private Authentication authentication;
private User user;
@Before
public void init() {
MockitoAnnotations.initMocks(this);
user = mockUser("bobleponge");
Mockito.when(authentication.getPrincipal()).thenReturn(user);
dressMockedUserDao(userDao, user);
SecurityContextHolder.getContext().setAuthentication(authentication);
}
@Test
public void testCreateUserApplicationService() {
UserApplication userApp = Mockito.mock(UserApplication.class);
dressMockedUserApplication(userApp, "bobleponge", userApplicationDao);
userApplicationService.createUserApplication(userApp);
// TODO: check that aspect/checker correctly check authorization
//Mockito.verify(checker).checkAuthorization(userApp);
}
@Test
public void testCreateUserQueryService() {
UserQuery query = mockUserQuery("bobleponge");
Mockito.when(userQueryDao.getUserQueryById(anyLong())).thenReturn(query);
userQueryService.createUserQuery(query);
}
@Test
public void testUpdateUserQueryService() {
UserQuery query = mockUserQuery("bobleponge");
Mockito.when(userQueryDao.getUserQueryById(anyLong())).thenReturn(query);
userQueryService.updateUserQuery(query);
}
@Test(expected = NotAuthorizedException.class)
public void testUpdateUserQueryService2() {
UserQuery query = mockUserQuery("bobbylapointe");
Mockito.when(userQueryDao.getUserQueryById(anyLong())).thenReturn(query);
userQueryService.updateUserQuery(query);
}
@Test
public void testDeleteUserQueryService() {
UserQuery query = mockUserQuery("bobleponge");
Mockito.when(userQueryDao.getUserQueryById(anyLong())).thenReturn(query);
userQueryService.deleteUserQuery(query);
}
@Test
public void testCreateUserProteinListService() {
UserProteinList proteinList = Mockito.mock(UserProteinList.class);
dressMockedUserProteinList(proteinList, "bobleponge");
Mockito.when(userProteinListDao.getUserProteinListById(anyLong())).thenReturn(proteinList);
userProteinListService.createUserProteinList(proteinList);
}
@Test
public void testUpdateUserProteinListService() {
UserProteinList proteinList = Mockito.mock(UserProteinList.class);
dressMockedUserProteinList(proteinList, "bobleponge");
Mockito.when(userProteinListDao.getUserProteinListById(anyLong())).thenReturn(proteinList);
userProteinListService.updateUserProteinList(proteinList);
}
@Test(expected = NotAuthorizedException.class)
public void testUpdateUserProteinListService2() {
UserProteinList proteinList = Mockito.mock(UserProteinList.class);
dressMockedUserProteinList(proteinList, "bobbylapointe");
Mockito.when(userProteinListDao.getUserProteinListById(anyLong())).thenReturn(proteinList);
userProteinListService.updateUserProteinList(proteinList);
}
@Test
public void testDeleteUserProteinListService() {
UserProteinList proteinList = Mockito.mock(UserProteinList.class);
dressMockedUserProteinList(proteinList, "bobleponge");
Mockito.when(userProteinListDao.getUserProteinListById(anyLong())).thenReturn(proteinList);
userProteinListService.deleteUserProteinList(proteinList);
}
private static UserQuery mockUserQuery(String owner) {
UserQuery query = Mockito.mock(UserQuery.class);
Mockito.when(query.getOwnerName()).thenReturn(owner);
Mockito.when(query.getOwnerId()).thenReturn(23L);
Mockito.when(query.getSparql()).thenReturn("orkfiejjgijrtwithi");
return query;
}
private static void dressMockedUserApplication(UserApplication userApp, String owner, UserApplicationDao userApplicationDao) {
Mockito.when(userApplicationDao.createUserApplication(userApp)).thenReturn(10L);
Mockito.when(userApplicationDao.getUserApplicationById(anyLong())).thenReturn(userApp);
Mockito.when(userApplicationDao.getUserApplicationListByOwnerId(anyInt())).thenReturn(Arrays.asList(new UserApplication()));
Mockito.when(userApp.getOwnerName()).thenReturn(owner);
Mockito.when(userApp.getOwnerId()).thenReturn(23L);
Mockito.when(userApp.getId()).thenReturn(0L);
}
private static User mockUser(String name) {
User user = Mockito.mock(User.class);
Mockito.when(user.getUsername()).thenReturn(name);
return user;
}
private static void dressMockedUserDao(UserDao userDao, User user) {
Mockito.when(userDao.getUserByUsername(anyString())).thenReturn(user);
}
private static void dressMockedUserProteinList(UserProteinList proteinList, String name) {
Mockito.when(proteinList.getOwnerName()).thenReturn(name);
Mockito.when(proteinList.getOwnerId()).thenReturn(23L);
}
}