Resource res = def.getSchedules().get(0).getResource();
List<Availability> avails = res.getAvailability();
assert avails != null : "should have initial avail";
assert avails.size() == 1 : "should have initial avail";
Availability initialAvail = avails.get(0);
Availability beginUpTime = new Availability(res, getAnotherDate().getTime(), AvailabilityType.UP);
em.persist(beginUpTime);
em.flush();
Date middleOfAvailabilityUP = getAnotherDate();
Availability endUpTime = new Availability(res, getAnotherDate().getTime(), AvailabilityType.DOWN);
em.persist(endUpTime);
em.flush();
initialAvail.setEndTime(beginUpTime.getStartTime());
initialAvail = em.merge(initialAvail);
beginUpTime.setEndTime(endUpTime.getStartTime());
beginUpTime = em.merge(beginUpTime);
em.flush();
/*
* We now have 2 AVailabilities for the resource FIND_CURRENT_BY_RESOURCE should return avail2
*/
Query q = em.createNamedQuery(Availability.FIND_CURRENT_BY_RESOURCE);
q.setParameter("resourceId", res.getId());
Availability ava = (Availability) q.getSingleResult();
assert ava.equals(endUpTime);
Date afterAvailabilityDown = getAnotherDate();
/*
* Now try to get all relevant data for a certain time interval [ middleOfAvailabilityUP,
* afterAvailabilityDown ]