package org.opentides.service.impl;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.opentides.bean.Widget;
import org.opentides.bean.user.BaseUser;
import org.opentides.bean.user.SessionUser;
import org.opentides.dao.WidgetDao;
import org.springframework.mock.web.MockHttpServletRequest;
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 WidgetServiceImplTest {
@InjectMocks
private WidgetServiceImpl widgetService = new WidgetServiceImpl();
@Mock
private WidgetDao widgetDao;
@Before
public void init() {
MockitoAnnotations.initMocks(this);
SecurityContextHolder.clearContext();
SecurityContextHolder.getContext().setAuthentication(getAuthentication());
}
@Test
public void testFindByName() {
Widget expected = new Widget();
expected.setName("Widget1");
expected.setUrl("/url/widget1");
expected.setDescription("This is widget 1");
Widget sample = new Widget();
sample.setName("Widget1");
when(widgetDao.findByExample(sample, true)).thenReturn(Arrays.asList(expected));
Widget actual = widgetService.findByName("Widget1");
verify(widgetDao).findByExample(sample, true);
assertEquals(expected, actual);
Mockito.reset(widgetDao);
when(widgetDao.findByExample(sample, true)).thenReturn(null);
actual = widgetService.findByName("Widget1");
verify(widgetDao).findByExample(sample, true);
assertNull(actual);
}
@Test
public void testFindByUrl() {
Widget expected = new Widget();
expected.setName("Widget1");
expected.setUrl("/url/widget1");
expected.setDescription("This is widget 1");
Widget sample = new Widget();
sample.setUrl("/url/widget1");
when(widgetDao.findByExample(sample, true)).thenReturn(Arrays.asList(expected));
Widget actual = widgetService.findByUrl("/url/widget1");
verify(widgetDao).findByExample(sample, true);
assertEquals(expected, actual);
Mockito.reset(widgetDao);
when(widgetDao.findByExample(sample, true)).thenReturn(null);
actual = widgetService.findByUrl("/url/widget1");
verify(widgetDao).findByExample(sample, true);
assertNull(actual);
}
@Test
public void testGetCurrentUserWidgets() {
Widget widget1 = new Widget();
widget1.setName("Widget 1");
widget1.setDescription("Description 1");
widget1.setUrl("/url/widget1");
widget1.setAccessCode("ACCESS_WIDGET_1");
widget1.setIsUserDefined(true);
Widget widget2 = new Widget();
widget2.setName("Widget 2");
widget2.setDescription("Description 2");
widget2.setUrl("/url/widget2");
widget2.setAccessCode("ACCESS_WIDGET_2");
widget2.setIsUserDefined(true);
Widget widget3 = new Widget();
widget3.setName("Widget 3");
widget3.setDescription("Description 3");
widget3.setUrl("/url/widget3");
widget3.setAccessCode("ACCESS_WIDGET_3");
widget3.setIsUserDefined(true);
Widget widget4 = new Widget();
widget4.setName("Widget 4");
widget4.setDescription("Description 4");
widget4.setUrl("/url/widget4");
widget4.setAccessCode("");
widget4.setIsUserDefined(true);
List<Widget> widgets = Arrays.asList(widget1, widget2, widget3, widget4);
Widget sample = new Widget();
sample.setIsUserDefined(true);
List<Widget> expected = Arrays.asList(widget1, widget2, widget4);
when(widgetDao.findByExample(sample, true)).thenReturn(widgets);
List<Widget> actual = widgetService.getCurrentUserWidgets();
assertEquals(expected, actual);
}
@Test
public void testRequestWidgetNullWidget() {
Widget sample = new Widget();
sample.setName("Widget1");
when(widgetDao.findByExample(sample, true)).thenReturn(null);
assertNull(widgetService.requestWidget("/url/widget1", "Widget1", new MockHttpServletRequest()));
}
@Test
public void testRequestWidgetUseCacheImage() {
Widget widget = new Widget();
widget.setName("Widget1");
widget.setUrl("/url/widget1");
widget.setCacheType(Widget.TYPE_IMAGE);
widget.setLastCacheUpdate(new Date());
Widget sample = new Widget();
sample.setName("Widget1");
when(widgetDao.findByExample(sample, true)).thenReturn(Arrays.asList(widget));
Widget actual = widgetService.requestWidget("/url/widget1", "Widget1", new MockHttpServletRequest());
assertEquals(widget, actual);
}
@Test
public void testRequestWidgetUseCacheNotExpired() {
Widget widget = new Widget();
widget.setName("Widget1");
widget.setUrl("/url/widget1");
widget.setCacheType(Widget.TYPE_HTML);
widget.setLastCacheUpdate(new Date());
widget.setCacheDuration(3600);
Widget sample = new Widget();
sample.setName("Widget1");
when(widgetDao.findByExample(sample, true)).thenReturn(Arrays.asList(widget));
Widget actual = widgetService.requestWidget("/url/widget1", "Widget1", new MockHttpServletRequest());
assertEquals(widget, actual);
}
@Test
public void testGetColumnConfig() {
widgetService.setWidgetColumn("3");
assertEquals(3, widgetService.getColumnConfig());
widgetService.setWidgetColumn("");
assertEquals(2, widgetService.getColumnConfig());
}
@Test
public void testFindDefaultWidget() {
BaseUser user = new BaseUser();
user.setId(1l);
user.setFirstName("First1");
user.setLastName("Last1");
Widget expected = new Widget();
expected.setName("Widget1");
expected.setUrl("/url/widget1");
expected.setDescription("This is widget 1");
when(widgetDao.findDefaultWidget(user)).thenReturn(Arrays.asList(expected));
List<Widget> actual = widgetService.findDefaultWidget(user);
verify(widgetDao).findDefaultWidget(user);
assertEquals(Arrays.asList(expected), actual);
}
@Test
public void testFindWidgetWithAccessCode() {
List<String> accessCodes = Arrays.asList("ACCESS_CODE_1", "ACCESS_CODE_2", "ACCESS_CODE_3");
when(widgetDao.findWidgetWithAccessCode(accessCodes)).thenReturn(getSampleWidgets());
List<Widget> actual = widgetService.findWidgetWithAccessCode(accessCodes);
verify(widgetDao).findWidgetWithAccessCode(accessCodes);
assertEquals(getSampleWidgets(), actual);
}
private Authentication getAuthentication() {
List<GrantedAuthority> auths = new ArrayList<>();
auths.add(new SimpleGrantedAuthority("VIEW_WIDGET"));
auths.add(new SimpleGrantedAuthority("SEARCH_WIDGET"));
auths.add(new SimpleGrantedAuthority("ADD_WIDGET"));
auths.add(new SimpleGrantedAuthority("EDIT_WIDGET"));
auths.add(new SimpleGrantedAuthority("DELETE_WIDGET"));
auths.add(new SimpleGrantedAuthority("ACCESS_WIDGET_1"));
auths.add(new SimpleGrantedAuthority("ACCESS_WIDGET_2"));
UserDetails ud = new User("user", "password", auths);
SessionUser su = new SessionUser(ud);
Authentication auth = new UsernamePasswordAuthenticationToken(su, "password");
return auth;
}
private List<Widget> getSampleWidgets() {
Widget widget1 = new Widget();
widget1.setName("Widget 1");
widget1.setDescription("Description 1");
widget1.setUrl("/url/widget1");
widget1.setAccessCode("ACCESS_WIDGET_1");
widget1.setIsUserDefined(true);
Widget widget2 = new Widget();
widget2.setName("Widget 2");
widget2.setDescription("Description 2");
widget2.setUrl("/url/widget2");
widget2.setAccessCode("ACCESS_WIDGET_2");
widget2.setIsUserDefined(true);
Widget widget3 = new Widget();
widget3.setName("Widget 3");
widget3.setDescription("Description 3");
widget3.setUrl("/url/widget3");
widget3.setAccessCode("ACCESS_WIDGET_3");
widget3.setIsUserDefined(true);
Widget widget4 = new Widget();
widget4.setName("Widget 4");
widget4.setDescription("Description 4");
widget4.setUrl("/url/widget4");
widget4.setAccessCode("");
widget4.setIsUserDefined(true);
List<Widget> widgets = Arrays.asList(widget1, widget2, widget3, widget4);
return widgets;
}
}