Merge pull request #467 from sameira/master
Adding Spring Data Neo4J Code Sample
This commit is contained in:
commit
1ea5205dae
|
@ -0,0 +1,15 @@
|
||||||
|
## Spring Data Neo4j
|
||||||
|
|
||||||
|
### Relevant Articles:
|
||||||
|
- [Introduction to Spring Data Neo4j](http://www.baeldung.com/spring-data-neo4j-tutorial)
|
||||||
|
|
||||||
|
### Build the Project with Tests Running
|
||||||
|
```
|
||||||
|
mvn clean install
|
||||||
|
```
|
||||||
|
|
||||||
|
### Run Tests Directly
|
||||||
|
```
|
||||||
|
mvn test
|
||||||
|
```
|
||||||
|
|
|
@ -0,0 +1,93 @@
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>com.baeldung</groupId>
|
||||||
|
<artifactId>spring-data-neo4j</artifactId>
|
||||||
|
<version>1.0</version>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<java.version>1.8</java.version>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||||
|
<neo4j.version>3.0.1</neo4j.version>
|
||||||
|
<spring-data-neo4j.version>4.1.1.RELEASE</spring-data-neo4j.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.data</groupId>
|
||||||
|
<artifactId>spring-data-neo4j</artifactId>
|
||||||
|
<version>${spring-data-neo4j.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.voodoodyne.jackson.jsog</groupId>
|
||||||
|
<artifactId>jackson-jsog</artifactId>
|
||||||
|
<version>1.1</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.data</groupId>
|
||||||
|
<artifactId>spring-data-neo4j</artifactId>
|
||||||
|
<version>${spring-data-neo4j.version}</version>
|
||||||
|
<type>test-jar</type>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.neo4j</groupId>
|
||||||
|
<artifactId>neo4j-kernel</artifactId>
|
||||||
|
<version>${neo4j.version}</version>
|
||||||
|
<type>test-jar</type>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.neo4j.app</groupId>
|
||||||
|
<artifactId>neo4j-server</artifactId>
|
||||||
|
<version>${neo4j.version}</version>
|
||||||
|
<type>test-jar</type>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.neo4j</groupId>
|
||||||
|
<artifactId>neo4j-ogm-test</artifactId>
|
||||||
|
<version>2.0.2</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.neo4j.test</groupId>
|
||||||
|
<artifactId>neo4j-harness</artifactId>
|
||||||
|
<version>${neo4j.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
<version>4.12</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework</groupId>
|
||||||
|
<artifactId>spring-test</artifactId>
|
||||||
|
<version>4.2.3.RELEASE</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
|
@ -0,0 +1,34 @@
|
||||||
|
package com.baeldung.spring.data.neo4j.config;
|
||||||
|
|
||||||
|
import org.neo4j.ogm.session.SessionFactory;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.data.neo4j.config.Neo4jConfiguration;
|
||||||
|
import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories;
|
||||||
|
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||||
|
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||||
|
|
||||||
|
|
||||||
|
@ComponentScan(basePackages = {"com.baeldung.spring.data.neo4j.services"})
|
||||||
|
@Configuration
|
||||||
|
@EnableNeo4jRepositories(basePackages = "com.baeldung.spring.data.neo4j.repostory")
|
||||||
|
public class MovieDatabaseNeo4jConfiguration extends Neo4jConfiguration {
|
||||||
|
|
||||||
|
public static final String URL = System.getenv("NEO4J_URL") != null ? System.getenv("NEO4J_URL") : "http://neo4j:movies@localhost:7474";
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public org.neo4j.ogm.config.Configuration getConfiguration() {
|
||||||
|
org.neo4j.ogm.config.Configuration config = new org.neo4j.ogm.config.Configuration();
|
||||||
|
config
|
||||||
|
.driverConfiguration()
|
||||||
|
.setDriverClassName("org.neo4j.ogm.drivers.http.driver.HttpDriver")
|
||||||
|
.setURI(URL);
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SessionFactory getSessionFactory() {
|
||||||
|
return new SessionFactory(getConfiguration(), "com.baeldung.spring.data.neo4j.domain");
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
package com.baeldung.spring.data.neo4j.config;
|
||||||
|
|
||||||
|
import org.neo4j.ogm.session.SessionFactory;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.context.annotation.Profile;
|
||||||
|
import org.springframework.data.neo4j.config.Neo4jConfiguration;
|
||||||
|
import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories;
|
||||||
|
import org.springframework.data.neo4j.server.Neo4jServer;
|
||||||
|
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||||
|
|
||||||
|
|
||||||
|
@EnableTransactionManagement
|
||||||
|
@ComponentScan(basePackages = {"com.baeldung.spring.data.neo4j.services"})
|
||||||
|
@Configuration
|
||||||
|
@EnableNeo4jRepositories(basePackages = "com.baeldung.spring.data.neo4j.repostory")
|
||||||
|
@Profile({"embedded", "test"})
|
||||||
|
public class MovieDatabaseNeo4jTestConfiguration extends Neo4jConfiguration {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public org.neo4j.ogm.config.Configuration getConfiguration() {
|
||||||
|
org.neo4j.ogm.config.Configuration config = new org.neo4j.ogm.config.Configuration();
|
||||||
|
config
|
||||||
|
.driverConfiguration()
|
||||||
|
.setDriverClassName("org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver");
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SessionFactory getSessionFactory() {
|
||||||
|
return new SessionFactory(getConfiguration(), "com.baeldung.spring.data.neo4j.domain");
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,61 @@
|
||||||
|
package com.baeldung.spring.data.neo4j.domain;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
|
||||||
|
import com.voodoodyne.jackson.jsog.JSOGGenerator;
|
||||||
|
import org.neo4j.ogm.annotation.GraphId;
|
||||||
|
import org.neo4j.ogm.annotation.NodeEntity;
|
||||||
|
import org.neo4j.ogm.annotation.Relationship;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@JsonIdentityInfo(generator=JSOGGenerator.class)
|
||||||
|
|
||||||
|
@NodeEntity
|
||||||
|
public class Movie {
|
||||||
|
@GraphId
|
||||||
|
Long id;
|
||||||
|
|
||||||
|
private String title;
|
||||||
|
|
||||||
|
private int released;
|
||||||
|
private String tagline;
|
||||||
|
|
||||||
|
@Relationship(type="ACTED_IN", direction = Relationship.INCOMING) private List<Role> roles;
|
||||||
|
|
||||||
|
public Movie() { }
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getReleased() {
|
||||||
|
return released;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTagline() {
|
||||||
|
return tagline;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Collection<Role> getRoles() {
|
||||||
|
return roles;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTitle(String title) {
|
||||||
|
this.title = title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setReleased(int released) {
|
||||||
|
this.released = released;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTagline(String tagline) {
|
||||||
|
this.tagline = tagline;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRoles(List<Role> roles) {
|
||||||
|
this.roles = roles;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,50 @@
|
||||||
|
package com.baeldung.spring.data.neo4j.domain;
|
||||||
|
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
|
||||||
|
import com.voodoodyne.jackson.jsog.JSOGGenerator;
|
||||||
|
import org.neo4j.ogm.annotation.GraphId;
|
||||||
|
import org.neo4j.ogm.annotation.NodeEntity;
|
||||||
|
import org.neo4j.ogm.annotation.Relationship;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@JsonIdentityInfo(generator=JSOGGenerator.class)
|
||||||
|
@NodeEntity
|
||||||
|
public class Person {
|
||||||
|
@GraphId
|
||||||
|
Long id;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
private int born;
|
||||||
|
|
||||||
|
@Relationship(type = "ACTED_IN")
|
||||||
|
private List<Movie> movies;
|
||||||
|
|
||||||
|
public Person() { }
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getBorn() {
|
||||||
|
return born;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Movie> getMovies() {
|
||||||
|
return movies;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBorn(int born) {
|
||||||
|
this.born = born;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMovies(List<Movie> movies) {
|
||||||
|
this.movies = movies;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,50 @@
|
||||||
|
package com.baeldung.spring.data.neo4j.domain;
|
||||||
|
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
|
||||||
|
import com.voodoodyne.jackson.jsog.JSOGGenerator;
|
||||||
|
import org.neo4j.ogm.annotation.EndNode;
|
||||||
|
import org.neo4j.ogm.annotation.GraphId;
|
||||||
|
import org.neo4j.ogm.annotation.RelationshipEntity;
|
||||||
|
import org.neo4j.ogm.annotation.StartNode;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
@JsonIdentityInfo(generator=JSOGGenerator.class)
|
||||||
|
@RelationshipEntity(type = "ACTED_IN")
|
||||||
|
public class Role {
|
||||||
|
@GraphId
|
||||||
|
Long id;
|
||||||
|
private Collection<String> roles;
|
||||||
|
@StartNode
|
||||||
|
private Person person;
|
||||||
|
@EndNode
|
||||||
|
private Movie movie;
|
||||||
|
|
||||||
|
public Role() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Collection<String> getRoles() {
|
||||||
|
return roles;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Person getPerson() {
|
||||||
|
return person;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Movie getMovie() {
|
||||||
|
return movie;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRoles(Collection<String> roles) {
|
||||||
|
this.roles = roles;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPerson(Person person) {
|
||||||
|
this.person = person;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMovie(Movie movie) {
|
||||||
|
this.movie = movie;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
package com.baeldung.spring.data.neo4j.repostory;
|
||||||
|
|
||||||
|
import com.baeldung.spring.data.neo4j.domain.Movie;
|
||||||
|
import org.springframework.data.neo4j.annotation.Query;
|
||||||
|
import org.springframework.data.neo4j.repository.GraphRepository;
|
||||||
|
import org.springframework.data.repository.query.Param;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
public interface MovieRepository extends GraphRepository<Movie> {
|
||||||
|
Movie findByTitle(@Param("title") String title);
|
||||||
|
|
||||||
|
@Query("MATCH (m:Movie) WHERE m.title =~ ('(?i).*'+{title}+'.*') RETURN m")
|
||||||
|
Collection<Movie> findByTitleContaining(@Param("title") String title);
|
||||||
|
|
||||||
|
@Query("MATCH (m:Movie)<-[:ACTED_IN]-(a:Person) RETURN m.title as movie, collect(a.name) as cast LIMIT {limit}")
|
||||||
|
List<Map<String,Object>> graph(@Param("limit") int limit);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
package com.baeldung.spring.data.neo4j.repostory;
|
||||||
|
|
||||||
|
import com.baeldung.spring.data.neo4j.domain.Person;
|
||||||
|
import org.springframework.data.neo4j.repository.GraphRepository;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
public interface PersonRepository extends GraphRepository<Person> {
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,50 @@
|
||||||
|
package com.baeldung.spring.data.neo4j.services;
|
||||||
|
|
||||||
|
import com.baeldung.spring.data.neo4j.repostory.MovieRepository;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
@Transactional
|
||||||
|
public class MovieService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
MovieRepository movieRepository;
|
||||||
|
|
||||||
|
private Map<String, Object> toD3Format(Iterator<Map<String, Object>> result) {
|
||||||
|
List<Map<String,Object>> nodes = new ArrayList<Map<String,Object>>();
|
||||||
|
List<Map<String,Object>> rels= new ArrayList<Map<String,Object>>();
|
||||||
|
int i=0;
|
||||||
|
while (result.hasNext()) {
|
||||||
|
Map<String, Object> row = result.next();
|
||||||
|
nodes.add(map("title",row.get("movie"),"label","movie"));
|
||||||
|
int target=i;
|
||||||
|
i++;
|
||||||
|
for (Object name : (Collection) row.get("cast")) {
|
||||||
|
Map<String, Object> actor = map("title", name,"label","actor");
|
||||||
|
int source = nodes.indexOf(actor);
|
||||||
|
if (source == -1) {
|
||||||
|
nodes.add(actor);
|
||||||
|
source = i++;
|
||||||
|
}
|
||||||
|
rels.add(map("source",source,"target",target));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return map("nodes", nodes, "links", rels);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map<String, Object> map(String key1, Object value1, String key2, Object value2) {
|
||||||
|
Map<String, Object> result = new HashMap<String,Object>(2);
|
||||||
|
result.put(key1,value1);
|
||||||
|
result.put(key2,value2);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, Object> graph(int limit) {
|
||||||
|
Iterator<Map<String, Object>> result = movieRepository.graph(limit).iterator();
|
||||||
|
return toD3Format(result);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
<configuration>
|
||||||
|
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>web - %date [%thread] %-5level %logger{36} - %message%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<logger name="org.springframework" level="WARN" />
|
||||||
|
<logger name="org.springframework.transaction" level="WARN" />
|
||||||
|
|
||||||
|
<!-- in order to debug some marshalling issues, this needs to be TRACE -->
|
||||||
|
<logger name="org.springframework.web.servlet.mvc" level="WARN" />
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
|
||||||
|
</configuration>
|
Binary file not shown.
After Width: | Height: | Size: 855 B |
|
@ -0,0 +1,133 @@
|
||||||
|
package com.baeldung.spring.data.neo4j;
|
||||||
|
|
||||||
|
import com.baeldung.spring.data.neo4j.config.MovieDatabaseNeo4jTestConfiguration;
|
||||||
|
import com.baeldung.spring.data.neo4j.domain.Movie;
|
||||||
|
import com.baeldung.spring.data.neo4j.domain.Person;
|
||||||
|
import com.baeldung.spring.data.neo4j.domain.Role;
|
||||||
|
import com.baeldung.spring.data.neo4j.repostory.MovieRepository;
|
||||||
|
import com.baeldung.spring.data.neo4j.repostory.PersonRepository;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.test.annotation.DirtiesContext;
|
||||||
|
import org.springframework.test.context.ActiveProfiles;
|
||||||
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
|
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
import static junit.framework.TestCase.assertNull;
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertNotNull;
|
||||||
|
|
||||||
|
@RunWith(SpringJUnit4ClassRunner.class)
|
||||||
|
@ContextConfiguration(classes = MovieDatabaseNeo4jTestConfiguration.class)
|
||||||
|
@ActiveProfiles(profiles = "test")
|
||||||
|
public class MovieRepositoryTest {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private MovieRepository movieRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private PersonRepository personRepository;
|
||||||
|
|
||||||
|
public MovieRepositoryTest() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void initializeDatabase() {
|
||||||
|
System.out.println("seeding embedded database");
|
||||||
|
Movie italianJob = new Movie();
|
||||||
|
italianJob.setTitle("The Italian Job");
|
||||||
|
italianJob.setReleased(1999);
|
||||||
|
movieRepository.save(italianJob);
|
||||||
|
|
||||||
|
Person mark = new Person();
|
||||||
|
mark.setName("Mark Wahlberg");
|
||||||
|
personRepository.save(mark);
|
||||||
|
|
||||||
|
Role charlie = new Role();
|
||||||
|
charlie.setMovie(italianJob);
|
||||||
|
charlie.setPerson(mark);
|
||||||
|
Collection<String> roleNames = new HashSet();
|
||||||
|
roleNames.add("Charlie Croker");
|
||||||
|
charlie.setRoles(roleNames);
|
||||||
|
List<Role> roles = new ArrayList();
|
||||||
|
roles.add(charlie);
|
||||||
|
italianJob.setRoles(roles);
|
||||||
|
movieRepository.save(italianJob);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DirtiesContext
|
||||||
|
public void testFindByTitle() {
|
||||||
|
System.out.println("findByTitle");
|
||||||
|
String title = "The Italian Job";
|
||||||
|
Movie result = movieRepository.findByTitle(title);
|
||||||
|
assertNotNull(result);
|
||||||
|
assertEquals(1999, result.getReleased());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DirtiesContext
|
||||||
|
public void testCount() {
|
||||||
|
System.out.println("count");
|
||||||
|
long movieCount = movieRepository.count();
|
||||||
|
assertNotNull(movieCount);
|
||||||
|
assertEquals(1, movieCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DirtiesContext
|
||||||
|
public void testFindAll() {
|
||||||
|
System.out.println("findAll");
|
||||||
|
Collection<Movie> result =
|
||||||
|
(Collection<Movie>) movieRepository.findAll();
|
||||||
|
assertNotNull(result);
|
||||||
|
assertEquals(1, result.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DirtiesContext
|
||||||
|
public void testFindByTitleContaining() {
|
||||||
|
System.out.println("findByTitleContaining");
|
||||||
|
String title = "Italian";
|
||||||
|
Collection<Movie> result =
|
||||||
|
movieRepository.findByTitleContaining(title);
|
||||||
|
assertNotNull(result);
|
||||||
|
assertEquals(1, result.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DirtiesContext
|
||||||
|
public void testGraph() {
|
||||||
|
System.out.println("graph");
|
||||||
|
List<Map<String, Object>> graph = movieRepository.graph(5);
|
||||||
|
assertEquals(1, graph.size());
|
||||||
|
Map<String, Object> map = graph.get(0);
|
||||||
|
assertEquals(2, map.size());
|
||||||
|
String[] cast = (String[]) map.get("cast");
|
||||||
|
String movie = (String) map.get("movie");
|
||||||
|
assertEquals("The Italian Job", movie);
|
||||||
|
assertEquals("Mark Wahlberg", cast[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DirtiesContext
|
||||||
|
public void testDeleteMovie() {
|
||||||
|
System.out.println("deleteMovie");
|
||||||
|
movieRepository.delete(movieRepository.findByTitle("The Italian Job"));
|
||||||
|
assertNull(movieRepository.findByTitle("The Italian Job"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DirtiesContext
|
||||||
|
public void testDeleteAll() {
|
||||||
|
System.out.println("deleteAll");
|
||||||
|
movieRepository.deleteAll();
|
||||||
|
Collection<Movie> result =
|
||||||
|
(Collection<Movie>) movieRepository.findAll();
|
||||||
|
assertEquals(0, result.size());
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue