package com.qprogramming.tasq.account; import com.qprogramming.tasq.config.ResourceService; import com.qprogramming.tasq.mail.MailMail; import com.qprogramming.tasq.manage.AppService; import com.qprogramming.tasq.test.MockSecurityContext; import org.apache.velocity.app.VelocityEngine; 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.InjectMocks; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.springframework.context.MessageSource; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import static org.mockito.Matchers.anyLong; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class AccountServiceTest { private static final String SAMPLE_PASSWORD = "SamplePassword"; private static final String EMAIL = "user@test.com"; private static final String USERNAME = "test"; @Rule public ExpectedException thrown = ExpectedException.none(); private BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(11); @InjectMocks private AccountService accountSrv; @Mock private AccountRepository accRepoMomck; @Mock private MockSecurityContext securityMock; @Mock private Authentication authMock; @Mock private MessageSource msgMock; @Mock private VelocityEngine velocityMock; @Mock private ResourceService resourceMock; @Mock private MailMail mailerMock; @Mock private PasswordEncoder encoderMock; @Mock private AppService appSrvMock; private Account testAccount; @Before public void setUp() { accountSrv = new AccountService(accRepoMomck, msgMock, velocityMock, resourceMock, mailerMock, encoder, appSrvMock); testAccount = new Account(EMAIL, "", USERNAME, Roles.ROLE_ADMIN); when(securityMock.getAuthentication()).thenReturn(authMock); when(authMock.getPrincipal()).thenReturn(testAccount); SecurityContextHolder.setContext(securityMock); } @Test public void findByEmailTest() { when(accRepoMomck.findByEmail(anyString())).thenReturn(testAccount); Assert.assertEquals(testAccount, accountSrv.findByEmail(EMAIL)); } @Test public void findByIdTest() { when(accRepoMomck.findById(anyLong())).thenReturn(testAccount); Assert.assertEquals(testAccount, accountSrv.findById(1L)); } @Test public void findByUIIDTest() { when(accRepoMomck.findByUuid(anyString())).thenReturn(testAccount); Assert.assertEquals(testAccount, accountSrv.findByUuid("54564564564564")); } @Test public void findByUserNameTest() { when(accRepoMomck.findByUsername("user")).thenReturn(testAccount); Assert.assertEquals(testAccount, accountSrv.findByUsername("user")); } @Test public void verifyPasswordTest() { String password = encoder.encode(SAMPLE_PASSWORD); testAccount.setPassword(password); when(accRepoMomck.findById(testAccount.getId())).thenReturn(testAccount); Assert.assertTrue(accountSrv.verifyPassword(testAccount, SAMPLE_PASSWORD)); } }