package org.springframework.data.mongodb.examples.music;
import static org.springframework.data.mongodb.core.query.Criteria.*;
import org.junit.Test;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.BasicQuery;
import org.springframework.data.mongodb.core.query.Query;
/**
* Simple showcase to see how {@link Album} instances can be persisted and
* queried by using the {@link MongoTemplate} API (or {@link MongoOperations}).
*
* @author Oliver Gierke
*/
public class AlbumsIntegrationTest extends AbstractIntegrationTest {
/*
* (non-Javadoc)
*
* @see
* org.springframework.data.mongodb.core.core.examples.music.AbstractIntegrationTests
* #setUp()
*/
@Override
public void setUp() {
super.setUp();
// Stores both albums
operations.insertAll(albums);
}
@Test
public void lookupAlbumByIdWithQueryBuilder() throws Exception {
Query build =
new Query(where("_id").is(bigWhiskey.getId()));
assertSingleGruxAlbum(build);
}
@Test
public void lookupAlbumByIdUsingJson() throws Exception {
Query query =
parseQuery("{'_id' : { '$oid' : '%s' }}", bigWhiskey.getId());
assertSingleGruxAlbum(query);
}
@Test
public void lookupAlbumsByTrackNameUsingJson() throws Exception {
Query query = parseQuery("{'tracks.name' : 'Wheels'}");
assertSinglePursuitAlbum(query);
}
@Test
public void lookupAlbumByTrackNameUsingQueryBuilder() {
Query spec =
new Query(where("tracks.name").is("Grux"));
assertSingleGruxAlbum(spec);
}
@Test
public void lookupAlbumByTrackNamePattern() throws Exception {
Query query =
parseQuery("{ 'tracks.name' : { '$regex' : '.*it.*' , '$options' : '' }}");
assertBothAlbums(operations.find(query, Album.class, COLLECTION));
}
private Query parseQuery(String query, Object... arguments) {
return new BasicQuery(String.format(query, arguments));
}
}