diff --git a/spring-mvc-velocity/pom.xml b/spring-mvc-velocity/pom.xml index c655745b05..597e638cf7 100644 --- a/spring-mvc-velocity/pom.xml +++ b/spring-mvc-velocity/pom.xml @@ -95,6 +95,12 @@ ${powermock.version} test + + org.springframework + spring-test + ${org.springframework.version} + test + diff --git a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/controller/MainController.java b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/controller/MainController.java index 78a6e06e7a..fe88705b90 100644 --- a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/controller/MainController.java +++ b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/controller/MainController.java @@ -11,6 +11,7 @@ import org.springframework.web.bind.annotation.RequestMethod; import java.util.List; @Controller +@RequestMapping("/") public class MainController { private final TutorialsService tutService; diff --git a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/domain/Tutorial.java b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/domain/Tutorial.java index bc0118790a..47265aa98c 100644 --- a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/domain/Tutorial.java +++ b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/domain/Tutorial.java @@ -13,4 +13,22 @@ public class Tutorial { this.description = description; this.author = author; } + + public Integer getTutId() { + return tutId; + } + + public String getTitle() { + return title; + } + + public String getDescription() { + return description; + } + + public String getAuthor() { + return author; + } + + } diff --git a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/ITutorialsService.java b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/ITutorialsService.java new file mode 100644 index 0000000000..42d6149151 --- /dev/null +++ b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/ITutorialsService.java @@ -0,0 +1,10 @@ +package com.baeldung.mvc.velocity.service; + +import java.util.List; + +import com.baeldung.mvc.velocity.domain.Tutorial; + +public interface ITutorialsService { + + public List listTutorials(); +} diff --git a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/TutorialsService.java b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/TutorialsService.java index 4b6c5de427..f67cc0824f 100644 --- a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/TutorialsService.java +++ b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/TutorialsService.java @@ -7,7 +7,7 @@ import java.util.Arrays; import java.util.List; @Service -public class TutorialsService { +public class TutorialsService implements ITutorialsService { public List listTutorials() { return Arrays.asList( diff --git a/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/DataContentControllerTest.java b/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/DataContentControllerTest.java new file mode 100644 index 0000000000..d7f8411325 --- /dev/null +++ b/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/DataContentControllerTest.java @@ -0,0 +1,81 @@ +package com.baeldung.mvc.velocity.test; + +import static org.hamcrest.Matchers.allOf; +import static org.hamcrest.Matchers.hasItem; +import static org.hamcrest.Matchers.hasProperty; +import static org.hamcrest.Matchers.hasSize; +import static org.hamcrest.Matchers.is; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.model; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view; + +import java.util.Arrays; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import com.baeldung.mvc.velocity.domain.Tutorial; +import com.baeldung.mvc.velocity.service.ITutorialsService; +import com.baeldung.mvc.velocity.service.TutorialsService; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations = {"classpath:mvc-servlet.xml"}) +@WebAppConfiguration +public class DataContentControllerTest { + + + private MockMvc mockMvc; + + @Autowired + private ITutorialsService tutServiceMock; + + @Autowired + private WebApplicationContext webApplicationContext; + + @Before + public void setUp() { + tutServiceMock = Mockito.mock(TutorialsService.class); + Mockito.reset(tutServiceMock); + + mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); + } + + @Test + public void testModel() throws Exception{ + + + Mockito.when(tutServiceMock.listTutorials()).thenReturn(Arrays.asList( + new Tutorial(1, "Guava", "Introduction to Guava", "GuavaAuthor"), + new Tutorial(2, "Android", "Introduction to Android", "AndroidAuthor") + )); + + mockMvc.perform(get("/")) + .andExpect(status().isOk()) + .andExpect(view().name("index")) + .andExpect(model().attribute("tutorials", hasSize(2))) + .andExpect(model().attribute("tutorials", hasItem( + allOf( + hasProperty("tutId", is(1)), + hasProperty("author", is("GuavaAuthor")), + hasProperty("title", is("Guava")) + ) + ))) + .andExpect(model().attribute("tutorials", hasItem( + allOf( + hasProperty("tutId", is(2)), + hasProperty("author", is("AndroidAuthor")), + hasProperty("title", is("Android")) + ) + ))); + } +} diff --git a/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/NavigationControllerTest.java b/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/NavigationControllerTest.java index 332c4d4c33..77cd2feadd 100644 --- a/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/NavigationControllerTest.java +++ b/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/NavigationControllerTest.java @@ -1,32 +1,41 @@ package com.baeldung.mvc.velocity.test; -import com.baeldung.mvc.velocity.controller.MainController; -import com.baeldung.mvc.velocity.domain.Tutorial; -import com.baeldung.mvc.velocity.service.TutorialsService; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mockito; -import org.mockito.runners.MockitoJUnitRunner; -import org.springframework.ui.ExtendedModelMap; -import org.springframework.ui.Model; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; import java.util.Arrays; import java.util.List; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.ui.ExtendedModelMap; +import org.springframework.ui.Model; + +import com.baeldung.mvc.velocity.controller.MainController; +import com.baeldung.mvc.velocity.domain.Tutorial; +import com.baeldung.mvc.velocity.service.TutorialsService; -@RunWith(MockitoJUnitRunner.class) +@RunWith(SpringJUnit4ClassRunner.class) +@WebAppConfiguration +@ContextConfiguration(locations = {"classpath:mvc-servlet.xml"}) public class NavigationControllerTest { - private final MainController mainController = new MainController(Mockito.mock(TutorialsService.class)); + private MainController mainController = new MainController(Mockito.mock(TutorialsService.class)); private final Model model = new ExtendedModelMap(); + @Test - public final void shouldGoToTutorialListView() { + public void shouldGoToTutorialListView() { Mockito.when(mainController.getTutService().listTutorials()) .thenReturn(createTutorialList()); @@ -36,7 +45,24 @@ public class NavigationControllerTest { assertEquals("index", view); assertNotNull(tutorialListAttribute); } + + @Test + public void testContent() throws Exception{ + List tutorials = Arrays.asList( + new Tutorial(1, "Guava", "Introduction to Guava", "GuavaAuthor"), + new Tutorial(2, "Android", "Introduction to Android", "AndroidAuthor") + ); + Mockito.when(mainController.getTutService().listTutorials()).thenReturn(tutorials); + + String view = mainController.listTutorialsPage(model); + + verify(mainController.getTutService(), times(1)).listTutorials(); + verifyNoMoreInteractions(mainController.getTutService()); + + assertEquals("index", view); + assertEquals(tutorials, model.asMap().get("tutorials")); + } private static List createTutorialList() { return Arrays.asList(new Tutorial(1, "TestAuthor", "Test Title", "Test Description")); diff --git a/spring-mvc-velocity/src/test/resources/mvc-servlet.xml b/spring-mvc-velocity/src/test/resources/mvc-servlet.xml new file mode 100644 index 0000000000..8b4fd570fe --- /dev/null +++ b/spring-mvc-velocity/src/test/resources/mvc-servlet.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + / + + + + + + + + + + + + \ No newline at end of file