package com.alexshabanov.springrestapi.rest.client; import com.alexshabanov.springrestapi.domain.BankAccount; import com.alexshabanov.springrestapi.domain.User; import com.alexshabanov.springrestapi.rest.controller.RestController; import com.alexshabanov.springrestapi.restapitest.config.MockWebMvcConfig; import com.alexshabanov.springrestapi.service.BankAccountService; import com.alexshabanov.springrestapi.service.UserService; import org.codehaus.jackson.map.annotate.JsonSerialize; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.MappingJacksonHttpMessageConverter; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import javax.annotation.Resource; import java.util.Arrays; import java.util.List; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = UserRestClientServiceTest.Config.class) public final class UserRestClientServiceTest { @Resource(name = "userServiceMock") private UserService userServiceMock; @Resource(name = "userServiceClient") private UserService userServiceClient; // test data private final User user = User.as(1, "name", BankAccount.as(1, 12L, "code")); @Test public void shouldRegisterUser() { when(userServiceMock.register(user.getName())).thenReturn(user.getId()); assertEquals(user.getId(), userServiceClient.register(user.getName())); } @Test public void shouldFindUser() { when(userServiceMock.findById(user.getId())).thenReturn(user); assertEquals(user, userServiceClient.findById(user.getId())); } @Test public void shouldFindAllUsers() { final List<User> users = Arrays.asList(user, User.as(2, "name2"), user); when(userServiceMock.findAll()).thenReturn(users); assertEquals(users, userServiceClient.findAll()); } /** * Test configuration context */ @Configuration public static class Config extends MockWebMvcConfig { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(jacksonHttpMessageConverter()); } @Bean public MappingJacksonHttpMessageConverter jacksonHttpMessageConverter() { final MappingJacksonHttpMessageConverter jacksonHttpMessageConverter = new MappingJacksonHttpMessageConverter(); jacksonHttpMessageConverter.getObjectMapper().setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL); return jacksonHttpMessageConverter; } @Bean(name = "userServiceMock") public UserService userServiceMock() { return mock(UserService.class); } @Bean(name = "userServiceClient") public UserService userServiceClient() { return new UserRestClientService("http://host/", testClient()); } @Bean public RestController restController() { return new RestController(userServiceMock(), mock(BankAccountService.class)); } } }