package com.qprogramming.tasq.support;
import com.fasterxml.uuid.Generators;
import com.qprogramming.tasq.account.Account;
import com.qprogramming.tasq.account.AccountService;
import com.qprogramming.tasq.account.Roles;
import com.qprogramming.tasq.test.MockSecurityContext;
import org.joda.time.DateTime;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class UtilsTest {
@Rule
public ExpectedException thrown = ExpectedException.none();
private Account testAccount = new Account("user@test.com", "", "user", Roles.ROLE_ADMIN);
@Mock
private MockSecurityContext securityMock;
@Mock
private Authentication authMock;
@Mock
private AccountService accountServiceMock;
@Mock
private HttpServletRequest requestMock;
@Before
public void setUp() {
when(securityMock.getAuthentication()).thenReturn(authMock);
when(authMock.getPrincipal()).thenReturn(testAccount);
SecurityContextHolder.setContext(securityMock);
}
@Test
public void getCurrentUserAndLocaleTest() {
Assert.assertEquals(testAccount, Utils.getCurrentAccount());
}
@Test
public void getLocaleTest() {
Assert.assertEquals(new Locale("en"), Utils.getCurrentLocale());
}
@Test
public void getDefaultLocaleTest() {
Assert.assertNotNull(Utils.getDefaultLocale().toLanguageTag());
}
@Test
public void containsHTMLTagsTest() {
String test1 = "<html>test</html>";
String test2 = "html test html";
String test3 = "<b>";
String test4 = "<b>test</b>";
String test5 = "<script>test</script>";
String test6 = "< script >test</ script >";
String test7 = "Some test < script and >";
Assert.assertTrue(Utils.containsHTMLTags(test1));
Assert.assertFalse(Utils.containsHTMLTags(test2));
Assert.assertTrue(Utils.containsHTMLTags(test3));
Assert.assertTrue(Utils.containsHTMLTags(test4));
Assert.assertTrue(Utils.containsHTMLTags(test5));
Assert.assertFalse(Utils.containsHTMLTags(test6));
Assert.assertFalse(Utils.containsHTMLTags(test7));
}
@Test
public void getBaseURLTest() {
when(requestMock.getScheme()).thenReturn("http");
when(requestMock.getServerName()).thenReturn("testServer");
when(requestMock.getServerPort()).thenReturn(8080);
Utils.setHttpRequest(requestMock);
Assert.assertNotNull(Utils.getBaseURL());
}
@Test
public void capitalizeFirstTest() {
String test = "test_string";
String result = "Test string";
Assert.assertEquals(result, Utils.capitalizeFirst(test));
}
@Test
public void convertDateToStringAndStringToDateTest() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2014);
cal.set(Calendar.MONTH, 11);
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.set(Calendar.HOUR, 0);
cal.set(Calendar.MINUTE, 0);
Date testDate = Utils.convertStringToDate("01-12-2014");
Assert.assertEquals("01-12-2014", Utils.convertDateToString(testDate));
}
@Test
public void containsTest() {
List<Account> test = new LinkedList<Account>();
test.add(testAccount);
Assert.assertTrue(Utils.contains(test, testAccount));
}
@Test
public void rolesTest() {
Assert.assertTrue(Roles.isUser());
Assert.assertTrue(Roles.isPowerUser());
Assert.assertTrue(Roles.isAdmin());
Assert.assertEquals("role.admin", Roles.ROLE_ADMIN.getCode());
}
@Test
public void uuidTest() {
UUID uuid = Generators.timeBasedGenerator().generate();
long timestamp = uuid.timestamp();
DateTime date = new DateTime(Utils.getTimeFromUUID(uuid));
DateTime beforedate = new DateTime().minusDays(1);
Assert.assertTrue(beforedate.isBefore(date));
Assert.assertNotNull(timestamp);
}
@Test
public void estimateMatcherTest() {
String estimate1 = "2d 3h 30m";
String estimate2 = "3h 30m";
String estimate3 = "3h 30";
String estimate4 = "random";
String empty = "";
Assert.assertTrue(Utils.correctEstimate(empty));
Assert.assertTrue(Utils.correctEstimate(estimate1));
Assert.assertTrue(Utils.correctEstimate(estimate2));
Assert.assertFalse(Utils.correctEstimate(estimate3));
Assert.assertFalse(Utils.correctEstimate(estimate4));
}
}