package org.opentides.service.impl;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.opentides.bean.UserWidgets;
import org.opentides.bean.Widget;
import org.opentides.bean.user.BaseUser;
import org.opentides.bean.user.SessionUser;
import org.opentides.bean.user.UserCredential;
import org.opentides.dao.UserWidgetsDao;
import org.opentides.service.UserService;
import org.opentides.service.WidgetService;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
public class UserWidgetsServiceImplTest {
@InjectMocks
private UserWidgetsServiceImpl userWidgetService = new UserWidgetsServiceImpl();
@Mock
private UserWidgetsDao userWidgetsDao;
@Mock
private WidgetService widgetService;
@Mock
private UserService userService;
@Before
public void init() {
MockitoAnnotations.initMocks(this);
SecurityContextHolder.clearContext();
SecurityContextHolder.getContext().setAuthentication(getAuthentication());
}
@Test
public void testAddUserWidgetsLongString() {
long userId = 1l;
String selectedWidgets = "1,2,3";
when(userService.load(1l)).thenReturn(getTestBaseUser());
Widget widget1 = getSampleWidget(1l, "Widget1", "Widget 1");
Widget widget2 = getSampleWidget(2l, "Widget2", "Widget 2");
Widget widget3 = getSampleWidget(3l, "Widget3", "Widget 3");
when(widgetService.load("1")).thenReturn(widget1);
when(widgetService.load("2")).thenReturn(widget2);
when(widgetService.load("3")).thenReturn(widget3);
when(userWidgetService.countUserWidgetsColumn(1, 1l)).thenReturn(3l);
when(userWidgetService.countUserWidgetsColumn(2, 1l)).thenReturn(2l);
userWidgetService.addUserWidgets(userId, selectedWidgets);
verify(userWidgetsDao, times(3)).saveEntityModel(isA(UserWidgets.class));
}
@Test
public void testAddUserWidgetsLongStringWithNullWidget() {
long userId = 1l;
String selectedWidgets = "1,2,3,4";
when(userService.load(1l)).thenReturn(getTestBaseUser());
when(widgetService.load("1")).thenReturn(getSampleWidget(1l, "Widget1", "Widget 1"));
when(widgetService.load("2")).thenReturn(getSampleWidget(1l, "Widget2", "Widget 2"));
when(widgetService.load("3")).thenReturn(getSampleWidget(1l, "Widget3", "Widget 3"));
when(widgetService.load("4")).thenReturn(null);
userWidgetService.addUserWidgets(userId, selectedWidgets);
verify(userWidgetsDao, times(3)).saveEntityModel(isA(UserWidgets.class));
}
/*@Test
public void testAddUserWidgetsLongWidget() {
Widget widget1 = getSampleWidget(1l, "Widget1", "Widget 1");
userWidgetService.addUserWidgets(1l, widget1);
verify(userWidgetsDao, times(1)).saveEntityModel(isA(UserWidgets.class));
}*/
/*
@Test
public void testFindUserWidgets() {
fail("Not yet implemented");
}
@Test
public void testFindSpecificUserWidgets() {
fail("Not yet implemented");
}
@Test
public void testUpdateUserWidgetsOrder() {
fail("Not yet implemented");
}
@Test
public void testUpdateUserWidgetsStatus() {
fail("Not yet implemented");
}
@Test
public void testCountUserWidgetsColumn() {
fail("Not yet implemented");
}
@Test
public void testRemoveUserGroupWidgetsWithAccessCodes() {
fail("Not yet implemented");
}
@Test
public void testSetupUserGroupWidgets() {
fail("Not yet implemented");
}*/
private Widget getSampleWidget(Long id, String name, String description) {
Widget widget = new Widget();
widget.setId(id);
widget.setName(name);
widget.setDescription(description);
widget.setUrl("/url/" + name);
return widget;
}
private BaseUser getTestBaseUser() {
BaseUser baseUser = new BaseUser();
UserCredential uc = new UserCredential();
uc.setUsername("username");
uc.setPassword("password");
uc.setEnabled(true);
baseUser.setId(1l);
baseUser.setCredential(uc);
return baseUser;
}
private Authentication getAuthentication() {
List<GrantedAuthority> auths = new ArrayList<>();
auths.add(new SimpleGrantedAuthority("VIEW_USER_WIDGETS"));
auths.add(new SimpleGrantedAuthority("SEARCH_USER_WIDGETS"));
auths.add(new SimpleGrantedAuthority("ADD_USER_WIDGETS"));
auths.add(new SimpleGrantedAuthority("EDIT_USER_WIDGETS"));
SessionUser su = new SessionUser(getTestBaseUser(), auths);
Authentication auth = new UsernamePasswordAuthenticationToken(su, "password");
return auth;
}
}