blob: b5908191c658d95d37f94fa5d86d4ee2106d1cb7 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011-2012 Oracle. All rights reserved. This program and the
* accompanying materials are made available under the terms of the Eclipse
* Public License v1.0 and Eclipse Distribution License v. 1.0 which accompanies
* this distribution. The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html and the Eclipse Distribution
* License is available at http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors: dclarke - Bug 361016: Future Versions Examples
******************************************************************************/
package tests;
import static example.PersonModelExample.T1;
import static example.PersonModelExample.T2;
import static example.PersonModelExample.T3;
import static example.PersonModelExample.T4;
import static example.PersonModelExample.T5;
import static example.PersonModelExample.T6;
import static temporal.Effectivity.BOT;
import java.util.List;
import model.Person;
import model.PersonHobby;
import org.junit.Assert;
import org.junit.Test;
import temporal.TemporalEntityManager;
import example.PersonModelExample;
/**
*
* @author dclarke
* @since EclipseLink 2.3.1
*/
public class FuturePersonTests extends BaseTestCase {
private static PersonModelExample example = new PersonModelExample();
private Person getSample() {
return example.futurePerson;
}
@Override
public void populate(TemporalEntityManager em) {
example.populateHobbies(em);
for (PersonHobby ph : example.futurePerson.getPersonHobbies().values()) {
em.persist(ph);
}
em.persist(example.futurePerson);
}
@Test
public void queryAllCurrent() {
TemporalEntityManager em = getEntityManager();
List<Person> results = example.queryAllCurrent(em);
Assert.assertTrue(results.isEmpty());
}
@Test
public void queryPersonEditionAtBOT() {
TemporalEntityManager em = getEntityManager();
em.setProperty("EFF_TS", BOT);
List<Person> results = em.createQuery("SELECT p FROM Person p WHERE p.cid = " + getSample().getId(), Person.class).getResultList();
Assert.assertTrue("Editions found", results.isEmpty());
}
@Test
public void queryFutureEditionOfCurrentPersonAtT1() {
TemporalEntityManager em = getEntityManager();
em.setProperty("EFF_TS", T1);
List<Person> results = em.createQuery("SELECT p FROM Person p WHERE p.cid = " + getSample().getId(), Person.class).getResultList();
Assert.assertTrue("Editions found", results.isEmpty());
}
@Test
public void queryFutureEditionOfCurrentPersonAtT2() {
TemporalEntityManager em = getEntityManager();
em.setEffectiveTime(T2);
List<Person> results = em.createQuery("SELECT p FROM Person p WHERE p.cid = " + getSample().getId(), Person.class).getResultList();
System.out.println("QUERY EFFECTIVE @ T2:");
for (Person p : results) {
System.out.println("\t>" + p);
System.out.println("\t\t>" + p.getAddress());
System.out.println("\t\t>" + p.getPhones().values());
}
Assert.assertFalse("No Editions found", results.isEmpty());
Assert.assertEquals(1, results.size());
Person person = results.get(0);
Assert.assertSame(person, person.getContinuity());
Assert.assertFalse(person.getEffectivity().isCurrent());
Assert.assertTrue(person.getEffectivity().isFutureEdition());
Assert.assertEquals(getSample().getId(), person.getId());
Assert.assertEquals(getSample().getName(), person.getName());
Assert.assertNull(person.getAddress());
Assert.assertTrue(person.getPhones().isEmpty());
}
@Test
public void queryFutureEditionOfCurrentPersonAtT3() {
TemporalEntityManager em = getEntityManager();
em.setEffectiveTime(T3);
List<Person> results = em.createQuery("SELECT p FROM Person p WHERE p.cid = " + getSample().getId(), Person.class).getResultList();
System.out.println("QUERY EFFECTIVE @ T3:");
for (Person p : results) {
System.out.println("\t>" + p);
System.out.println("\t\t>" + p.getAddress());
System.out.println("\t\t>" + p.getPhones().values());
}
Assert.assertFalse("No Editions found", results.isEmpty());
Assert.assertEquals(1, results.size());
Person person = results.get(0);
Assert.assertSame(person, person.getContinuity());
Assert.assertFalse(person.getEffectivity().isCurrent());
Assert.assertTrue(person.getEffectivity().isFutureEdition());
Assert.assertEquals(getSample().getId(), person.getId());
Assert.assertEquals(getSample().getName(), person.getName());
Assert.assertNotNull(person.getAddress());
Assert.assertTrue(person.getPhones().isEmpty());
}
@Test
public void queryFutureEditionOfCurrentPersonAtT4() {
TemporalEntityManager em = getEntityManager();
em.setEffectiveTime(T4);
List<Person> results = em.createQuery("SELECT p FROM Person p WHERE p.cid = " + getSample().getId(), Person.class).getResultList();
Assert.assertFalse("No PersonEdition Found", results.isEmpty());
System.out.println("QUERY EFFECTIVE @ T4:");
for (Person p : results) {
System.out.println("\t>" + p);
System.out.println("\t\t>" + p.getAddress());
System.out.println("\t\t>" + p.getPhones().values());
}
Assert.assertFalse("No Editions found", results.isEmpty());
Assert.assertEquals(1, results.size());
Person person = results.get(0);
Assert.assertSame(person, person.getContinuity());
Assert.assertFalse(person.getEffectivity().isCurrent());
Assert.assertTrue(person.getEffectivity().isFutureEdition());
Assert.assertEquals(getSample().getId(), person.getId());
Assert.assertEquals(getSample().getName(), person.getName());
Assert.assertNotNull(person.getAddress());
Assert.assertFalse(person.getPhones().isEmpty());
}
@Test
public void queryFutureEditionOfCurrentPersonAtT5() {
TemporalEntityManager em = getEntityManager();
em.setEffectiveTime(T5);
List<Person> results = em.createQuery("SELECT p FROM Person p WHERE p.cid = " + getSample().getId(), Person.class).getResultList();
System.out.println("QUERY EFFECTIVE @ T5:");
for (Person p : results) {
System.out.println("\t>" + p);
System.out.println("\t\t>" + p.getAddress());
System.out.println("\t\t>" + p.getPhones().values());
}
Assert.assertFalse("No Editions found", results.isEmpty());
Assert.assertEquals(1, results.size());
Person person = results.get(0);
Assert.assertSame(person, person.getContinuity());
Assert.assertFalse(person.getEffectivity().isCurrent());
Assert.assertTrue(person.getEffectivity().isFutureEdition());
Assert.assertEquals(getSample().getId(), person.getId());
Assert.assertEquals(getSample().getName(), person.getName());
Assert.assertNotNull(person.getAddress());
Assert.assertFalse(person.getPhones().isEmpty());
}
@Test
public void verifyCreateNewEntityInFuture() {
TemporalEntityManager em = getEntityManager();
em.setEffectiveTime(T6);
em.getTransaction().begin();
Person p = em.newEntity(Person.class);
Assert.assertNotNull(p);
Assert.assertNotNull(p.getEffectivity());
em.getTransaction().rollback();
}
}