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());
}
}