package org.mongodb.morphia;
import org.junit.Assert;
import org.junit.Test;
import org.mongodb.morphia.mapping.MappingException;
import org.mongodb.morphia.query.Query;
import org.mongodb.morphia.query.TestQuery.ContainsPic;
import org.mongodb.morphia.query.TestQuery.Pic;
import org.mongodb.morphia.query.TestQuery.PicWithObjectId;
public class TestQueriesOnReferences extends TestBase {
@Test
public void testKeyExists() {
final ContainsPic cpk = new ContainsPic();
final Pic p = new Pic();
cpk.setPic(p);
getDs().save(p);
getDs().save(cpk);
Assert.assertNotNull(getDs().find(ContainsPic.class)
.field("pic").exists()
.project("pic", true).get());
Assert.assertNull(getDs().find(ContainsPic.class)
.field("pic").doesNotExist()
.project("pic", true).get());
}
@Test(expected = MappingException.class)
public void testMissingReferences() {
final ContainsPic cpk = new ContainsPic();
final Pic p = new Pic();
cpk.setPic(p);
getDs().save(p);
getDs().save(cpk);
getDs().delete(p);
getDs().find(ContainsPic.class).asList();
}
@Test
public void testQueryOverLazyReference() throws Exception {
final ContainsPic cpk = new ContainsPic();
final Pic p = new Pic();
getDs().save(p);
final PicWithObjectId withObjectId = new PicWithObjectId();
getDs().save(withObjectId);
cpk.setLazyPic(p);
cpk.setLazyObjectIdPic(withObjectId);
getDs().save(cpk);
Query<ContainsPic> query = getDs().find(ContainsPic.class);
Assert.assertNotNull(query.field("lazyPic")
.equal(p)
.get());
query = getDs().find(ContainsPic.class);
Assert.assertNotNull(query.field("lazyObjectIdPic")
.equal(withObjectId)
.get());
}
@Test
public void testQueryOverReference() throws Exception {
final ContainsPic cpk = new ContainsPic();
final Pic p = new Pic();
getDs().save(p);
cpk.setPic(p);
getDs().save(cpk);
final Query<ContainsPic> query = getDs().find(ContainsPic.class);
final ContainsPic object = query.field("pic")
.equal(p)
.get();
Assert.assertNotNull(object);
}
@Test
public void testWithKeyQuery() {
final ContainsPic cpk = new ContainsPic();
final Pic p = new Pic();
cpk.setPic(p);
getDs().save(p);
getDs().save(cpk);
ContainsPic containsPic = getDs().find(ContainsPic.class)
.field("pic").equal(new Key<Pic>(Pic.class, "Pic", p.getId()))
.get();
Assert.assertEquals(cpk.getId(), containsPic.getId());
containsPic = getDs().find(ContainsPic.class).field("pic").equal(new Key<Pic>(Pic.class, "Pic", p.getId())).get();
Assert.assertEquals(cpk.getId(), containsPic.getId());
}
}