package org.nextprot.api.user.dao.impl; import com.google.common.collect.ImmutableMap; import org.junit.Assert; import org.junit.Test; import org.nextprot.api.user.domain.User; import org.springframework.security.core.authority.SimpleGrantedAuthority; import java.sql.ResultSet; import java.sql.SQLException; import java.util.*; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; public class UsersExtractorTest { @Test public void testExtractData() throws Exception { UsersExtractor extractor = new UsersExtractor(); List<Map<String, ?>> records = new ArrayList<Map<String, ?>>(); records.add(ImmutableMap.of("user_id", 24L, "user_name", "tahitibob", "first_name", "tahiti", "last_name", "bob", "role_name", "")); records.add(ImmutableMap.of("user_id", 23L, "user_name", "spongebob", "first_name", "", "last_name", "", "role_name", "ROLE_USER")); records.add(ImmutableMap.of("user_id", 23L, "user_name", "spongebob", "first_name", "", "last_name", "", "role_name", "ROLE_ADMIN")); List<User> users = extractor.extractData(mockResultSet(records)); Assert.assertEquals(2, users.size()); User user = users.get(0); Assert.assertEquals(24, user.getId()); Assert.assertEquals("tahitibob", user.getUsername()); Assert.assertEquals("tahiti", user.getFirstName()); Assert.assertEquals("bob", user.getLastName()); Assert.assertTrue(user.getAuthorities().isEmpty()); user = users.get(1); Assert.assertEquals(23, user.getId()); Assert.assertEquals("spongebob", user.getUsername()); Assert.assertNull(user.getFirstName()); Assert.assertNull(user.getLastName()); Assert.assertTrue(!user.getAuthorities().isEmpty()); Assert.assertTrue(user.getAuthorities().contains(new SimpleGrantedAuthority("ROLE_USER"))); Assert.assertTrue(user.getAuthorities().contains(new SimpleGrantedAuthority("ROLE_ADMIN"))); } @Test public void testExtractDataSortedByUsername() throws Exception { UsersExtractor extractor = new UsersExtractor(true); List<Map<String, ?>> records = new ArrayList<Map<String, ?>>(); records.add(ImmutableMap.of("user_id", 24L, "user_name", "tahitibob", "first_name", "tahiti", "last_name", "bob", "role_name", "")); records.add(ImmutableMap.of("user_id", 23L, "user_name", "spongebob", "first_name", "", "last_name", "", "role_name", "ROLE_USER")); records.add(ImmutableMap.of("user_id", 23L, "user_name", "spongebob", "first_name", "", "last_name", "", "role_name", "ROLE_ADMIN")); List<User> users = extractor.extractData(mockResultSet(records)); Assert.assertEquals(2, users.size()); User user = users.get(1); Assert.assertEquals(24, user.getId()); Assert.assertEquals("tahitibob", user.getUsername()); Assert.assertEquals("tahiti", user.getFirstName()); Assert.assertEquals("bob", user.getLastName()); Assert.assertTrue(user.getAuthorities().isEmpty()); user = users.get(0); Assert.assertEquals(23, user.getId()); Assert.assertEquals("spongebob", user.getUsername()); Assert.assertNull(user.getFirstName()); Assert.assertNull(user.getLastName()); Assert.assertTrue(!user.getAuthorities().isEmpty()); Assert.assertTrue(user.getAuthorities().contains(new SimpleGrantedAuthority("ROLE_USER"))); Assert.assertTrue(user.getAuthorities().contains(new SimpleGrantedAuthority("ROLE_USER"))); } private ResultSet mockResultSet(List<Map<String, ?>> records) throws SQLException { ResultSet rs = mock(ResultSet.class); Boolean[] hasNexts = new Boolean[records.size()+1]; Long[] ids = new Long[records.size()]; String[] userNames = new String[records.size()]; String[] firstNames = new String[records.size()]; String[] lastNames = new String[records.size()]; String[] roleNames = new String[records.size()]; for (int i=0 ; i<records.size() ; i++) { hasNexts[i] = true; ids[i] = (Long) records.get(i).get("user_id"); userNames[i] = (String) records.get(i).get("user_name"); firstNames[i] = (String) records.get(i).get("first_name"); lastNames[i] = (String) records.get(i).get("last_name"); roleNames[i] = (String) records.get(i).get("role_name"); if (firstNames[i].isEmpty()) firstNames[i] = null; if (lastNames[i].isEmpty()) lastNames[i] = null; if (roleNames[i].isEmpty()) roleNames[i] = null; } hasNexts[records.size()] = false; given(rs.next()).willReturn(hasNexts[0], Arrays.copyOfRange(hasNexts, 1, hasNexts.length)); given(rs.getLong("user_id")).willReturn(ids[0], Arrays.copyOfRange(ids, 1, ids.length)); given(rs.getString("user_name")).willReturn(userNames[0], Arrays.copyOfRange(userNames, 1, userNames.length)); given(rs.getString("first_name")).willReturn(firstNames[0], Arrays.copyOfRange(firstNames, 1, firstNames.length)); given(rs.getString("last_name")).willReturn(lastNames[0], Arrays.copyOfRange(lastNames, 1, lastNames.length)); given(rs.getString("role_name")).willReturn(roleNames[0], Arrays.copyOfRange(roleNames, 1, roleNames.length)); return rs; } }