package gov.samhsa.consent2share.service.account.pg; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import gov.samhsa.consent2share.common.UserContext; import gov.samhsa.consent2share.domain.account.EmailTokenRepository; import gov.samhsa.consent2share.domain.account.TokenGenerator; import gov.samhsa.consent2share.domain.account.Users; import gov.samhsa.consent2share.domain.account.UsersRepository; import gov.samhsa.consent2share.domain.commondomainservices.EmailSender; import gov.samhsa.consent2share.domain.patient.Patient; import gov.samhsa.consent2share.domain.patient.PatientRepository; import gov.samhsa.consent2share.domain.reference.AdministrativeGenderCodeRepository; import gov.samhsa.consent2share.hl7.Hl7v3TransformerException; import gov.samhsa.consent2share.infrastructure.PixService; import gov.samhsa.consent2share.infrastructure.security.EmailAddressNotExistException; import gov.samhsa.consent2share.infrastructure.security.UsernameNotExistException; import gov.samhsa.consent2share.service.account.MrnService; import gov.samhsa.consent2share.service.dto.SignupDto; import gov.samhsa.consent2share.service.spirit.SpiritClientNotAvailableException; import gov.samhsa.consent2share.service.spirit.SpiritQueryService; import java.text.ParseException; import java.util.Date; import javax.mail.MessagingException; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.springframework.security.crypto.password.PasswordEncoder; public class AccountServiceImplTest { private AccountServiceImpl sut; private PatientRepository patientRepository; private TokenGenerator tokenGenerator; private Integer accountVerificationTokenExpireInHours; private EmailTokenRepository emailTokenRepository; private EmailSender emailSender; private AdministrativeGenderCodeRepository administrativeGenderCodeRepository; private PasswordEncoder passwordEncoder; private UserContext userContext; private UsersRepository usersRepository; private Patient patient; private MrnService mrnService; private PixService pixService; @Mock private SpiritQueryService spiritQueryService; @Before public void setUp() { // Mock dependencies and create sut // Just to save a few lines of code for each individual test // But independency, clarity of the unit tests are much more important // than code reuse patientRepository = mock(PatientRepository.class); administrativeGenderCodeRepository = mock(AdministrativeGenderCodeRepository.class); tokenGenerator = mock(TokenGenerator.class); accountVerificationTokenExpireInHours = 8; emailTokenRepository = mock(EmailTokenRepository.class); emailSender = mock(EmailSender.class); userContext = mock(UserContext.class); passwordEncoder = mock(PasswordEncoder.class); usersRepository = mock(UsersRepository.class); patient = mock(Patient.class); mrnService = mock(MrnService.class); pixService = mock(PixService.class); sut = new AccountServiceImpl(accountVerificationTokenExpireInHours, patientRepository, administrativeGenderCodeRepository, passwordEncoder, userContext, emailSender, tokenGenerator, emailTokenRepository, usersRepository, spiritQueryService, null, mrnService, pixService); } @Test(expected = IllegalArgumentException.class) public void testSignup_Throws_Exception_Given_Link_Url_Has_Whitespaces_Only() throws MessagingException, UsernameNotExistException, EmailAddressNotExistException, Hl7v3TransformerException, SpiritClientNotAvailableException, PatientExistingException { SignupDto signupDto = mock(SignupDto.class); sut.signup(signupDto, " "); } // @Test(expected = IllegalArgumentException.class) // public void // testSignup_Throws_Exception_Given_Valid_Link_Url_And_Given_No_Email_Address() // throws MessagingException, UsernameNotExistException, // EmailAddressNotExistException, Hl7v3TransformerException { // // Arrange // final String linkUrl = "linkUrl"; // SignupDto signupDto = mock(SignupDto.class); // when(signupDto.getUsername()).thenReturn("username"); // // when(passwordEncoder.encode(any(CharSequence.class))).thenReturn("encodedPassword"); // when(spiritQueryService.getHIEPatientIdbyPDQ(signupDto)).thenReturn("123"); // // // Act // sut.signup(signupDto, linkUrl); // } @Test(expected = IllegalArgumentException.class) public void testCreateEmailToken_Throws_Exception_When_Username_Has_Whitespaces_Only() throws UsernameNotExistException, EmailAddressNotExistException, MessagingException { sut.createEmailToken(" ", "emailAddress"); } @Test(expected = IllegalArgumentException.class) public void testCreateEmailToken_Throws_Exception_When_Username_Is_Null() throws UsernameNotExistException, EmailAddressNotExistException, MessagingException { sut.createEmailToken(null, "emailAddress"); } @Test(expected = IllegalArgumentException.class) public void testCreateEmailToken_Throws_Exception_When_Email_Has_Whitespaces_Only() throws UsernameNotExistException, EmailAddressNotExistException, MessagingException { sut.createEmailToken("username", " "); } @Test(expected = IllegalArgumentException.class) public void testCreateEmailToken_Throws_Exception_When_Email_Is_Null() throws UsernameNotExistException, EmailAddressNotExistException, MessagingException { sut.createEmailToken("username", null); } @Test public void testCreateEmailToken() throws UsernameNotExistException, EmailAddressNotExistException, MessagingException { Patient patient = mock(Patient.class); when(patientRepository.findByUsername(anyString())).thenReturn(patient); when(patient.getEmail()).thenReturn("emailAddress"); sut.createEmailToken("username", "emailAddress"); } @Test public void testFindByUserName() { Users user = mock(Users.class); when(usersRepository.loadUserByUsername(anyString())).thenReturn(user); sut.findUserByUsername("username"); } @Test public void testRecoverUsername() throws ParseException { when( patientRepository .findByFirstNameAndLastNameAndBirthDayAndEmail( anyString(), anyString(), any(Date.class), anyString())).thenReturn(patient); when(patient.getUsername()).thenReturn("username"); assertNotNull((sut.recoverUsername("Albert", "Smith", "02/19/1983", "email@email.com"))); } @Test public void testRecoverUsernameWhenNotFound() throws ParseException { when( patientRepository .findByFirstNameAndLastNameAndBirthDayAndEmail( anyString(), anyString(), any(Date.class), anyString())).thenReturn(patient); when(patient.getUsername()).thenReturn(null); assertNull((sut.recoverUsername("Albert", "Smith", "02/19/1983", "email@email.com"))); } }