From 057015c14cce4791ff309419de8a8bd6339fd6e7 Mon Sep 17 00:00:00 2001
From: Mic <misvy@vmware.com>
Date: Fri, 15 Feb 2013 15:31:04 +0800
Subject: [PATCH] Spring MVC Test Framework and migration to Spring 3.2.1

- migrated to Spring 3.2.1
- added hamcrest to the POM so it can be used with the Spring MVC Test
Framework
- Started migrating a JUnit test to Spring MVC Test Framework (at this
stage, it stills doesn't work. It could be because of a conflict with
ContentNegotiatingViewResolver)
---
 .springBeans                                  | 19 +------
 pom.xml                                       | 39 +++++++++++++-
 .../petclinic/web/VisitsAtomViewTest.java     | 52 +++++++++++++++++--
 3 files changed, 87 insertions(+), 23 deletions(-)

diff --git a/.springBeans b/.springBeans
index 1dea402..91f4b0e 100644
--- a/.springBeans
+++ b/.springBeans
@@ -7,26 +7,9 @@
 	</configSuffixes>
 	<enableImports><![CDATA[false]]></enableImports>
 	<configs>
-		<config>src/main/webapp/WEB-INF/mvc-core-config.xml</config>
-		<config>src/main/webapp/WEB-INF/mvc-view-config.xml</config>
-		<config>src/main/resources/spring/dao-config.xml</config>
 		<config>src/main/resources/spring/datasource-config.xml</config>
-		<config>src/main/resources/spring/tools-config.xml</config>
+		<config>src/main/webapp/WEB-INF/mvc-view-config.xml</config>
 	</configs>
 	<configSets>
-		<configSet>
-			<name><![CDATA[config]]></name>
-			<allowBeanDefinitionOverriding>true</allowBeanDefinitionOverriding>
-			<incomplete>false</incomplete>
-			<configs>
-				<config>src/main/webapp/WEB-INF/mvc-core-config.xml</config>
-				<config>src/main/webapp/WEB-INF/mvc-view-config.xml</config>
-				<config>src/main/resources/spring/dao-config.xml</config>
-				<config>src/main/resources/spring/datasource-config.xml</config>
-				<config>src/main/resources/spring/tools-config.xml</config>
-			</configs>
-			<profiles>
-			</profiles>
-		</configSet>
 	</configSets>
 </beansProjectDescription>
diff --git a/pom.xml b/pom.xml
index a6d7871..8e0c712 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,7 +8,7 @@
 	<packaging>war</packaging>
 	<version>1.0.0-SNAPSHOT</version>
 	<properties>
-		<spring.version>3.2.0.RELEASE</spring.version>
+		<spring.version>3.2.1.RELEASE</spring.version>
 		<slf4j.version>1.7.0</slf4j.version>
 		<log4j.version>1.2.17</log4j.version>
 		<hibernate.version>4.1.4.Final</hibernate.version>
@@ -51,6 +51,20 @@
 			<artifactId>spring-webmvc</artifactId>
 			<version>${spring.version}</version>				
 		</dependency>
+		
+		<!-- will be a transitive dependency from Spring 3.2.2 -->
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-web</artifactId>
+			<version>${spring.version}</version>				
+		</dependency>
+
+		<!-- added because this dependency is missing in Spring 3.2.1 (can be removed from Spring 3.2.2) -->
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-jdbc</artifactId>
+			<version>${spring.version}</version>
+		</dependency>
 
 		<!-- Logging -->
 		<dependency>
@@ -234,6 +248,13 @@
 			<version>1.1</version>
 		</dependency>
 		
+		<!-- used for Spring MVC Test framework -->
+		<dependency>
+		    <groupId>org.hamcrest</groupId>
+		    <artifactId>hamcrest-all</artifactId>
+		    <version>1.3</version>
+		</dependency>
+		
 		
 	</dependencies>
 	<build>
@@ -291,5 +312,21 @@
 				</executions>
 			</plugin>
 		</plugins>
+		<testResources>
+            <testResource>
+                <directory>src/test/resources</directory>
+                <filtering>true</filtering>
+            </testResource>
+
+            <testResource>
+                <directory>src/main/webapp/WEB-INF</directory>
+
+                <filtering>true</filtering>
+
+                <includes>
+                    <include>**/mvc-*-config.xml</include>
+                </includes>
+            </testResource>
+        </testResources>
 	</build>
 </project>
\ No newline at end of file
diff --git a/src/test/java/org/springframework/samples/petclinic/web/VisitsAtomViewTest.java b/src/test/java/org/springframework/samples/petclinic/web/VisitsAtomViewTest.java
index 6c79082..7e81a8c 100644
--- a/src/test/java/org/springframework/samples/petclinic/web/VisitsAtomViewTest.java
+++ b/src/test/java/org/springframework/samples/petclinic/web/VisitsAtomViewTest.java
@@ -27,24 +27,67 @@ import java.util.Map;
 import org.joda.time.DateTime;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
 import org.springframework.samples.petclinic.model.Pet;
 import org.springframework.samples.petclinic.model.PetType;
 import org.springframework.samples.petclinic.model.Visit;
+import org.springframework.test.context.ActiveProfiles;
+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.ResultActions;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; 
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
+import org.springframework.web.context.WebApplicationContext;
+import static org.hamcrest.Matchers.containsString;
 
 import com.sun.syndication.feed.atom.Entry;
 import com.sun.syndication.feed.atom.Feed;
 
 /**
- * @author Arjen Poutsma
+ * @author Arjen Poutsma 
+ * @author Michael Isvy
  */
+@RunWith(SpringJUnit4ClassRunner.class)
+@WebAppConfiguration
+// Spring configuration files that are inside WEB-INF folder can be referenced here because they've been 
+// added to the classpath inside the Maven pom.xml file (inside <build> <testResources> ... </testResources> </build>)
+@ContextConfiguration({"classpath*:mvc-*-config.xml", "classpath*:spring/*-config.xml"})
+@ActiveProfiles("jdbc")
 public class VisitsAtomViewTest {
 
+	@Autowired
+	private WebApplicationContext webApplicationContext;
+
+	private MockMvc mockMvc;
+	
+	@Before
+	public void setup() {
+		this.mockMvc = MockMvcBuilders.webAppContextSetup(this.webApplicationContext).build();
+	}
+
 	private VisitsAtomView visitView;
 
 	private Map<String, Object> model;
 
 	private Feed feed;
 
+	@Test
+	public void getVisits() throws Exception { 
+		MediaType mediaType = MediaType.APPLICATION_ATOM_XML;
+		ResultActions actions = this.mockMvc.perform(get("/owners/7/pets/9/visits.atom").accept(mediaType));
+		actions.andExpect(status().isOk());
+		actions.andExpect(content().contentType("application/atom+xml"));
+		//actions.andExpect(content().xml("Pet ClinicService Visits"));
+		actions.andExpect(xpath("//*").string(containsString("Pet ClinicService Visits")));
+		
+	}
+
 	@Before
 	public void setUp() {
 		visitView = new VisitsAtomView();
@@ -55,14 +98,14 @@ public class VisitsAtomViewTest {
 		bello.setType(dog);
 		Visit belloVisit = new Visit();
 		belloVisit.setPet(bello);
-		belloVisit.setDate(new DateTime(2009, 1, 1,1,1));
+		belloVisit.setDate(new DateTime(2009, 1, 1, 1, 1));
 		belloVisit.setDescription("Bello visit");
 		Pet wodan = new Pet();
 		wodan.setName("Wodan");
 		wodan.setType(dog);
 		Visit wodanVisit = new Visit();
 		wodanVisit.setPet(wodan);
-		wodanVisit.setDate(new DateTime(2009, 1, 2,1,1));
+		wodanVisit.setDate(new DateTime(2009, 1, 2, 1, 1));
 		wodanVisit.setDescription("Wodan visit");
 		List<Visit> visits = new ArrayList<Visit>();
 		visits.add(belloVisit);
@@ -74,13 +117,14 @@ public class VisitsAtomViewTest {
 
 	}
 
+
 	@Test
 	public void buildFeedMetadata() {
 		visitView.buildFeedMetadata(model, feed, null);
 
 		assertNotNull("No id set", feed.getId());
 		assertNotNull("No title set", feed.getTitle());
-		assertEquals("Invalid update set", new DateTime(2009, 1, 2,1,1).toDate(), feed.getUpdated());
+		assertEquals("Invalid update set", new DateTime(2009, 1, 2, 1, 1).toDate(), feed.getUpdated());
 	}
 
 	@Test
-- 
GitLab