package org.nextprot.api.user.service;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.nextprot.api.commons.dbunit.AbstractUnitBaseTest;
import org.nextprot.api.commons.exception.NextProtException;
import org.nextprot.api.security.service.JWTCodec;
import org.nextprot.api.user.dao.UserApplicationDao;
import org.nextprot.api.user.domain.UserApplication;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Map;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
public class UserApplicationServiceTest extends AbstractUnitBaseTest {
// Check why the following annotation could be problematic !!!!!
// http://tedvinke.wordpress.com/2014/02/13/mockito-why-you-should-not-use-injectmocks-annotation-to-autowire-fields/
@InjectMocks
@Autowired
private UserApplicationService service;
@Mock
private UserApplicationDao dao;
@Mock
private JWTCodec<Map<String, String>> codec;
@Before
public void init() {
MockitoAnnotations.initMocks(this);
}
@Test(expected = NextProtException.class)
public void testCreateUserApplicationServiceSetId() {
UserApplication userApp = new UserApplication();
userApp.setId(2);
service.createUserApplication(userApp);
}
@Test
public void testCreateUserApplicationService() {
UserApplication userApp = new UserApplication();
userApp.setName("test app");
userApp.setDescription("a wonderful app");
userApp.setOwnerId(23);
userApp.setToken("");
Mockito.when(dao.createUserApplication(userApp)).thenReturn(10L);
Mockito.when(dao.getUserApplicationById(10L)).thenReturn(userApp);
Mockito.when(codec.encodeJWT(any(Map.class), anyInt())).thenReturn("pifpafpouf");
UserApplication app = service.createUserApplication(userApp);
Mockito.verify(dao).updateUserApplication(userApp);
Assert.assertEquals("pifpafpouf", app.getToken());
}
}