package org.pegadi.server.service.impl; import no.dusken.common.model.Department; import no.dusken.common.model.Person; import no.dusken.common.model.Role; import no.dusken.common.service.DepartmentService; import no.dusken.common.service.PersonService; import no.dusken.common.service.RoleService; import org.junit.Before; import org.junit.Test; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.pegadi.server.AbstractDatabaseTest; import java.util.Arrays; import java.util.GregorianCalendar; import java.util.List; import java.util.Map; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; import static org.mockito.Matchers.any; import static org.mockito.Mockito.when; public class PersonServiceImplTest extends AbstractDatabaseTest { @Mock private DepartmentService departmentService; @Mock private RoleService roleService; @InjectMocks private PersonService<Person> personService; @Before public void setUp() throws Exception { personService = new PersonServiceImpl(); ((PersonServiceImpl)personService).setDataSource(getDataSource()); MockitoAnnotations.initMocks(this); } @Test public void savedPersonShouldHaveCorrectValues(){ Department department = new Department() { @Override public Long getId() { return 1L; } }; when(departmentService.findOne(any(Long.class))).thenReturn(department); when(roleService.findRolesForPerson(any(Person.class))).thenReturn(Arrays.asList(new Role(1L), new Role(1L))); Person p = new Person(null, "first", "surname", "username", "username@underdusken.no"); p.setDepartment(department); p.setRoles(Arrays.asList(new Role(1L), new Role(2L))); p.setBirthdate(new GregorianCalendar(1986, 11, 5)); p.setHomePostalAddress("hoime"); p.setHomePostalCode("1234"); p.setPhoneNumber("12345678"); Person save = personService.save(p); assertFalse("Person should have gotten a new ID", save.getId() == -1L); Map<String,Object> personAsMap = simpleJdbcTemplate.queryForMap("SELECT * FROM person where id = ?", save.getId()); assertEquals("Wrong firstname", p.getFirstname(), personAsMap.get("firstname")); assertEquals("Wrong surname", p.getSurname(), personAsMap.get("surname")); assertEquals("Wrong username", p.getUsername(), personAsMap.get("username")); assertEquals("Wrong mail", p.getEmailAddress(), personAsMap.get("emailaddress")); assertEquals("Wrong department", p.getDepartment().getId().intValue(), personAsMap.get("department_id")); assertEquals("Wrong number of roles", p.getRoles().size(), save.getRoles().size()); } @Test public void findAllShouldReturnOnePerson(){ savedPersonShouldHaveCorrectValues(); List<Person> all = personService.findAll(); assertEquals("Wrong number of persons", 10, all.size()); } @Test public void personShouldBeUpdatedIfItIsNotNew(){ savedPersonShouldHaveCorrectValues(); List<Person> all = personService.findAll(); assertEquals("Wrong number of persons", 10, all.size()); Person person = all.get(0); person.setFirstname("newfirstname"); person.setActive(false); Person save = personService.save(person); assertEquals("Wrong number of persons", 10, all.size()); assertEquals("Wrong ID", person.getId(), person.getId()); assertEquals("Wrong firstname", person.getFirstname(), person.getFirstname()); assertEquals("Wrong surname", person.getSurname(), person.getSurname()); assertEquals("Wrong username", person.getUsername(), person.getUsername()); assertEquals("Wrong mail", person.getEmailAddress(), save.getEmailAddress()); assertEquals("Wrong department", person.getDepartment(), save.getDepartment()); assertEquals("Wrong number of roles", person.getRoles().size(), save.getRoles().size()); } }