package org.mongodb.morphia.mapping.validation.fieldrules;
import org.bson.types.ObjectId;
import org.junit.Assert;
import org.junit.Test;
import org.mongodb.morphia.TestBase;
import org.mongodb.morphia.annotations.Embedded;
import org.mongodb.morphia.annotations.Entity;
import org.mongodb.morphia.annotations.Id;
import org.mongodb.morphia.annotations.Serialized;
import org.mongodb.morphia.mapping.validation.ConstraintViolationException;
import org.mongodb.morphia.testutil.TestEntity;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
/**
* @author Uwe Schaefer, (us@thomas-daily.de)
*/
public class EmbeddedAndSerializableTest extends TestBase {
@Test
public void embedded() {
getMorphia().map(Project.class, Period.class);
Project project = new Project();
project.period = new Period();
for (int x = 0; x < 100; x++) {
project.periods.add(new Period());
}
getDs().save(project);
Project project1 = getDs().find(Project.class).get();
final List<Period> periods = project1.periods;
for (int i = 0; i < periods.size(); i++) {
compare(project.periods.get(i), periods.get(i));
}
compare(project.period, project1.period);
}
@Test(expected = ConstraintViolationException.class)
public void testCheck() {
getMorphia().map(E.class);
}
private void compare(final Period original, final Period loaded) {
Assert.assertEquals(original.from, loaded.from);
Assert.assertEquals(original.until, loaded.until);
}
public static class E extends TestEntity {
@Embedded
@Serialized
private R r;
}
public static class R {
}
@Entity
public static class Project {
@Id
private ObjectId id;
@Embedded
private Period period;
@Embedded
private List<Period> periods = new ArrayList<Period>();
}
@Embedded
public static class Period implements Iterable<Date> {
private Date from = new Date();
private Date until = new Date();
@Override
public Iterator<Date> iterator() {
return null;
}
}
}