package com.alexshabanov.springrestapi.rest.client; import com.alexshabanov.springrestapi.domain.BankAccount; 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.List; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.*; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = BankAccountRestClientServiceTest.Config.class) public final class BankAccountRestClientServiceTest { @Resource(name = "bankAccountServiceMock") private BankAccountService bankAccountServiceMock; @Resource(name = "bankAccountServiceClient") private BankAccountService bankAccountServiceClient; // test data private final BankAccount bankAccount = BankAccount.as(1, 12L, "code"); @Test public void shouldUpdateAccount() { final int userId = 1; doNothing().when(bankAccountServiceMock).updateAccount(userId, bankAccount); bankAccountServiceClient.updateAccount(userId, bankAccount); verify(bankAccountServiceMock).updateAccount(userId, bankAccount); } @Test public void shouldRegisterAccount() { when(bankAccountServiceMock.registerAccount(bankAccount)).thenReturn(bankAccount.getId()); assertEquals(bankAccount.getId(), bankAccountServiceClient.registerAccount(bankAccount)); } /** * 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 = "bankAccountServiceMock") public BankAccountService bankAccountServiceMock() { return mock(BankAccountService.class); } @Bean(name = "bankAccountServiceClient") public BankAccountService bankAccountServiceClient() { return new BankAccountRestClientService("http://host/", testClient()); } @Bean public RestController restController() { return new RestController(mock(UserService.class), bankAccountServiceMock()); } } }