diff --git a/src/main/java/org/openepics/names/repository/DeviceGroupRepository.java b/src/main/java/org/openepics/names/repository/DeviceGroupRepository.java index 342a06f6a447ba4fb43cce8674730216953297c3..9d608063b609a959910c76d9bd5078d3e3ddbc11 100644 --- a/src/main/java/org/openepics/names/repository/DeviceGroupRepository.java +++ b/src/main/java/org/openepics/names/repository/DeviceGroupRepository.java @@ -28,6 +28,7 @@ import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; +import javax.persistence.criteria.Subquery; import org.apache.commons.lang3.BooleanUtils; import org.openepics.names.repository.model.DeviceGroup; @@ -86,7 +87,7 @@ public class DeviceGroupRepository { CriteriaQuery<Long> cq = cb.createQuery(Long.class); Root<DeviceGroup> from = cq.from(DeviceGroup.class); - cq.where(cb.and(preparePredicatesDeviceGroups(cb, from, statuses, deleted, queryFields, queryValues, includeHistory).toArray(new Predicate[0]))); + cq.where(cb.and(preparePredicatesDeviceGroups(cb, from, cq.subquery(Long.class), statuses, deleted, queryFields, queryValues, includeHistory).toArray(new Predicate[0]))); cq.select(cb.count(from)); return em.createQuery(cq).getSingleResult(); @@ -167,7 +168,7 @@ public class DeviceGroupRepository { CriteriaQuery<DeviceGroup> cq = cb.createQuery(DeviceGroup.class); Root<DeviceGroup> from = cq.from(DeviceGroup.class); - cq.where(cb.and(preparePredicatesDeviceGroups(cb, from, statuses, deleted, queryFields, queryValues, includeHistory).toArray(new Predicate[0]))); + cq.where(cb.and(preparePredicatesDeviceGroups(cb, from, cq.subquery(Long.class), statuses, deleted, queryFields, queryValues, includeHistory).toArray(new Predicate[0]))); cq.select(from); if (orderBy != null) { @@ -216,6 +217,7 @@ public class DeviceGroupRepository { * * @param cb criteria builder * @param from criteria query root + * @param sub sub query to be used if history not included * @param statuses statuses * @param deleted deleted * @param queryFields query fields @@ -224,18 +226,47 @@ public class DeviceGroupRepository { * @return list of predicates */ private List<Predicate> preparePredicatesDeviceGroups( - CriteriaBuilder cb, Root<DeviceGroup> from, + CriteriaBuilder cb, Root<DeviceGroup> from, Subquery<Long> sub, Status[] statuses, Boolean deleted, FieldStructure[] queryFields, String[] queryValues, Boolean includeHistory) { List<Predicate> predicates = new ArrayList<>(); if (!Boolean.TRUE.equals(includeHistory)) { - // exclude (approved and not latest) - Predicate predicateApproved = cb.equal(from.get("status"), Status.APPROVED); - Predicate predicateNotLatest = cb.equal(from.get("latest"), Boolean.FALSE); - Predicate predicateExclude = cb.not(cb.and(predicateApproved, predicateNotLatest)); - predicates.add(predicateExclude); - + // purpose of Naming to show valid entries + // therefore + // exclude some values unless history requested + // make sure to not exclude present and future values + // + // not only + // exclude APPROVED and not latest + // select * from Structure s where + // not(s.status = 'APPROVED' and s.latest = false) + // not only + // exclude earlier than APPROVED and latest (considered history) + // include PENDING and not latest (considered future) + // select * from Structure s where + // (not s.id < (select id from structure s2 where s2.uuid = s.uuid and s2.latest = true)) + // or (s.status = 'PENDING' and s.latest = false) + // instead + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + // select * from Structure s where + // (not s.id < (select id from system s2 where s2.uuid = s.uuid and s2.latest = true)) + // or (not exists(select id from system s2 where s2.uuid = s.uuid and s2.latest = true)) + + Root<DeviceGroup> fromSub = sub.from(DeviceGroup.class); + sub.where(cb.and( + cb.equal(fromSub.get("uuid"), from.get("uuid")), + cb.equal(fromSub.get("latest"), Boolean.TRUE) + )); + sub.select(fromSub.get("id")); + + Predicate predicateExcludeInclude = + cb.or( + cb.not(cb.lessThan(from.get("id").as(Long.class), sub)), + cb.not(cb.exists(sub))); + predicates.add(predicateExcludeInclude); } if (statuses != null) { diff --git a/src/main/java/org/openepics/names/repository/DeviceTypeRepository.java b/src/main/java/org/openepics/names/repository/DeviceTypeRepository.java index f06a8e161e2649f026ad94445743070048defeb5..133a728ce6d800ff7bc6532b11ffc28abb3db8d9 100644 --- a/src/main/java/org/openepics/names/repository/DeviceTypeRepository.java +++ b/src/main/java/org/openepics/names/repository/DeviceTypeRepository.java @@ -28,6 +28,7 @@ import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; +import javax.persistence.criteria.Subquery; import org.apache.commons.lang3.BooleanUtils; import org.openepics.names.repository.model.DeviceType; @@ -86,7 +87,7 @@ public class DeviceTypeRepository { CriteriaQuery<Long> cq = cb.createQuery(Long.class); Root<DeviceType> from = cq.from(DeviceType.class); - cq.where(cb.and(preparePredicatesDeviceTypes(cb, from, statuses, deleted, queryFields, queryValues, includeHistory).toArray(new Predicate[0]))); + cq.where(cb.and(preparePredicatesDeviceTypes(cb, from, cq.subquery(Long.class), statuses, deleted, queryFields, queryValues, includeHistory).toArray(new Predicate[0]))); cq.select(cb.count(from)); return em.createQuery(cq).getSingleResult(); @@ -167,7 +168,7 @@ public class DeviceTypeRepository { CriteriaQuery<DeviceType> cq = cb.createQuery(DeviceType.class); Root<DeviceType> from = cq.from(DeviceType.class); - cq.where(cb.and(preparePredicatesDeviceTypes(cb, from, statuses, deleted, queryFields, queryValues, includeHistory).toArray(new Predicate[0]))); + cq.where(cb.and(preparePredicatesDeviceTypes(cb, from, cq.subquery(Long.class), statuses, deleted, queryFields, queryValues, includeHistory).toArray(new Predicate[0]))); cq.select(from); if (orderBy != null) { @@ -216,6 +217,7 @@ public class DeviceTypeRepository { * * @param cb criteria builder * @param from criteria query root + * @param sub sub query to be used if history not included * @param statuses statuses * @param deleted deleted * @param queryFields query fields @@ -224,17 +226,47 @@ public class DeviceTypeRepository { * @return list of predicates */ private List<Predicate> preparePredicatesDeviceTypes( - CriteriaBuilder cb, Root<DeviceType> from, + CriteriaBuilder cb, Root<DeviceType> from, Subquery<Long> sub, Status[] statuses, Boolean deleted, FieldStructure[] queryFields, String[] queryValues, Boolean includeHistory) { List<Predicate> predicates = new ArrayList<>(); if (!Boolean.TRUE.equals(includeHistory)) { - // exclude (approved and not latest) - Predicate predicateApproved = cb.equal(from.get("status"), Status.APPROVED); - Predicate predicateNotLatest = cb.equal(from.get("latest"), Boolean.FALSE); - Predicate predicateExclude = cb.not(cb.and(predicateApproved, predicateNotLatest)); - predicates.add(predicateExclude); + // purpose of Naming to show valid entries + // therefore + // exclude some values unless history requested + // make sure to not exclude present and future values + // + // not only + // exclude APPROVED and not latest + // select * from Structure s where + // not(s.status = 'APPROVED' and s.latest = false) + // not only + // exclude earlier than APPROVED and latest (considered history) + // include PENDING and not latest (considered future) + // select * from Structure s where + // (not s.id < (select id from structure s2 where s2.uuid = s.uuid and s2.latest = true)) + // or (s.status = 'PENDING' and s.latest = false) + // instead + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + // select * from Structure s where + // (not s.id < (select id from system s2 where s2.uuid = s.uuid and s2.latest = true)) + // or (not exists(select id from system s2 where s2.uuid = s.uuid and s2.latest = true)) + + Root<DeviceType> fromSub = sub.from(DeviceType.class); + sub.where(cb.and( + cb.equal(fromSub.get("uuid"), from.get("uuid")), + cb.equal(fromSub.get("latest"), Boolean.TRUE) + )); + sub.select(fromSub.get("id")); + + Predicate predicateExcludeInclude = + cb.or( + cb.not(cb.lessThan(from.get("id").as(Long.class), sub)), + cb.not(cb.exists(sub))); + predicates.add(predicateExcludeInclude); } if (statuses != null) { diff --git a/src/main/java/org/openepics/names/repository/DisciplineRepository.java b/src/main/java/org/openepics/names/repository/DisciplineRepository.java index 77faa2e3dd8f99d30649f01139d94760dd7e342d..44e99978f2efa9272ca00b800939a6a1358e9af6 100644 --- a/src/main/java/org/openepics/names/repository/DisciplineRepository.java +++ b/src/main/java/org/openepics/names/repository/DisciplineRepository.java @@ -28,6 +28,7 @@ import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; +import javax.persistence.criteria.Subquery; import org.apache.commons.lang3.BooleanUtils; import org.openepics.names.repository.model.Discipline; @@ -86,7 +87,7 @@ public class DisciplineRepository { CriteriaQuery<Long> cq = cb.createQuery(Long.class); Root<Discipline> from = cq.from(Discipline.class); - cq.where(cb.and(preparePredicatesDisciplines(cb, from, statuses, deleted, queryFields, queryValues, includeHistory).toArray(new Predicate[0]))); + cq.where(cb.and(preparePredicatesDisciplines(cb, from, cq.subquery(Long.class), statuses, deleted, queryFields, queryValues, includeHistory).toArray(new Predicate[0]))); cq.select(cb.count(from)); return em.createQuery(cq).getSingleResult(); @@ -167,7 +168,7 @@ public class DisciplineRepository { CriteriaQuery<Discipline> cq = cb.createQuery(Discipline.class); Root<Discipline> from = cq.from(Discipline.class); - cq.where(cb.and(preparePredicatesDisciplines(cb, from, statuses, deleted, queryFields, queryValues, includeHistory).toArray(new Predicate[0]))); + cq.where(cb.and(preparePredicatesDisciplines(cb, from, cq.subquery(Long.class), statuses, deleted, queryFields, queryValues, includeHistory).toArray(new Predicate[0]))); cq.select(from); if (orderBy != null) { @@ -216,6 +217,7 @@ public class DisciplineRepository { * * @param cb criteria builder * @param from criteria query root + * @param sub sub query to be used if history not included * @param statuses statuses * @param deleted deleted * @param queryFields query fields @@ -224,17 +226,47 @@ public class DisciplineRepository { * @return list of predicates */ private List<Predicate> preparePredicatesDisciplines( - CriteriaBuilder cb, Root<Discipline> from, + CriteriaBuilder cb, Root<Discipline> from, Subquery<Long> sub, Status[] statuses, Boolean deleted, FieldStructure[] queryFields, String[] queryValues, Boolean includeHistory) { List<Predicate> predicates = new ArrayList<>(); if (!Boolean.TRUE.equals(includeHistory)) { - // exclude (approved and not latest) - Predicate predicateApproved = cb.equal(from.get("status"), Status.APPROVED); - Predicate predicateNotLatest = cb.equal(from.get("latest"), Boolean.FALSE); - Predicate predicateExclude = cb.not(cb.and(predicateApproved, predicateNotLatest)); - predicates.add(predicateExclude); + // purpose of Naming to show valid entries + // therefore + // exclude some values unless history requested + // make sure to not exclude present and future values + // + // not only + // exclude APPROVED and not latest + // select * from Structure s where + // not(s.status = 'APPROVED' and s.latest = false) + // not only + // exclude earlier than APPROVED and latest (considered history) + // include PENDING and not latest (considered future) + // select * from Structure s where + // (not s.id < (select id from structure s2 where s2.uuid = s.uuid and s2.latest = true)) + // or (s.status = 'PENDING' and s.latest = false) + // instead + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + // select * from Structure s where + // (not s.id < (select id from system s2 where s2.uuid = s.uuid and s2.latest = true)) + // or (not exists(select id from system s2 where s2.uuid = s.uuid and s2.latest = true)) + + Root<Discipline> fromSub = sub.from(Discipline.class); + sub.where(cb.and( + cb.equal(fromSub.get("uuid"), from.get("uuid")), + cb.equal(fromSub.get("latest"), Boolean.TRUE) + )); + sub.select(fromSub.get("id")); + + Predicate predicateExcludeInclude = + cb.or( + cb.not(cb.lessThan(from.get("id").as(Long.class), sub)), + cb.not(cb.exists(sub))); + predicates.add(predicateExcludeInclude); } if (statuses != null) { diff --git a/src/main/java/org/openepics/names/repository/NameRepository.java b/src/main/java/org/openepics/names/repository/NameRepository.java index 4226d7a528bc789e625e0c4ed858b33319e1ffc3..be1ef023554c42996fef5cc7f3da29ef45ea3a66 100644 --- a/src/main/java/org/openepics/names/repository/NameRepository.java +++ b/src/main/java/org/openepics/names/repository/NameRepository.java @@ -220,7 +220,15 @@ public class NameRepository { List<Predicate> predicates = new ArrayList<>(); if (!Boolean.TRUE.equals(includeHistory)) { - // exclude (not latest) + // purpose of Naming to show valid entries + // therefore + // exclude some values unless history requested + // make sure to not exclude present and future values + // + // exclude not latest + // select * from Name n where + // not(n.latest = false) + Predicate predicateNotLatest = cb.equal(from.get("latest"), Boolean.FALSE); Predicate predicateExclude = cb.not(cb.and(predicateNotLatest)); predicates.add(predicateExclude); diff --git a/src/main/java/org/openepics/names/repository/SubsystemRepository.java b/src/main/java/org/openepics/names/repository/SubsystemRepository.java index 461ab1396a137afece3419c3c06f44815a8623d9..da5c5b796f4e815fe52ed3cdfb61de5f10238026 100644 --- a/src/main/java/org/openepics/names/repository/SubsystemRepository.java +++ b/src/main/java/org/openepics/names/repository/SubsystemRepository.java @@ -28,6 +28,7 @@ import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; +import javax.persistence.criteria.Subquery; import org.apache.commons.lang3.BooleanUtils; import org.openepics.names.repository.model.Subsystem; @@ -86,7 +87,7 @@ public class SubsystemRepository { CriteriaQuery<Long> cq = cb.createQuery(Long.class); Root<Subsystem> from = cq.from(Subsystem.class); - cq.where(cb.and(preparePredicatesSubsystems(cb, from, statuses, deleted, queryFields, queryValues, includeHistory).toArray(new Predicate[0]))); + cq.where(cb.and(preparePredicatesSubsystems(cb, from, cq.subquery(Long.class), statuses, deleted, queryFields, queryValues, includeHistory).toArray(new Predicate[0]))); cq.select(cb.count(from)); return em.createQuery(cq).getSingleResult(); @@ -167,7 +168,7 @@ public class SubsystemRepository { CriteriaQuery<Subsystem> cq = cb.createQuery(Subsystem.class); Root<Subsystem> from = cq.from(Subsystem.class); - cq.where(cb.and(preparePredicatesSubsystems(cb, from, statuses, deleted, queryFields, queryValues, includeHistory).toArray(new Predicate[0]))); + cq.where(cb.and(preparePredicatesSubsystems(cb, from, cq.subquery(Long.class), statuses, deleted, queryFields, queryValues, includeHistory).toArray(new Predicate[0]))); cq.select(from); if (orderBy != null) { @@ -216,6 +217,7 @@ public class SubsystemRepository { * * @param cb criteria builder * @param from criteria query root + * @param sub sub query to be used if history not included * @param statuses statuses * @param deleted deleted * @param queryFields query fields @@ -224,17 +226,47 @@ public class SubsystemRepository { * @return list of predicates */ private List<Predicate> preparePredicatesSubsystems( - CriteriaBuilder cb, Root<Subsystem> from, + CriteriaBuilder cb, Root<Subsystem> from, Subquery<Long> sub, Status[] statuses, Boolean deleted, FieldStructure[] queryFields, String[] queryValues, Boolean includeHistory) { List<Predicate> predicates = new ArrayList<>(); if (!Boolean.TRUE.equals(includeHistory)) { - // exclude (approved and not latest) - Predicate predicateApproved = cb.equal(from.get("status"), Status.APPROVED); - Predicate predicateNotLatest = cb.equal(from.get("latest"), Boolean.FALSE); - Predicate predicateExclude = cb.not(cb.and(predicateApproved, predicateNotLatest)); - predicates.add(predicateExclude); + // purpose of Naming to show valid entries + // therefore + // exclude some values unless history requested + // make sure to not exclude present and future values + // + // not only + // exclude APPROVED and not latest + // select * from Structure s where + // not(s.status = 'APPROVED' and s.latest = false) + // not only + // exclude earlier than APPROVED and latest (considered history) + // include PENDING and not latest (considered future) + // select * from Structure s where + // (not s.id < (select id from structure s2 where s2.uuid = s.uuid and s2.latest = true)) + // or (s.status = 'PENDING' and s.latest = false) + // instead + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + // select * from Structure s where + // (not s.id < (select id from system s2 where s2.uuid = s.uuid and s2.latest = true)) + // or (not exists(select id from system s2 where s2.uuid = s.uuid and s2.latest = true)) + + Root<Subsystem> fromSub = sub.from(Subsystem.class); + sub.where(cb.and( + cb.equal(fromSub.get("uuid"), from.get("uuid")), + cb.equal(fromSub.get("latest"), Boolean.TRUE) + )); + sub.select(fromSub.get("id")); + + Predicate predicateExcludeInclude = + cb.or( + cb.not(cb.lessThan(from.get("id").as(Long.class), sub)), + cb.not(cb.exists(sub))); + predicates.add(predicateExcludeInclude); } if (statuses != null) { diff --git a/src/main/java/org/openepics/names/repository/SystemGroupRepository.java b/src/main/java/org/openepics/names/repository/SystemGroupRepository.java index a87a7c30c56c8c4a1cf49848ccfb2794f37d55b4..1dac14308b8665176b9d6a4c1ff65a01956dd55f 100644 --- a/src/main/java/org/openepics/names/repository/SystemGroupRepository.java +++ b/src/main/java/org/openepics/names/repository/SystemGroupRepository.java @@ -28,6 +28,7 @@ import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; +import javax.persistence.criteria.Subquery; import org.apache.commons.lang3.BooleanUtils; import org.openepics.names.repository.model.SystemGroup; @@ -84,7 +85,7 @@ public class SystemGroupRepository { CriteriaQuery<Long> cq = cb.createQuery(Long.class); Root<SystemGroup> from = cq.from(SystemGroup.class); - cq.where(cb.and(preparePredicatesSystemGroups(cb, from, statuses, deleted, queryFields, queryValues, includeHistory).toArray(new Predicate[0]))); + cq.where(cb.and(preparePredicatesSystemGroups(cb, from, cq.subquery(Long.class), statuses, deleted, queryFields, queryValues, includeHistory).toArray(new Predicate[0]))); cq.select(cb.count(from)); return em.createQuery(cq).getSingleResult(); @@ -163,7 +164,7 @@ public class SystemGroupRepository { CriteriaQuery<SystemGroup> cq = cb.createQuery(SystemGroup.class); Root<SystemGroup> from = cq.from(SystemGroup.class); - cq.where(cb.and(preparePredicatesSystemGroups(cb, from, statuses, deleted, queryFields, queryValues, includeHistory).toArray(new Predicate[0]))); + cq.where(cb.and(preparePredicatesSystemGroups(cb, from, cq.subquery(Long.class), statuses, deleted, queryFields, queryValues, includeHistory).toArray(new Predicate[0]))); cq.select(from); if (orderBy != null) { @@ -212,6 +213,7 @@ public class SystemGroupRepository { * * @param cb criteria builder * @param from criteria query root + * @param sub sub query to be used if history not included * @param statuses statuses * @param deleted deleted * @param queryFields query fields @@ -220,17 +222,47 @@ public class SystemGroupRepository { * @return list of predicates */ private List<Predicate> preparePredicatesSystemGroups( - CriteriaBuilder cb, Root<SystemGroup> from, + CriteriaBuilder cb, Root<SystemGroup> from, Subquery<Long> sub, Status[] statuses, Boolean deleted, FieldStructure[] queryFields, String[] queryValues, Boolean includeHistory) { List<Predicate> predicates = new ArrayList<>(); if (!Boolean.TRUE.equals(includeHistory)) { - // exclude (approved and not latest) - Predicate predicateApproved = cb.equal(from.get("status"), Status.APPROVED); - Predicate predicateNotLatest = cb.equal(from.get("latest"), Boolean.FALSE); - Predicate predicateExclude = cb.not(cb.and(predicateApproved, predicateNotLatest)); - predicates.add(predicateExclude); + // purpose of Naming to show valid entries + // therefore + // exclude some values unless history requested + // make sure to not exclude present and future values + // + // not only + // exclude APPROVED and not latest + // select * from Structure s where + // not(s.status = 'APPROVED' and s.latest = false) + // not only + // exclude earlier than APPROVED and latest (considered history) + // include PENDING and not latest (considered future) + // select * from Structure s where + // (not s.id < (select id from structure s2 where s2.uuid = s.uuid and s2.latest = true)) + // or (s.status = 'PENDING' and s.latest = false) + // instead + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + // select * from Structure s where + // (not s.id < (select id from system s2 where s2.uuid = s.uuid and s2.latest = true)) + // or (not exists(select id from system s2 where s2.uuid = s.uuid and s2.latest = true)) + + Root<SystemGroup> fromSub = sub.from(SystemGroup.class); + sub.where(cb.and( + cb.equal(fromSub.get("uuid"), from.get("uuid")), + cb.equal(fromSub.get("latest"), Boolean.TRUE) + )); + sub.select(fromSub.get("id")); + + Predicate predicateExcludeInclude = + cb.or( + cb.not(cb.lessThan(from.get("id").as(Long.class), sub)), + cb.not(cb.exists(sub))); + predicates.add(predicateExcludeInclude); } if (statuses != null) { diff --git a/src/main/java/org/openepics/names/repository/SystemRepository.java b/src/main/java/org/openepics/names/repository/SystemRepository.java index de838d4918e75eedda3d47994eb78bf5724480be..90c2fc7335df940ce789be122308e19d062760a4 100644 --- a/src/main/java/org/openepics/names/repository/SystemRepository.java +++ b/src/main/java/org/openepics/names/repository/SystemRepository.java @@ -28,6 +28,7 @@ import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; +import javax.persistence.criteria.Subquery; import org.apache.commons.lang3.BooleanUtils; import org.openepics.names.repository.model.System; @@ -86,7 +87,7 @@ public class SystemRepository { CriteriaQuery<Long> cq = cb.createQuery(Long.class); Root<System> from = cq.from(System.class); - cq.where(cb.and(preparePredicatesSystems(cb, from, statuses, deleted, queryFields, queryValues, includeHistory).toArray(new Predicate[0]))); + cq.where(cb.and(preparePredicatesSystems(cb, from, cq.subquery(Long.class), statuses, deleted, queryFields, queryValues, includeHistory).toArray(new Predicate[0]))); cq.select(cb.count(from)); return em.createQuery(cq).getSingleResult(); @@ -167,7 +168,7 @@ public class SystemRepository { CriteriaQuery<System> cq = cb.createQuery(System.class); Root<System> from = cq.from(System.class); - cq.where(cb.and(preparePredicatesSystems(cb, from, statuses, deleted, queryFields, queryValues, includeHistory).toArray(new Predicate[0]))); + cq.where(cb.and(preparePredicatesSystems(cb, from, cq.subquery(Long.class), statuses, deleted, queryFields, queryValues, includeHistory).toArray(new Predicate[0]))); cq.select(from); if (orderBy != null) { @@ -216,6 +217,7 @@ public class SystemRepository { * * @param cb criteria builder * @param from criteria query root + * @param sub sub query to be used if history not included * @param statuses statuses * @param deleted deleted * @param queryFields query fields @@ -224,18 +226,47 @@ public class SystemRepository { * @return list of predicates */ private List<Predicate> preparePredicatesSystems( - CriteriaBuilder cb, Root<System> from, + CriteriaBuilder cb, Root<System> from, Subquery<Long> sub, Status[] statuses, Boolean deleted, FieldStructure[] queryFields, String[] queryValues, Boolean includeHistory) { List<Predicate> predicates = new ArrayList<>(); if (!Boolean.TRUE.equals(includeHistory)) { - // exclude (approved and not latest) - Predicate predicateApproved = cb.equal(from.get("status"), Status.APPROVED); - Predicate predicateNotLatest = cb.equal(from.get("latest"), Boolean.FALSE); - Predicate predicateExclude = cb.not(cb.and(predicateApproved, predicateNotLatest)); - predicates.add(predicateExclude); - + // purpose of Naming to show valid entries + // therefore + // exclude some values unless history requested + // make sure to not exclude present and future values + // + // not only + // exclude APPROVED and not latest + // select * from Structure s where + // not(s.status = 'APPROVED' and s.latest = false) + // not only + // exclude earlier than APPROVED and latest (considered history) + // include PENDING and not latest (considered future) + // select * from Structure s where + // (not s.id < (select id from structure s2 where s2.uuid = s.uuid and s2.latest = true)) + // or (s.status = 'PENDING' and s.latest = false) + // instead + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + // select * from Structure s where + // (not s.id < (select id from system s2 where s2.uuid = s.uuid and s2.latest = true)) + // or (not exists(select id from system s2 where s2.uuid = s.uuid and s2.latest = true)) + + Root<System> fromSub = sub.from(System.class); + sub.where(cb.and( + cb.equal(fromSub.get("uuid"), from.get("uuid")), + cb.equal(fromSub.get("latest"), Boolean.TRUE) + )); + sub.select(fromSub.get("id")); + + Predicate predicateExcludeInclude = + cb.or( + cb.not(cb.lessThan(from.get("id").as(Long.class), sub)), + cb.not(cb.exists(sub))); + predicates.add(predicateExcludeInclude); } if (statuses != null) { diff --git a/src/test/java/org/openepics/names/docker/NamesIT.java b/src/test/java/org/openepics/names/docker/NamesIT.java index 7dfd957a03d86b4672497edb123e3b3fb2c13366..0697e6c975bb7d40e6de4277f2b979f3ca672cba 100644 --- a/src/test/java/org/openepics/names/docker/NamesIT.java +++ b/src/test/java/org/openepics/names/docker/NamesIT.java @@ -157,6 +157,50 @@ public class NamesIT { deviceTypeTT = approvedStructureElement.getUuid(); } + @Test + public void equivalenceName() { + // purpose + // test name equivalence + // + // what + // read equivalence name + + ITUtilNameElement.assertEquivalence("A2T-010PRL:RFS-PRLTap-071", "A2T-10PR1:RFS-PR1TAP-71"); + } + + @Test + public void existsName() { + // purpose + // test if name exists + // + // what + // read exists name + + ITUtilNameElement.assertExists("RFQ-010PRL:EMR-RFA-071", Boolean.FALSE, Boolean.TRUE); + } + + @Test + public void isLegacyName() { + // purpose + // test if name is legacy name + // + // what + // read is legacy name + + ITUtilNameElement.assertIsLegacy("RFQ-010PRL:EMR-RFA-071", Boolean.FALSE); + } + + @Test + public void isValidToCreateName() { + // purpose + // test if name is valid to create + // + // what + // read is valid to create name + + ITUtilNameElement.assertIsValidToCreate("RFQ-010PRL:EMR-RFA-071", Boolean.TRUE); + } + @Test public void checkCreate() { // purpose @@ -762,48 +806,4 @@ public class NamesIT { } } - @Test - public void equivalenceName() { - // purpose - // test name equivalence - // - // what - // read equivalence name - - ITUtilNameElement.assertEquivalence("A2T-010PRL:RFS-PRLTap-071", "A2T-10PR1:RFS-PR1TAP-71"); - } - - @Test - public void existsName() { - // purpose - // test if name exists - // - // what - // read exists name - - ITUtilNameElement.assertExists("RFQ-010PRL:EMR-RFA-071", Boolean.FALSE, Boolean.TRUE); - } - - @Test - public void isLegacyName() { - // purpose - // test if name is legacy name - // - // what - // read is legacy name - - ITUtilNameElement.assertIsLegacy("RFQ-010PRL:EMR-RFA-071", Boolean.FALSE); - } - - @Test - public void isValidToCreateName() { - // purpose - // test if name is valid to create - // - // what - // read is valid to create name - - ITUtilNameElement.assertIsValidToCreate("RFQ-010PRL:EMR-RFA-071", Boolean.TRUE); - } - } diff --git a/src/test/java/org/openepics/names/docker/StructuresDeviceGroupIT.java b/src/test/java/org/openepics/names/docker/StructuresDeviceGroupIT.java index 33ab1437cf3487cef933dca6fea74e7b7ee190b6..42580d07fc6ca855bc11d86801b06d5d44dac225 100644 --- a/src/test/java/org/openepics/names/docker/StructuresDeviceGroupIT.java +++ b/src/test/java/org/openepics/names/docker/StructuresDeviceGroupIT.java @@ -66,6 +66,8 @@ public class StructuresDeviceGroupIT { // client side // type, uuid, parent uuid, name, mnemonic, description, comment // may be set client side for test purposes + // order of methods in test not known + // therefore mnemonic values chosen to not interfere with mnemonic values in other methods @Container public static final DockerComposeContainer<?> ENVIRONMENT = @@ -99,6 +101,17 @@ public class StructuresDeviceGroupIT { discipline2Uuid = approvedStructureElement.getUuid(); } + @Test + public void equivalenceMnemonic() { + // purpose + // test mnemonic equivalence + // + // what + // read equivalence mnemonic + + ITUtilStructureElement.assertEquivalence("Dg", "DG"); + } + @Test public void checkCreate() { // purpose @@ -906,7 +919,7 @@ public class StructuresDeviceGroupIT { @Test public void readSearchHistoryApprove() { // purpose - // test read system group in various ways for create, approve + // test read device group in various ways for create, approve // search // latest // history @@ -986,7 +999,7 @@ public class StructuresDeviceGroupIT { @Test public void readSearchHistoryCancel() { // purpose - // test read system group in various ways for create, cancel + // test read device group in various ways for create, cancel // search // latest // history @@ -1066,7 +1079,7 @@ public class StructuresDeviceGroupIT { @Test public void readSearchHistoryReject() { // purpose - // test read system group in various ways for create, reject + // test read device group in various ways for create, reject // search // latest // history @@ -1143,10 +1156,278 @@ public class StructuresDeviceGroupIT { } } + @Test + public void readSearchHistoryStatusLatest1() { + // purpose + // test read device type in various ways + // status + // latest + // ( deleted ) + // history + // + // what + // entries with different statuses + // + // note + // create (and more) to read (with content) + // 4 different lines of uuid with combinations of status and latest + // 1 entry for each line of uuid + // in particular different statuses for last entry in lines of uuid + // mnemonic - P, C, R, A (pending, cancelled, rejected, approved) + // + // note! + // not only + // exclude APPROVED and not latest + // not only + // exclude earlier than APPROVED and latest (considered history) + // include PENDING and not latest (considered future) + // instead + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + + StructureElement structureElement = null; + StructureElement responseStructureElement = null; + UUID uuid, uuid2, uuid3, uuid4 = null; + + // a number of entries for which the last entry has status PENDING + structureElement = new StructureElement( + Type.DEVICEGROUP, null, disciplineUuid, + "name", null, "Di", 2, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreate(structureElement); + uuid = responseStructureElement.getUuid(); + + // a number of entries for which the last entry has status CANCELLED + structureElement = new StructureElement( + Type.DEVICEGROUP, null, disciplineUuid, + "name", null, "Di", 2, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateCancel(structureElement); + uuid2 = responseStructureElement.getUuid(); + + // a number of entries for which the last entry has status REJECTED + structureElement = new StructureElement( + Type.DEVICEGROUP, null, disciplineUuid, + "name", null, "Di", 2, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateReject(structureElement); + uuid3 = responseStructureElement.getUuid(); + + // a number of entries for which the last entry has status APPROVED + structureElement = new StructureElement( + Type.DEVICEGROUP, null, disciplineUuid, + "name", null, "Di", 2, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid4 = responseStructureElement.getUuid(); + + try { + // from first structure element + assertNotNull(uuid); + + // note + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + + ITUtilStructureElement.assertRead("/DEVICEGROUP?queryFields=UUID&queryValues=" + uuid.toString(), 1, 1); + ITUtilStructureElement.assertRead("/DEVICEGROUP?queryFields=UUID&queryValues=" + uuid2.toString(), 1, 1); + ITUtilStructureElement.assertRead("/DEVICEGROUP?queryFields=UUID&queryValues=" + uuid3.toString(), 1, 1); + ITUtilStructureElement.assertRead("/DEVICEGROUP?queryFields=UUID&queryValues=" + uuid4.toString(), 1, 1); + + ITUtilStructureElement.assertRead("/mnemonic/P1", 0, 0); + ITUtilStructureElement.assertRead("/mnemonic/C1", 0, 0); + ITUtilStructureElement.assertRead("/mnemonic/R1", 0, 0); + ITUtilStructureElement.assertRead("/mnemonic/A1", 0, 0); + + // normally expected number of entries are 1, 2, 2, 2 + // since within 1 second from requested to processed, expected number of entries 1, 1, 1, 1 + ITUtilStructureElement.assertRead("/history/" + uuid.toString(), 1, 1); + ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 1, 1); + ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 1, 1); + ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 1, 1); + } catch (Exception e) { + fail(); + } + } + + @Test + public void readSearchHistoryStatusLatest9() { + // purpose + // test read device type in various ways + // status + // latest + // ( deleted ) + // history + // + // what + // entries with different statuses + // + // note + // create (and more) to read (with content) + // 4 different lines of uuid with combinations of status and latest + // 9 entries for each line of uuid + // in particular different statuses for last entry in lines of uuid + // mnemonic - P, C, R, A (pending, cancelled, rejected, approved) + // + // note! + // not only + // exclude APPROVED and not latest + // not only + // exclude earlier than APPROVED and latest (considered history) + // include PENDING and not latest (considered future) + // instead + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + + StructureElement structureElement = null; + StructureElement responseStructureElement = null; + UUID uuid, uuid2, uuid3, uuid4 = null; + + // a number of entries for which the last entry has status PENDING + structureElement = new StructureElement( + Type.DEVICEGROUP, null, disciplineUuid, + "name", null, "Di", 2, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid = responseStructureElement.getUuid(); + + responseStructureElement.setComment("test comment 2"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 3"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + responseStructureElement.setComment("test comment 4"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 5"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 6"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + responseStructureElement.setComment("test comment 7"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 8"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 9"); + responseStructureElement = ITUtilStructureElement.assertUpdate(responseStructureElement); + + // a number of entries for which the last entry has status CANCELLED + structureElement = new StructureElement( + Type.DEVICEGROUP, null, disciplineUuid, + "name", null, "Di", 2, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid2 = responseStructureElement.getUuid(); + + responseStructureElement.setComment("test comment 2"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 3"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + responseStructureElement.setComment("test comment 4"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 5"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 6"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + responseStructureElement.setComment("test comment 7"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 8"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 9"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + + // a number of entries for which the last entry has status REJECTED + structureElement = new StructureElement( + Type.DEVICEGROUP, null, disciplineUuid, + "name", null, "Di", 2, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid3 = responseStructureElement.getUuid(); + + responseStructureElement.setComment("test comment 2"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 3"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + responseStructureElement.setComment("test comment 4"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 5"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 6"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + responseStructureElement.setComment("test comment 7"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 8"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 9"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + + // a number of entries for which the last entry has status APPROVED + structureElement = new StructureElement( + Type.DEVICEGROUP, null, disciplineUuid, + "name", null, "Di", 2, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid4 = responseStructureElement.getUuid(); + + responseStructureElement.setComment("test comment 2"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 3"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + responseStructureElement.setComment("test comment 4"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 5"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 6"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + responseStructureElement.setComment("test comment 7"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 8"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 9"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + + try { + // from first structure element + assertNotNull(uuid); + + // note + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + + ITUtilStructureElement.assertRead("/DEVICEGROUP?queryFields=UUID&queryValues=" + uuid.toString(), 2, 2); + ITUtilStructureElement.assertRead("/DEVICEGROUP?queryFields=UUID&queryValues=" + uuid2.toString(), 2, 2); + ITUtilStructureElement.assertRead("/DEVICEGROUP?queryFields=UUID&queryValues=" + uuid3.toString(), 2, 2); + ITUtilStructureElement.assertRead("/DEVICEGROUP?queryFields=UUID&queryValues=" + uuid4.toString(), 1, 1); + + ITUtilStructureElement.assertRead("/mnemonic/P9", 0, 0); + ITUtilStructureElement.assertRead("/mnemonic/C9", 0, 0); + ITUtilStructureElement.assertRead("/mnemonic/R9", 0, 0); + ITUtilStructureElement.assertRead("/mnemonic/A9", 0, 0); + + // normally expected number of entries are 17, 18, 18, 18 + // since within 1 second from requested to processed, expected number of entries 9, 9, 9, 9 + ITUtilStructureElement.assertRead("/history/" + uuid.toString(), 9, 9); + ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 9, 9); + ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 9, 9); + ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 9, 9); + } catch (Exception e) { + fail(); + } + } + @Test public void readSearchStatusDeletedChildren() { // purpose - // test read system group in various ways + // test read device group in various ways // status // ( latest ) // deleted @@ -1505,27 +1786,26 @@ public class StructuresDeviceGroupIT { // from first structure element assertNotNull(uuid); - ITUtilStructureElement.assertRead("/DEVICEGROUP?queryFields=MNEMONICPATH&queryValues=Di2", 30, 30); - - ITUtilStructureElement.assertRead("/DEVICEGROUP?statuses=PENDING&queryFields=MNEMONICPATH&queryValues=Di2", 5, 5); - ITUtilStructureElement.assertRead("/DEVICEGROUP?statuses=APPROVED&queryFields=MNEMONICPATH&queryValues=Di2", 20, 20); - ITUtilStructureElement.assertRead("/DEVICEGROUP?statuses=CANCELLED&queryFields=MNEMONICPATH&queryValues=Di2", 0, 0); - ITUtilStructureElement.assertRead("/DEVICEGROUP?statuses=REJECTED&queryFields=MNEMONICPATH&queryValues=Di2", 5, 5); - ITUtilStructureElement.assertRead("/DEVICEGROUP?statuses=PENDING&statuses=APPROVED&queryFields=MNEMONICPATH&queryValues=Di2", 25, 25); - - ITUtilStructureElement.assertRead("/DEVICEGROUP?deleted=false&queryFields=MNEMONICPATH&queryValues=Di2", 15, 15); - ITUtilStructureElement.assertRead("/DEVICEGROUP?deleted=false&statuses=PENDING&queryFields=MNEMONICPATH&queryValues=Di2", 0, 0); - ITUtilStructureElement.assertRead("/DEVICEGROUP?deleted=false&statuses=APPROVED&queryFields=MNEMONICPATH&queryValues=Di2", 15, 15); - ITUtilStructureElement.assertRead("/DEVICEGROUP?deleted=false&statuses=CANCELLED&queryFields=MNEMONICPATH&queryValues=Di2", 0, 0); - ITUtilStructureElement.assertRead("/DEVICEGROUP?deleted=false&statuses=REJECTED&queryFields=MNEMONICPATH&queryValues=Di2", 0, 0); + ITUtilStructureElement.assertRead("/DEVICEGROUP?queryFields=MNEMONICPATH&queryValues=Di2", 30, 30); + ITUtilStructureElement.assertRead("/DEVICEGROUP?statuses=PENDING&queryFields=MNEMONICPATH&queryValues=Di2", 5, 5); + ITUtilStructureElement.assertRead("/DEVICEGROUP?statuses=APPROVED&queryFields=MNEMONICPATH&queryValues=Di2", 20, 20); + ITUtilStructureElement.assertRead("/DEVICEGROUP?statuses=CANCELLED&queryFields=MNEMONICPATH&queryValues=Di2", 0, 0); + ITUtilStructureElement.assertRead("/DEVICEGROUP?statuses=REJECTED&queryFields=MNEMONICPATH&queryValues=Di2", 5, 5); + ITUtilStructureElement.assertRead("/DEVICEGROUP?statuses=PENDING&statuses=APPROVED&queryFields=MNEMONICPATH&queryValues=Di2", 25, 25); + + ITUtilStructureElement.assertRead("/DEVICEGROUP?deleted=false&queryFields=MNEMONICPATH&queryValues=Di2", 15, 15); + ITUtilStructureElement.assertRead("/DEVICEGROUP?deleted=false&statuses=PENDING&queryFields=MNEMONICPATH&queryValues=Di2", 0, 0); + ITUtilStructureElement.assertRead("/DEVICEGROUP?deleted=false&statuses=APPROVED&queryFields=MNEMONICPATH&queryValues=Di2", 15, 15); + ITUtilStructureElement.assertRead("/DEVICEGROUP?deleted=false&statuses=CANCELLED&queryFields=MNEMONICPATH&queryValues=Di2", 0, 0); + ITUtilStructureElement.assertRead("/DEVICEGROUP?deleted=false&statuses=REJECTED&queryFields=MNEMONICPATH&queryValues=Di2", 0, 0); ITUtilStructureElement.assertRead("/DEVICEGROUP?deleted=false&statuses=PENDING&statuses=APPROVED&queryFields=MNEMONICPATH&queryValues=Di2", 15, 15); - ITUtilStructureElement.assertRead("/DEVICEGROUP?deleted=true&queryFields=MNEMONICPATH&queryValues=Di2", 15, 15); - ITUtilStructureElement.assertRead("/DEVICEGROUP?deleted=true&statuses=PENDING&queryFields=MNEMONICPATH&queryValues=Di2", 5, 5); - ITUtilStructureElement.assertRead("/DEVICEGROUP?deleted=true&statuses=APPROVED&queryFields=MNEMONICPATH&queryValues=Di2", 5, 5); - ITUtilStructureElement.assertRead("/DEVICEGROUP?deleted=true&statuses=CANCELLED&queryFields=MNEMONICPATH&queryValues=Di2", 0, 0); - ITUtilStructureElement.assertRead("/DEVICEGROUP?deleted=true&statuses=REJECTED&queryFields=MNEMONICPATH&queryValues=Di2", 5, 5); - ITUtilStructureElement.assertRead("/DEVICEGROUP?deleted=true&statuses=PENDING&statuses=APPROVED&queryFields=MNEMONICPATH&queryValues=Di2", 10, 10); + ITUtilStructureElement.assertRead("/DEVICEGROUP?deleted=true&queryFields=MNEMONICPATH&queryValues=Di2", 15, 15); + ITUtilStructureElement.assertRead("/DEVICEGROUP?deleted=true&statuses=PENDING&queryFields=MNEMONICPATH&queryValues=Di2", 5, 5); + ITUtilStructureElement.assertRead("/DEVICEGROUP?deleted=true&statuses=APPROVED&queryFields=MNEMONICPATH&queryValues=Di2", 5, 5); + ITUtilStructureElement.assertRead("/DEVICEGROUP?deleted=true&statuses=CANCELLED&queryFields=MNEMONICPATH&queryValues=Di2", 0, 0); + ITUtilStructureElement.assertRead("/DEVICEGROUP?deleted=true&statuses=REJECTED&queryFields=MNEMONICPATH&queryValues=Di2", 5, 5); + ITUtilStructureElement.assertRead("/DEVICEGROUP?deleted=true&statuses=PENDING&statuses=APPROVED&queryFields=MNEMONICPATH&queryValues=Di2", 10, 10); ITUtilStructureElement.assertRead("/children/DEVICEGROUP/" + uuid.toString(), 0, 0); ITUtilStructureElement.assertRead("/children/DISCIPLINE/" + disciplineUuid.toString(), -1, 1); @@ -1534,15 +1814,4 @@ public class StructuresDeviceGroupIT { } } - @Test - public void equivalenceMnemonic() { - // purpose - // test mnemonic equivalence - // - // what - // read equivalence mnemonic - - ITUtilStructureElement.assertEquivalence("Dg", "DG"); - } - } diff --git a/src/test/java/org/openepics/names/docker/StructuresDeviceTypeIT.java b/src/test/java/org/openepics/names/docker/StructuresDeviceTypeIT.java index 6cbf0be2670a868d2cbee00fd8c829f27d986ffd..93b75aa7d1ff7b8ed478ff99b5c427595ac26bbc 100644 --- a/src/test/java/org/openepics/names/docker/StructuresDeviceTypeIT.java +++ b/src/test/java/org/openepics/names/docker/StructuresDeviceTypeIT.java @@ -66,6 +66,8 @@ public class StructuresDeviceTypeIT { // client side // type, uuid, parent uuid, name, mnemonic, description, comment // may be set client side for test purposes + // order of methods in test not known + // therefore mnemonic values chosen to not interfere with mnemonic values in other methods @Container public static final DockerComposeContainer<?> ENVIRONMENT = @@ -99,6 +101,17 @@ public class StructuresDeviceTypeIT { deviceGroupUuid = approvedStructureElement.getUuid(); } + @Test + public void equivalenceMnemonic() { + // purpose + // test mnemonic equivalence + // + // what + // read equivalence mnemonic + + ITUtilStructureElement.assertEquivalence("Dt", "DT"); + } + @Test public void checkCreate() { // purpose @@ -909,7 +922,7 @@ public class StructuresDeviceTypeIT { @Test public void readSearchHistoryApprove() { // purpose - // test read system group in various ways for create, approve + // test read device type in various ways for create, approve // search // latest // history @@ -989,7 +1002,7 @@ public class StructuresDeviceTypeIT { @Test public void readSearchHistoryCancel() { // purpose - // test read system group in various ways for create, cancel + // test read device type in various ways for create, cancel // search // latest // history @@ -1016,7 +1029,7 @@ public class StructuresDeviceTypeIT { // read (1) length = ITUtilStructureElement.assertRead("/DEVICETYPE", -1, 1); - ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=PENDING", 1, 1); + ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=PENDING", -1, 1); ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=APPROVED", -1, 0); ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=CANCELLED", -1, 0); ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=REJECTED", -1, 0); @@ -1042,7 +1055,7 @@ public class StructuresDeviceTypeIT { // read (2) assertEquals(length, ITUtilStructureElement.assertRead("/DEVICETYPE", -1, 1)); - ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=PENDING", 0, 0); + ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=PENDING", -1, 0); ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=APPROVED", -1, 0); ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=CANCELLED", -1, 1); ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=REJECTED", -1, 0); @@ -1069,7 +1082,7 @@ public class StructuresDeviceTypeIT { @Test public void readSearchHistoryReject() { // purpose - // test read system group in various ways for create, reject + // test read device type in various ways for create, reject // search // latest // history @@ -1122,7 +1135,7 @@ public class StructuresDeviceTypeIT { // read (2) assertEquals(length, ITUtilStructureElement.assertRead("/DEVICETYPE", -1, 1)); - ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=PENDING", 0, 0); + ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=PENDING", -1, 0); ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=APPROVED", -1, 0); ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=CANCELLED", -1, 0); ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=REJECTED", -1, 1); @@ -1146,10 +1159,278 @@ public class StructuresDeviceTypeIT { } } + @Test + public void readSearchHistoryStatusLatest1() { + // purpose + // test read device type in various ways + // status + // latest + // ( deleted ) + // history + // + // what + // entries with different statuses + // + // note + // create (and more) to read (with content) + // 4 different lines of uuid with combinations of status and latest + // 1 entry for each line of uuid + // in particular different statuses for last entry in lines of uuid + // mnemonic - P, C, R, A (pending, cancelled, rejected, approved) + // + // note! + // not only + // exclude APPROVED and not latest + // not only + // exclude earlier than APPROVED and latest (considered history) + // include PENDING and not latest (considered future) + // instead + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + + StructureElement structureElement = null; + StructureElement responseStructureElement = null; + UUID uuid, uuid2, uuid3, uuid4 = null; + + // a number of entries for which the last entry has status PENDING + structureElement = new StructureElement( + Type.DEVICETYPE, null, deviceGroupUuid, + "name", "P1", "Di-P1", 3, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreate(structureElement); + uuid = responseStructureElement.getUuid(); + + // a number of entries for which the last entry has status CANCELLED + structureElement = new StructureElement( + Type.DEVICETYPE, null, deviceGroupUuid, + "name", "C1", "Di-C1", 3, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateCancel(structureElement); + uuid2 = responseStructureElement.getUuid(); + + // a number of entries for which the last entry has status REJECTED + structureElement = new StructureElement( + Type.DEVICETYPE, null, deviceGroupUuid, + "name", "R1", "Di-R1", 3, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateReject(structureElement); + uuid3 = responseStructureElement.getUuid(); + + // a number of entries for which the last entry has status APPROVED + structureElement = new StructureElement( + Type.DEVICETYPE, null, deviceGroupUuid, + "name", "A1", "Di-A1", 3, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid4 = responseStructureElement.getUuid(); + + try { + // from first structure element + assertNotNull(uuid); + + // note + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + + ITUtilStructureElement.assertRead("/DEVICETYPE?queryFields=UUID&queryValues=" + uuid.toString(), 1, 1); + ITUtilStructureElement.assertRead("/DEVICETYPE?queryFields=UUID&queryValues=" + uuid2.toString(), 1, 1); + ITUtilStructureElement.assertRead("/DEVICETYPE?queryFields=UUID&queryValues=" + uuid3.toString(), 1, 1); + ITUtilStructureElement.assertRead("/DEVICETYPE?queryFields=UUID&queryValues=" + uuid4.toString(), 1, 1); + + ITUtilStructureElement.assertRead("/mnemonic/P1", 0, 0); + ITUtilStructureElement.assertRead("/mnemonic/C1", 0, 0); + ITUtilStructureElement.assertRead("/mnemonic/R1", 0, 0); + ITUtilStructureElement.assertRead("/mnemonic/A1", 1, 1); + + // normally expected number of entries are 1, 2, 2, 2 + // since within 1 second from requested to processed, expected number of entries 1, 1, 1, 1 + ITUtilStructureElement.assertRead("/history/" + uuid.toString(), 1, 1); + ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 1, 1); + ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 1, 1); + ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 1, 1); + } catch (Exception e) { + fail(); + } + } + + @Test + public void readSearchHistoryStatusLatest9() { + // purpose + // test read device type in various ways + // status + // latest + // ( deleted ) + // history + // + // what + // entries with different statuses + // + // note + // create (and more) to read (with content) + // 4 different lines of uuid with combinations of status and latest + // 9 entries for each line of uuid + // in particular different statuses for last entry in lines of uuid + // mnemonic - P, C, R, A (pending, cancelled, rejected, approved) + // + // note! + // not only + // exclude APPROVED and not latest + // not only + // exclude earlier than APPROVED and latest (considered history) + // include PENDING and not latest (considered future) + // instead + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + + StructureElement structureElement = null; + StructureElement responseStructureElement = null; + UUID uuid, uuid2, uuid3, uuid4 = null; + + // a number of entries for which the last entry has status PENDING + structureElement = new StructureElement( + Type.DEVICETYPE, null, deviceGroupUuid, + "name", "P9", "Di-P9", 3, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid = responseStructureElement.getUuid(); + + responseStructureElement.setComment("test comment 2"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 3"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + responseStructureElement.setComment("test comment 4"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 5"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 6"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + responseStructureElement.setComment("test comment 7"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 8"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 9"); + responseStructureElement = ITUtilStructureElement.assertUpdate(responseStructureElement); + + // a number of entries for which the last entry has status CANCELLED + structureElement = new StructureElement( + Type.DEVICETYPE, null, deviceGroupUuid, + "name", "C9", "Di-C9", 3, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid2 = responseStructureElement.getUuid(); + + responseStructureElement.setComment("test comment 2"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 3"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + responseStructureElement.setComment("test comment 4"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 5"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 6"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + responseStructureElement.setComment("test comment 7"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 8"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 9"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + + // a number of entries for which the last entry has status REJECTED + structureElement = new StructureElement( + Type.DEVICETYPE, null, deviceGroupUuid, + "name", "R9", "Di-R9", 3, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid3 = responseStructureElement.getUuid(); + + responseStructureElement.setComment("test comment 2"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 3"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + responseStructureElement.setComment("test comment 4"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 5"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 6"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + responseStructureElement.setComment("test comment 7"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 8"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 9"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + + // a number of entries for which the last entry has status APPROVED + structureElement = new StructureElement( + Type.DEVICETYPE, null, deviceGroupUuid, + "name", "A9", "Di-A9", 3, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid4 = responseStructureElement.getUuid(); + + responseStructureElement.setComment("test comment 2"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 3"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + responseStructureElement.setComment("test comment 4"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 5"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 6"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + responseStructureElement.setComment("test comment 7"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 8"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 9"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + + try { + // from first structure element + assertNotNull(uuid); + + // note + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + + ITUtilStructureElement.assertRead("/DEVICETYPE?queryFields=UUID&queryValues=" + uuid.toString(), 2, 2); + ITUtilStructureElement.assertRead("/DEVICETYPE?queryFields=UUID&queryValues=" + uuid2.toString(), 2, 2); + ITUtilStructureElement.assertRead("/DEVICETYPE?queryFields=UUID&queryValues=" + uuid3.toString(), 2, 2); + ITUtilStructureElement.assertRead("/DEVICETYPE?queryFields=UUID&queryValues=" + uuid4.toString(), 1, 1); + + ITUtilStructureElement.assertRead("/mnemonic/P9", 1, 1); + ITUtilStructureElement.assertRead("/mnemonic/C9", 1, 1); + ITUtilStructureElement.assertRead("/mnemonic/R9", 1, 1); + ITUtilStructureElement.assertRead("/mnemonic/A9", 1, 1); + + // normally expected number of entries are 17, 18, 18, 18 + // since within 1 second from requested to processed, expected number of entries 9, 9, 9, 9 + ITUtilStructureElement.assertRead("/history/" + uuid.toString(), 9, 9); + ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 9, 9); + ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 9, 9); + ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 9, 9); + } catch (Exception e) { + fail(); + } + } + @Test public void readSearchStatusDeletedChildren() { // purpose - // test read system group in various ways + // test read device type in various ways // status // ( latest ) // deleted @@ -1508,27 +1789,26 @@ public class StructuresDeviceTypeIT { // from first structure element assertNotNull(uuid); - ITUtilStructureElement.assertRead("/DEVICETYPE?queryFields=MNEMONIC&queryValues=A__", 45, 45); - - ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 10, 10); - ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 20, 20); - ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 10, 10); - ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=PENDING&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 30, 30); - - ITUtilStructureElement.assertRead("/DEVICETYPE?deleted=false&queryFields=MNEMONIC&queryValues=A__", 30, 30); - ITUtilStructureElement.assertRead("/DEVICETYPE?deleted=false&statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/DEVICETYPE?deleted=false&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 15, 15); - ITUtilStructureElement.assertRead("/DEVICETYPE?deleted=false&statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/DEVICETYPE?deleted=false&statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/DEVICETYPE?queryFields=MNEMONIC&queryValues=A__", 45, 45); + ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 10, 10); + ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 20, 20); + ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 10, 10); + ITUtilStructureElement.assertRead("/DEVICETYPE?statuses=PENDING&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 30, 30); + + ITUtilStructureElement.assertRead("/DEVICETYPE?deleted=false&queryFields=MNEMONIC&queryValues=A__", 30, 30); + ITUtilStructureElement.assertRead("/DEVICETYPE?deleted=false&statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/DEVICETYPE?deleted=false&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 15, 15); + ITUtilStructureElement.assertRead("/DEVICETYPE?deleted=false&statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/DEVICETYPE?deleted=false&statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 5, 5); ITUtilStructureElement.assertRead("/DEVICETYPE?deleted=false&statuses=PENDING&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 20, 20); - ITUtilStructureElement.assertRead("/DEVICETYPE?deleted=true&queryFields=MNEMONIC&queryValues=A__", 15, 15); - ITUtilStructureElement.assertRead("/DEVICETYPE?deleted=true&statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/DEVICETYPE?deleted=true&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/DEVICETYPE?deleted=true&statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 0, 0); - ITUtilStructureElement.assertRead("/DEVICETYPE?deleted=true&statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/DEVICETYPE?deleted=true&statuses=PENDING&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 10, 10); + ITUtilStructureElement.assertRead("/DEVICETYPE?deleted=true&queryFields=MNEMONIC&queryValues=A__", 15, 15); + ITUtilStructureElement.assertRead("/DEVICETYPE?deleted=true&statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/DEVICETYPE?deleted=true&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/DEVICETYPE?deleted=true&statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 0, 0); + ITUtilStructureElement.assertRead("/DEVICETYPE?deleted=true&statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/DEVICETYPE?deleted=true&statuses=PENDING&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 10, 10); ITUtilStructureElement.assertRead("/children/DEVICETYPE/" + uuid.toString(), 0, 0); ITUtilStructureElement.assertRead("/children/DEVICEGROUP/" + deviceGroupUuid.toString(), -1, 1); @@ -1538,15 +1818,4 @@ public class StructuresDeviceTypeIT { } } - @Test - public void equivalenceMnemonic() { - // purpose - // test mnemonic equivalence - // - // what - // read equivalence mnemonic - - ITUtilStructureElement.assertEquivalence("Dt", "DT"); - } - } diff --git a/src/test/java/org/openepics/names/docker/StructuresDisciplineIT.java b/src/test/java/org/openepics/names/docker/StructuresDisciplineIT.java index 5ad6aed10ec9beecf8974536ab8adbe9d1dca3b2..3f8bf24b12a3352018ee22ba47834b1c3595370e 100644 --- a/src/test/java/org/openepics/names/docker/StructuresDisciplineIT.java +++ b/src/test/java/org/openepics/names/docker/StructuresDisciplineIT.java @@ -65,12 +65,25 @@ public class StructuresDisciplineIT { // client side // type, uuid, parent uuid, name, mnemonic, description, comment // may be set client side for test purposes + // order of methods in test not known + // therefore mnemonic values chosen to not interfere with mnemonic values in other methods @Container public static final DockerComposeContainer<?> ENVIRONMENT = new DockerComposeContainer<>(new File("docker-compose-it-db-schema-migration.yml")) .waitingFor(ITUtil.NAMING, Wait.forLogMessage(".*Started NamingApplication.*", 1)); + @Test + public void equivalenceMnemonic() { + // purpose + // test mnemonic equivalence + // + // what + // read equivalence mnemonic + + ITUtilStructureElement.assertEquivalence("Di", "D1"); + } + @Test public void checkCreate() { // purpose @@ -1074,10 +1087,278 @@ public class StructuresDisciplineIT { } } + @Test + public void readSearchHistoryStatusLatest1() { + // purpose + // test read discipline in various ways + // status + // latest + // ( deleted ) + // history + // + // what + // entries with different statuses + // + // note + // create (and more) to read (with content) + // 4 different lines of uuid with combinations of status and latest + // 1 entry for each line of uuid + // in particular different statuses for last entry in lines of uuid + // mnemonic - P, C, R, A (pending, cancelled, rejected, approved) + // + // note! + // not only + // exclude APPROVED and not latest + // not only + // exclude earlier than APPROVED and latest (considered history) + // include PENDING and not latest (considered future) + // instead + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + + StructureElement structureElement = null; + StructureElement responseStructureElement = null; + UUID uuid, uuid2, uuid3, uuid4 = null; + + // a number of entries for which the last entry has status PENDING + structureElement = new StructureElement( + Type.DISCIPLINE, null, null, + "name", "P1", "P1", 1, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreate(structureElement); + uuid = responseStructureElement.getUuid(); + + // a number of entries for which the last entry has status CANCELLED + structureElement = new StructureElement( + Type.DISCIPLINE, null, null, + "name", "C1", "C1", 1, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateCancel(structureElement); + uuid2 = responseStructureElement.getUuid(); + + // a number of entries for which the last entry has status REJECTED + structureElement = new StructureElement( + Type.DISCIPLINE, null, null, + "name", "R1", "R1", 1, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateReject(structureElement); + uuid3 = responseStructureElement.getUuid(); + + // a number of entries for which the last entry has status APPROVED + structureElement = new StructureElement( + Type.DISCIPLINE, null, null, + "name", "A1", "A1", 1, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid4 = responseStructureElement.getUuid(); + + try { + // from first structure element + assertNotNull(uuid); + + // note + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + + ITUtilStructureElement.assertRead("/DISCIPLINE?queryFields=UUID&queryValues=" + uuid.toString(), 1, 1); + ITUtilStructureElement.assertRead("/DISCIPLINE?queryFields=UUID&queryValues=" + uuid2.toString(), 1, 1); + ITUtilStructureElement.assertRead("/DISCIPLINE?queryFields=UUID&queryValues=" + uuid3.toString(), 1, 1); + ITUtilStructureElement.assertRead("/DISCIPLINE?queryFields=UUID&queryValues=" + uuid4.toString(), 1, 1); + + ITUtilStructureElement.assertRead("/mnemonic/P1", 0, 0); + ITUtilStructureElement.assertRead("/mnemonic/C1", 0, 0); + ITUtilStructureElement.assertRead("/mnemonic/R1", 0, 0); + ITUtilStructureElement.assertRead("/mnemonic/A1", 1, 1); + + // normally expected number of entries are 1, 2, 2, 2 + // since within 1 second from requested to processed, expected number of entries 1, 1, 1, 1 + ITUtilStructureElement.assertRead("/history/" + uuid.toString(), 1, 1); + ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 1, 1); + ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 1, 1); + ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 1, 1); + } catch (Exception e) { + fail(); + } + } + + @Test + public void readSearchHistoryStatusLatest9() { + // purpose + // test read discipline in various ways + // status + // latest + // ( deleted ) + // history + // + // what + // entries with different statuses + // + // note + // create (and more) to read (with content) + // 4 different lines of uuid with combinations of status and latest + // 9 entries for each line of uuid + // in particular different statuses for last entry in lines of uuid + // mnemonic - P, C, R, A (pending, cancelled, rejected, approved) + // + // note! + // not only + // exclude APPROVED and not latest + // not only + // exclude earlier than APPROVED and latest (considered history) + // include PENDING and not latest (considered future) + // instead + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + + StructureElement structureElement = null; + StructureElement responseStructureElement = null; + UUID uuid, uuid2, uuid3, uuid4 = null; + + // a number of entries for which the last entry has status PENDING + structureElement = new StructureElement( + Type.DISCIPLINE, null, null, + "name", "P9", "P9", 1, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid = responseStructureElement.getUuid(); + + responseStructureElement.setComment("test comment 2"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 3"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + responseStructureElement.setComment("test comment 4"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 5"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 6"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + responseStructureElement.setComment("test comment 7"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 8"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 9"); + responseStructureElement = ITUtilStructureElement.assertUpdate(responseStructureElement); + + // a number of entries for which the last entry has status CANCELLED + structureElement = new StructureElement( + Type.DISCIPLINE, null, null, + "name", "C9", "C9", 1, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid2 = responseStructureElement.getUuid(); + + responseStructureElement.setComment("test comment 2"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 3"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + responseStructureElement.setComment("test comment 4"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 5"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 6"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + responseStructureElement.setComment("test comment 7"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 8"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 9"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + + // a number of entries for which the last entry has status REJECTED + structureElement = new StructureElement( + Type.DISCIPLINE, null, null, + "name", "R9", "R9", 1, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid3 = responseStructureElement.getUuid(); + + responseStructureElement.setComment("test comment 2"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 3"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + responseStructureElement.setComment("test comment 4"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 5"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 6"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + responseStructureElement.setComment("test comment 7"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 8"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 9"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + + // a number of entries for which the last entry has status APPROVED + structureElement = new StructureElement( + Type.DISCIPLINE, null, null, + "name", "A9", "A9", 1, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid4 = responseStructureElement.getUuid(); + + responseStructureElement.setComment("test comment 2"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 3"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + responseStructureElement.setComment("test comment 4"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 5"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 6"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + responseStructureElement.setComment("test comment 7"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 8"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 9"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + + try { + // from first structure element + assertNotNull(uuid); + + // note + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + + ITUtilStructureElement.assertRead("/DISCIPLINE?queryFields=UUID&queryValues=" + uuid.toString(), 2, 2); + ITUtilStructureElement.assertRead("/DISCIPLINE?queryFields=UUID&queryValues=" + uuid2.toString(), 2, 2); + ITUtilStructureElement.assertRead("/DISCIPLINE?queryFields=UUID&queryValues=" + uuid3.toString(), 2, 2); + ITUtilStructureElement.assertRead("/DISCIPLINE?queryFields=UUID&queryValues=" + uuid4.toString(), 1, 1); + + ITUtilStructureElement.assertRead("/mnemonic/P9", 1, 1); + ITUtilStructureElement.assertRead("/mnemonic/C9", 1, 1); + ITUtilStructureElement.assertRead("/mnemonic/R9", 1, 1); + ITUtilStructureElement.assertRead("/mnemonic/A9", 1, 1); + + // normally expected number of entries are 17, 18, 18, 18 + // since within 1 second from requested to processed, expected number of entries 9, 9, 9, 9 + ITUtilStructureElement.assertRead("/history/" + uuid.toString(), 9, 9); + ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 9, 9); + ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 9, 9); + ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 9, 9); + } catch (Exception e) { + fail(); + } + } + @Test public void readSearchStatusDeletedChildren() { // purpose - // test read system group in various ways + // test read discipline in various ways // status // ( latest ) // deleted @@ -1436,27 +1717,26 @@ public class StructuresDisciplineIT { // from first structure element assertNotNull(uuid); - ITUtilStructureElement.assertRead("/DISCIPLINE?queryFields=MNEMONIC&queryValues=A__", 45, 45); - - ITUtilStructureElement.assertRead("/DISCIPLINE?statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 10, 10); - ITUtilStructureElement.assertRead("/DISCIPLINE?statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 20, 20); - ITUtilStructureElement.assertRead("/DISCIPLINE?statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/DISCIPLINE?statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 10, 10); - ITUtilStructureElement.assertRead("/DISCIPLINE?statuses=PENDING&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 30, 30); - - ITUtilStructureElement.assertRead("/DISCIPLINE?deleted=false&queryFields=MNEMONIC&queryValues=A__", 30, 30); - ITUtilStructureElement.assertRead("/DISCIPLINE?deleted=false&statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/DISCIPLINE?deleted=false&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 15, 15); - ITUtilStructureElement.assertRead("/DISCIPLINE?deleted=false&statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/DISCIPLINE?deleted=false&statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/DISCIPLINE?queryFields=MNEMONIC&queryValues=A__", 45, 45); + ITUtilStructureElement.assertRead("/DISCIPLINE?statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 10, 10); + ITUtilStructureElement.assertRead("/DISCIPLINE?statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 20, 20); + ITUtilStructureElement.assertRead("/DISCIPLINE?statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/DISCIPLINE?statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 10, 10); + ITUtilStructureElement.assertRead("/DISCIPLINE?statuses=PENDING&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 30, 30); + + ITUtilStructureElement.assertRead("/DISCIPLINE?deleted=false&queryFields=MNEMONIC&queryValues=A__", 30, 30); + ITUtilStructureElement.assertRead("/DISCIPLINE?deleted=false&statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/DISCIPLINE?deleted=false&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 15, 15); + ITUtilStructureElement.assertRead("/DISCIPLINE?deleted=false&statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/DISCIPLINE?deleted=false&statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 5, 5); ITUtilStructureElement.assertRead("/DISCIPLINE?deleted=false&statuses=PENDING&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 20, 20); - ITUtilStructureElement.assertRead("/DISCIPLINE?deleted=true&queryFields=MNEMONIC&queryValues=A__", 15, 15); - ITUtilStructureElement.assertRead("/DISCIPLINE?deleted=true&statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/DISCIPLINE?deleted=true&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/DISCIPLINE?deleted=true&statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 0, 0); - ITUtilStructureElement.assertRead("/DISCIPLINE?deleted=true&statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/DISCIPLINE?deleted=true&statuses=PENDING&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 10, 10); + ITUtilStructureElement.assertRead("/DISCIPLINE?deleted=true&queryFields=MNEMONIC&queryValues=A__", 15, 15); + ITUtilStructureElement.assertRead("/DISCIPLINE?deleted=true&statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/DISCIPLINE?deleted=true&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/DISCIPLINE?deleted=true&statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 0, 0); + ITUtilStructureElement.assertRead("/DISCIPLINE?deleted=true&statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/DISCIPLINE?deleted=true&statuses=PENDING&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 10, 10); ITUtilStructureElement.assertRead("/children/DISCIPLINE/" + uuid.toString(), 0, 0); } catch (Exception e) { @@ -1464,15 +1744,4 @@ public class StructuresDisciplineIT { } } - @Test - public void equivalenceMnemonic() { - // purpose - // test mnemonic equivalence - // - // what - // read equivalence mnemonic - - ITUtilStructureElement.assertEquivalence("Di", "D1"); - } - } diff --git a/src/test/java/org/openepics/names/docker/StructuresSubsystemIT.java b/src/test/java/org/openepics/names/docker/StructuresSubsystemIT.java index 76de6b5a72cfc45e18f02d6cf8dc8ba891a449d0..e42cb7dc442cc57d7d77530cc8508603c87bcfb9 100644 --- a/src/test/java/org/openepics/names/docker/StructuresSubsystemIT.java +++ b/src/test/java/org/openepics/names/docker/StructuresSubsystemIT.java @@ -66,6 +66,8 @@ public class StructuresSubsystemIT { // client side // type, uuid, parent uuid, name, mnemonic, description, comment // may be set client side for test purposes + // order of methods in test not known + // therefore mnemonic values chosen to not interfere with mnemonic values in other methods @Container public static final DockerComposeContainer<?> ENVIRONMENT = @@ -99,6 +101,17 @@ public class StructuresSubsystemIT { systemUuid = approvedStructureElement.getUuid(); } + @Test + public void equivalenceMnemonic() { + // purpose + // test mnemonic equivalence + // + // what + // read equivalence mnemonic + + ITUtilStructureElement.assertEquivalence("Sub", "SUB"); + } + @Test public void checkCreate() { // purpose @@ -915,7 +928,7 @@ public class StructuresSubsystemIT { @Test public void readSearchHistoryApprove() { // purpose - // test read system group in various ways for create, approve + // test read subsystem in various ways for create, approve // search // latest // history @@ -1007,7 +1020,7 @@ public class StructuresSubsystemIT { @Test public void readSearchHistoryCancel() { // purpose - // test read system group in various ways for create, cancel + // test read subsystem in various ways for create, cancel // search // latest // history @@ -1099,7 +1112,7 @@ public class StructuresSubsystemIT { @Test public void readSearchHistoryReject() { // purpose - // test read system group in various ways for create, reject + // test read subsystem in various ways for create, reject // search // latest // history @@ -1188,10 +1201,278 @@ public class StructuresSubsystemIT { } } + @Test + public void readSearchHistoryStatusLatest1() { + // purpose + // test read subsystem in various ways + // status + // latest + // ( deleted ) + // history + // + // what + // entries with different statuses + // + // note + // create (and more) to read (with content) + // 4 different lines of uuid with combinations of status and latest + // 1 entry for each line of uuid + // in particular different statuses for last entry in lines of uuid + // mnemonic - P, C, R, A (pending, cancelled, rejected, approved) + // + // note! + // not only + // exclude APPROVED and not latest + // not only + // exclude earlier than APPROVED and latest (considered history) + // include PENDING and not latest (considered future) + // instead + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + + StructureElement structureElement = null; + StructureElement responseStructureElement = null; + UUID uuid, uuid2, uuid3, uuid4 = null; + + // a number of entries for which the last entry has status PENDING + structureElement = new StructureElement( + Type.SUBSYSTEM, null, systemUuid, + "name", "P1", "Sys-P1", 3, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreate(structureElement); + uuid = responseStructureElement.getUuid(); + + // a number of entries for which the last entry has status CANCELLED + structureElement = new StructureElement( + Type.SUBSYSTEM, null, systemUuid, + "name", "C1", "Sys-C1", 3, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateCancel(structureElement); + uuid2 = responseStructureElement.getUuid(); + + // a number of entries for which the last entry has status REJECTED + structureElement = new StructureElement( + Type.SUBSYSTEM, null, systemUuid, + "name", "R1", "Sys-R1", 3, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateReject(structureElement); + uuid3 = responseStructureElement.getUuid(); + + // a number of entries for which the last entry has status APPROVED + structureElement = new StructureElement( + Type.SUBSYSTEM, null, systemUuid, + "name", "A1", "Sys-A1", 3, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid4 = responseStructureElement.getUuid(); + + try { + // from first structure element + assertNotNull(uuid); + + // note + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + + ITUtilStructureElement.assertRead("/SUBSYSTEM?queryFields=UUID&queryValues=" + uuid.toString(), 1, 1); + ITUtilStructureElement.assertRead("/SUBSYSTEM?queryFields=UUID&queryValues=" + uuid2.toString(), 1, 1); + ITUtilStructureElement.assertRead("/SUBSYSTEM?queryFields=UUID&queryValues=" + uuid3.toString(), 1, 1); + ITUtilStructureElement.assertRead("/SUBSYSTEM?queryFields=UUID&queryValues=" + uuid4.toString(), 1, 1); + + ITUtilStructureElement.assertRead("/mnemonic/P1", 0, 0); + ITUtilStructureElement.assertRead("/mnemonic/C1", 0, 0); + ITUtilStructureElement.assertRead("/mnemonic/R1", 0, 0); + ITUtilStructureElement.assertRead("/mnemonic/A1", 1, 1); + + // normally expected number of entries are 1, 2, 2, 2 + // since within 1 second from requested to processed, expected number of entries 1, 1, 1, 1 + ITUtilStructureElement.assertRead("/history/" + uuid.toString(), 1, 1); + ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 1, 1); + ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 1, 1); + ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 1, 1); + } catch (Exception e) { + fail(); + } + } + + @Test + public void readSearchHistoryStatusLatest9() { + // purpose + // test read subsystem in various ways + // status + // latest + // ( deleted ) + // history + // + // what + // entries with different statuses + // + // note + // create (and more) to read (with content) + // 4 different lines of uuid with combinations of status and latest + // 9 entries for each line of uuid + // in particular different statuses for last entry in lines of uuid + // mnemonic - P, C, R, A (pending, cancelled, rejected, approved) + // + // note! + // not only + // exclude APPROVED and not latest + // not only + // exclude earlier than APPROVED and latest (considered history) + // include PENDING and not latest (considered future) + // instead + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + + StructureElement structureElement = null; + StructureElement responseStructureElement = null; + UUID uuid, uuid2, uuid3, uuid4 = null; + + // a number of entries for which the last entry has status PENDING + structureElement = new StructureElement( + Type.SUBSYSTEM, null, systemUuid, + "name", "P9", "Sys-P9", 3, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid = responseStructureElement.getUuid(); + + responseStructureElement.setComment("test comment 2"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 3"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + responseStructureElement.setComment("test comment 4"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 5"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 6"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + responseStructureElement.setComment("test comment 7"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 8"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 9"); + responseStructureElement = ITUtilStructureElement.assertUpdate(responseStructureElement); + + // a number of entries for which the last entry has status CANCELLED + structureElement = new StructureElement( + Type.SUBSYSTEM, null, systemUuid, + "name", "C9", "Sys-C9", 3, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid2 = responseStructureElement.getUuid(); + + responseStructureElement.setComment("test comment 2"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 3"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + responseStructureElement.setComment("test comment 4"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 5"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 6"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + responseStructureElement.setComment("test comment 7"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 8"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 9"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + + // a number of entries for which the last entry has status REJECTED + structureElement = new StructureElement( + Type.SUBSYSTEM, null, systemUuid, + "name", "R9", "Sys-R9", 3, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid3 = responseStructureElement.getUuid(); + + responseStructureElement.setComment("test comment 2"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 3"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + responseStructureElement.setComment("test comment 4"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 5"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 6"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + responseStructureElement.setComment("test comment 7"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 8"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 9"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + + // a number of entries for which the last entry has status APPROVED + structureElement = new StructureElement( + Type.SUBSYSTEM, null, systemUuid, + "name", "A9", "Sys-A9", 3, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid4 = responseStructureElement.getUuid(); + + responseStructureElement.setComment("test comment 2"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 3"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + responseStructureElement.setComment("test comment 4"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 5"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 6"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + responseStructureElement.setComment("test comment 7"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 8"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 9"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + + try { + // from first structure element + assertNotNull(uuid); + + // note + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + + ITUtilStructureElement.assertRead("/SUBSYSTEM?queryFields=UUID&queryValues=" + uuid.toString(), 2, 2); + ITUtilStructureElement.assertRead("/SUBSYSTEM?queryFields=UUID&queryValues=" + uuid2.toString(), 2, 2); + ITUtilStructureElement.assertRead("/SUBSYSTEM?queryFields=UUID&queryValues=" + uuid3.toString(), 2, 2); + ITUtilStructureElement.assertRead("/SUBSYSTEM?queryFields=UUID&queryValues=" + uuid4.toString(), 1, 1); + + ITUtilStructureElement.assertRead("/mnemonic/P9", 1, 1); + ITUtilStructureElement.assertRead("/mnemonic/C9", 1, 1); + ITUtilStructureElement.assertRead("/mnemonic/R9", 1, 1); + ITUtilStructureElement.assertRead("/mnemonic/A9", 1, 1); + + // normally expected number of entries are 17, 18, 18, 18 + // since within 1 second from requested to processed, expected number of entries 9, 9, 9, 9 + ITUtilStructureElement.assertRead("/history/" + uuid.toString(), 9, 9); + ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 9, 9); + ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 9, 9); + ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 9, 9); + } catch (Exception e) { + fail(); + } + } + @Test public void readSearchStatusDeletedChildren() { // purpose - // test read system group in various ways + // test read subsystem in various ways // status // ( latest ) // deleted @@ -1550,27 +1831,26 @@ public class StructuresSubsystemIT { // from first structure element assertNotNull(uuid); - ITUtilStructureElement.assertRead("/SUBSYSTEM?queryFields=MNEMONIC&queryValues=A__", 45, 45); - - ITUtilStructureElement.assertRead("/SUBSYSTEM?statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 10, 10); - ITUtilStructureElement.assertRead("/SUBSYSTEM?statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 20, 20); - ITUtilStructureElement.assertRead("/SUBSYSTEM?statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/SUBSYSTEM?statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 10, 10); - ITUtilStructureElement.assertRead("/SUBSYSTEM?statuses=PENDING&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 30, 30); - - ITUtilStructureElement.assertRead("/SUBSYSTEM?deleted=false&queryFields=MNEMONIC&queryValues=A__", 30, 30); - ITUtilStructureElement.assertRead("/SUBSYSTEM?deleted=false&statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/SUBSYSTEM?deleted=false&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 15, 15); - ITUtilStructureElement.assertRead("/SUBSYSTEM?deleted=false&statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/SUBSYSTEM?deleted=false&statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/SUBSYSTEM?queryFields=MNEMONIC&queryValues=A__", 45, 45); + ITUtilStructureElement.assertRead("/SUBSYSTEM?statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 10, 10); + ITUtilStructureElement.assertRead("/SUBSYSTEM?statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 20, 20); + ITUtilStructureElement.assertRead("/SUBSYSTEM?statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/SUBSYSTEM?statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 10, 10); + ITUtilStructureElement.assertRead("/SUBSYSTEM?statuses=PENDING&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 30, 30); + + ITUtilStructureElement.assertRead("/SUBSYSTEM?deleted=false&queryFields=MNEMONIC&queryValues=A__", 30, 30); + ITUtilStructureElement.assertRead("/SUBSYSTEM?deleted=false&statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/SUBSYSTEM?deleted=false&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 15, 15); + ITUtilStructureElement.assertRead("/SUBSYSTEM?deleted=false&statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/SUBSYSTEM?deleted=false&statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 5, 5); ITUtilStructureElement.assertRead("/SUBSYSTEM?deleted=false&statuses=PENDING&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 20, 20); - ITUtilStructureElement.assertRead("/SUBSYSTEM?deleted=true&queryFields=MNEMONIC&queryValues=A__", 15, 15); - ITUtilStructureElement.assertRead("/SUBSYSTEM?deleted=true&statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/SUBSYSTEM?deleted=true&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/SUBSYSTEM?deleted=true&statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 0, 0); - ITUtilStructureElement.assertRead("/SUBSYSTEM?deleted=true&statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/SUBSYSTEM?deleted=true&statuses=PENDING&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 10, 10); + ITUtilStructureElement.assertRead("/SUBSYSTEM?deleted=true&queryFields=MNEMONIC&queryValues=A__", 15, 15); + ITUtilStructureElement.assertRead("/SUBSYSTEM?deleted=true&statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/SUBSYSTEM?deleted=true&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/SUBSYSTEM?deleted=true&statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 0, 0); + ITUtilStructureElement.assertRead("/SUBSYSTEM?deleted=true&statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/SUBSYSTEM?deleted=true&statuses=PENDING&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 10, 10); ITUtilStructureElement.assertRead("/children/SUBSYSTEM/" + uuid.toString(), 0, 0); ITUtilStructureElement.assertRead("/children/SYSTEM/" + systemUuid.toString(), -1, 1); @@ -1580,15 +1860,4 @@ public class StructuresSubsystemIT { } } - @Test - public void equivalenceMnemonic() { - // purpose - // test mnemonic equivalence - // - // what - // read equivalence mnemonic - - ITUtilStructureElement.assertEquivalence("Sub", "SUB"); - } - } diff --git a/src/test/java/org/openepics/names/docker/StructuresSystemGroupIT.java b/src/test/java/org/openepics/names/docker/StructuresSystemGroupIT.java index 2493245c1de40717135b30bf5fd28919d1124801..60738c8c596810cc915723eb2cdf6efb5502fc7f 100644 --- a/src/test/java/org/openepics/names/docker/StructuresSystemGroupIT.java +++ b/src/test/java/org/openepics/names/docker/StructuresSystemGroupIT.java @@ -66,12 +66,25 @@ public class StructuresSystemGroupIT { // client side // type, uuid, parent uuid, name, mnemonic, description, comment // may be set client side for test purposes + // order of methods in test not known + // therefore mnemonic values chosen to not interfere with mnemonic values in other methods @Container public static final DockerComposeContainer<?> ENVIRONMENT = new DockerComposeContainer<>(new File("docker-compose-it-db-schema-migration.yml")) .waitingFor(ITUtil.NAMING, Wait.forLogMessage(".*Started NamingApplication.*", 1)); + @Test + public void equivalenceMnemonic() { + // purpose + // test mnemonic equivalence + // + // what + // read equivalence mnemonic + + ITUtilStructureElement.assertEquivalence("Sg", "SG"); + } + @Test public void checkCreate() { // purpose @@ -1120,6 +1133,274 @@ public class StructuresSystemGroupIT { } } + @Test + public void readSearchHistoryStatusLatest1() { + // purpose + // test read system group in various ways + // status + // latest + // ( deleted ) + // history + // + // what + // entries with different statuses + // + // note + // create (and more) to read (with content) + // 4 different lines of uuid with combinations of status and latest + // 1 entry for each line of uuid + // in particular different statuses for last entry in lines of uuid + // mnemonic - P, C, R, A (pending, cancelled, rejected, approved) + // + // note! + // not only + // exclude APPROVED and not latest + // not only + // exclude earlier than APPROVED and latest (considered history) + // include PENDING and not latest (considered future) + // instead + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + + StructureElement structureElement = null; + StructureElement responseStructureElement = null; + UUID uuid, uuid2, uuid3, uuid4 = null; + + // a number of entries for which the last entry has status PENDING + structureElement = new StructureElement( + Type.SYSTEMGROUP, null, null, + "name", "P1", "P1", 1, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreate(structureElement); + uuid = responseStructureElement.getUuid(); + + // a number of entries for which the last entry has status CANCELLED + structureElement = new StructureElement( + Type.SYSTEMGROUP, null, null, + "name", "C1", "C1", 1, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateCancel(structureElement); + uuid2 = responseStructureElement.getUuid(); + + // a number of entries for which the last entry has status REJECTED + structureElement = new StructureElement( + Type.SYSTEMGROUP, null, null, + "name", "R1", "R1", 1, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateReject(structureElement); + uuid3 = responseStructureElement.getUuid(); + + // a number of entries for which the last entry has status APPROVED + structureElement = new StructureElement( + Type.SYSTEMGROUP, null, null, + "name", "A1", "A1", 1, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid4 = responseStructureElement.getUuid(); + + try { + // from first structure element + assertNotNull(uuid); + + // note + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + + ITUtilStructureElement.assertRead("/SYSTEMGROUP?queryFields=UUID&queryValues=" + uuid.toString(), 1, 1); + ITUtilStructureElement.assertRead("/SYSTEMGROUP?queryFields=UUID&queryValues=" + uuid2.toString(), 1, 1); + ITUtilStructureElement.assertRead("/SYSTEMGROUP?queryFields=UUID&queryValues=" + uuid3.toString(), 1, 1); + ITUtilStructureElement.assertRead("/SYSTEMGROUP?queryFields=UUID&queryValues=" + uuid4.toString(), 1, 1); + + ITUtilStructureElement.assertRead("/mnemonic/P1", 0, 0); + ITUtilStructureElement.assertRead("/mnemonic/C1", 0, 0); + ITUtilStructureElement.assertRead("/mnemonic/R1", 0, 0); + ITUtilStructureElement.assertRead("/mnemonic/A1", 1, 1); + + // normally expected number of entries are 1, 2, 2, 2 + // since within 1 second from requested to processed, expected number of entries 1, 1, 1, 1 + ITUtilStructureElement.assertRead("/history/" + uuid.toString(), 1, 1); + ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 1, 1); + ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 1, 1); + ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 1, 1); + } catch (Exception e) { + fail(); + } + } + + @Test + public void readSearchHistoryStatusLatest9() { + // purpose + // test read system group in various ways + // status + // latest + // ( deleted ) + // history + // + // what + // entries with different statuses + // + // note + // create (and more) to read (with content) + // 4 different lines of uuid with combinations of status and latest + // 9 entries for each line of uuid + // in particular different statuses for last entry in lines of uuid + // mnemonic - P, C, R, A (pending, cancelled, rejected, approved) + // + // note! + // not only + // exclude APPROVED and not latest + // not only + // exclude earlier than APPROVED and latest (considered history) + // include PENDING and not latest (considered future) + // instead + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + + StructureElement structureElement = null; + StructureElement responseStructureElement = null; + UUID uuid, uuid2, uuid3, uuid4 = null; + + // a number of entries for which the last entry has status PENDING + structureElement = new StructureElement( + Type.SYSTEMGROUP, null, null, + "name", "P9", "P9", 1, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid = responseStructureElement.getUuid(); + + responseStructureElement.setComment("test comment 2"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 3"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + responseStructureElement.setComment("test comment 4"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 5"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 6"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + responseStructureElement.setComment("test comment 7"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 8"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 9"); + responseStructureElement = ITUtilStructureElement.assertUpdate(responseStructureElement); + + // a number of entries for which the last entry has status CANCELLED + structureElement = new StructureElement( + Type.SYSTEMGROUP, null, null, + "name", "C9", "C9", 1, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid2 = responseStructureElement.getUuid(); + + responseStructureElement.setComment("test comment 2"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 3"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + responseStructureElement.setComment("test comment 4"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 5"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 6"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + responseStructureElement.setComment("test comment 7"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 8"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 9"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + + // a number of entries for which the last entry has status REJECTED + structureElement = new StructureElement( + Type.SYSTEMGROUP, null, null, + "name", "R9", "R9", 1, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid3 = responseStructureElement.getUuid(); + + responseStructureElement.setComment("test comment 2"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 3"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + responseStructureElement.setComment("test comment 4"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 5"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 6"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + responseStructureElement.setComment("test comment 7"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 8"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 9"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + + // a number of entries for which the last entry has status APPROVED + structureElement = new StructureElement( + Type.SYSTEMGROUP, null, null, + "name", "A9", "A9", 1, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid4 = responseStructureElement.getUuid(); + + responseStructureElement.setComment("test comment 2"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 3"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + responseStructureElement.setComment("test comment 4"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 5"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 6"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + responseStructureElement.setComment("test comment 7"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 8"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 9"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + + try { + // from first structure element + assertNotNull(uuid); + + // note + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + + ITUtilStructureElement.assertRead("/SYSTEMGROUP?queryFields=UUID&queryValues=" + uuid.toString(), 2, 2); + ITUtilStructureElement.assertRead("/SYSTEMGROUP?queryFields=UUID&queryValues=" + uuid2.toString(), 2, 2); + ITUtilStructureElement.assertRead("/SYSTEMGROUP?queryFields=UUID&queryValues=" + uuid3.toString(), 2, 2); + ITUtilStructureElement.assertRead("/SYSTEMGROUP?queryFields=UUID&queryValues=" + uuid4.toString(), 1, 1); + + ITUtilStructureElement.assertRead("/mnemonic/P9", 1, 1); + ITUtilStructureElement.assertRead("/mnemonic/C9", 1, 1); + ITUtilStructureElement.assertRead("/mnemonic/R9", 1, 1); + ITUtilStructureElement.assertRead("/mnemonic/A9", 1, 1); + + // normally expected number of entries are 17, 18, 18, 18 + // since within 1 second from requested to processed, expected number of entries 9, 9, 9, 9 + ITUtilStructureElement.assertRead("/history/" + uuid.toString(), 9, 9); + ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 9, 9); + ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 9, 9); + ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 9, 9); + } catch (Exception e) { + fail(); + } + } + @Test public void readSearchStatusDeletedChildren() { // purpose @@ -1482,27 +1763,26 @@ public class StructuresSystemGroupIT { // from first structure element assertNotNull(uuid); - ITUtilStructureElement.assertRead("/SYSTEMGROUP?queryFields=MNEMONIC&queryValues=A__", 45, 45); - - ITUtilStructureElement.assertRead("/SYSTEMGROUP?statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 10, 10); - ITUtilStructureElement.assertRead("/SYSTEMGROUP?statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 20, 20); - ITUtilStructureElement.assertRead("/SYSTEMGROUP?statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/SYSTEMGROUP?statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 10, 10); - ITUtilStructureElement.assertRead("/SYSTEMGROUP?statuses=PENDING&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 30, 30); - - ITUtilStructureElement.assertRead("/SYSTEMGROUP?deleted=false&queryFields=MNEMONIC&queryValues=A__", 30, 30); - ITUtilStructureElement.assertRead("/SYSTEMGROUP?deleted=false&statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/SYSTEMGROUP?deleted=false&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 15, 15); - ITUtilStructureElement.assertRead("/SYSTEMGROUP?deleted=false&statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/SYSTEMGROUP?deleted=false&statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/SYSTEMGROUP?queryFields=MNEMONIC&queryValues=A__", 45, 45); + ITUtilStructureElement.assertRead("/SYSTEMGROUP?statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 10, 10); + ITUtilStructureElement.assertRead("/SYSTEMGROUP?statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 20, 20); + ITUtilStructureElement.assertRead("/SYSTEMGROUP?statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/SYSTEMGROUP?statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 10, 10); + ITUtilStructureElement.assertRead("/SYSTEMGROUP?statuses=PENDING&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 30, 30); + + ITUtilStructureElement.assertRead("/SYSTEMGROUP?deleted=false&queryFields=MNEMONIC&queryValues=A__", 30, 30); + ITUtilStructureElement.assertRead("/SYSTEMGROUP?deleted=false&statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/SYSTEMGROUP?deleted=false&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 15, 15); + ITUtilStructureElement.assertRead("/SYSTEMGROUP?deleted=false&statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/SYSTEMGROUP?deleted=false&statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 5, 5); ITUtilStructureElement.assertRead("/SYSTEMGROUP?deleted=false&statuses=PENDING&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 20, 20); - ITUtilStructureElement.assertRead("/SYSTEMGROUP?deleted=true&queryFields=MNEMONIC&queryValues=A__", 15, 15); - ITUtilStructureElement.assertRead("/SYSTEMGROUP?deleted=true&statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/SYSTEMGROUP?deleted=true&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/SYSTEMGROUP?deleted=true&statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 0, 0); - ITUtilStructureElement.assertRead("/SYSTEMGROUP?deleted=true&statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/SYSTEMGROUP?deleted=true&statuses=PENDING&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 10, 10); + ITUtilStructureElement.assertRead("/SYSTEMGROUP?deleted=true&queryFields=MNEMONIC&queryValues=A__", 15, 15); + ITUtilStructureElement.assertRead("/SYSTEMGROUP?deleted=true&statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/SYSTEMGROUP?deleted=true&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/SYSTEMGROUP?deleted=true&statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 0, 0); + ITUtilStructureElement.assertRead("/SYSTEMGROUP?deleted=true&statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/SYSTEMGROUP?deleted=true&statuses=PENDING&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 10, 10); ITUtilStructureElement.assertRead("/children/SYSTEMGROUP/" + uuid.toString(), 0, 0); } catch (Exception e) { @@ -1510,15 +1790,4 @@ public class StructuresSystemGroupIT { } } - @Test - public void equivalenceMnemonic() { - // purpose - // test mnemonic equivalence - // - // what - // read equivalence mnemonic - - ITUtilStructureElement.assertEquivalence("Sg", "SG"); - } - } diff --git a/src/test/java/org/openepics/names/docker/StructuresSystemIT.java b/src/test/java/org/openepics/names/docker/StructuresSystemIT.java index dd482fa5108d8bb414b4fcb7309cd9762dfdabd9..b25511a9d146da309d8dc93d9966961253e2c8d3 100644 --- a/src/test/java/org/openepics/names/docker/StructuresSystemIT.java +++ b/src/test/java/org/openepics/names/docker/StructuresSystemIT.java @@ -66,6 +66,8 @@ public class StructuresSystemIT { // client side // type, uuid, parent uuid, name, mnemonic, description, comment // may be set client side for test purposes + // order of methods in test not known + // therefore mnemonic values chosen to not interfere with mnemonic values in other methods @Container public static final DockerComposeContainer<?> ENVIRONMENT = @@ -90,6 +92,17 @@ public class StructuresSystemIT { systemGroupUuid = approvedStructureElement.getUuid(); } + @Test + public void equivalenceMnemonic() { + // purpose + // test mnemonic equivalence + // + // what + // read equivalence mnemonic + + ITUtilStructureElement.assertEquivalence("Sys", "SYS"); + } + @Test public void checkCreate() { // purpose @@ -903,7 +916,7 @@ public class StructuresSystemIT { @Test public void readSearchHistoryApprove() { // purpose - // test read system group in various ways for create, approve + // test read system in various ways for create, approve // search // latest // history @@ -983,7 +996,7 @@ public class StructuresSystemIT { @Test public void readSearchHistoryCancel() { // purpose - // test read system group in various ways for create, cancel + // test read system in various ways for create, cancel // search // latest // history @@ -1063,7 +1076,7 @@ public class StructuresSystemIT { @Test public void readSearchHistoryReject() { // purpose - // test read system group in various ways for create, reject + // test read system in various ways for create, reject // search // latest // history @@ -1140,10 +1153,278 @@ public class StructuresSystemIT { } } + @Test + public void readSearchHistoryStatusLatest1() { + // purpose + // test read system in various ways + // status + // latest + // ( deleted ) + // history + // + // what + // entries with different statuses + // + // note + // create (and more) to read (with content) + // 4 different lines of uuid with combinations of status and latest + // 1 entry for each line of uuid + // in particular different statuses for last entry in lines of uuid + // mnemonic - P, C, R, A (pending, cancelled, rejected, approved) + // + // note! + // not only + // exclude APPROVED and not latest + // not only + // exclude earlier than APPROVED and latest (considered history) + // include PENDING and not latest (considered future) + // instead + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + + StructureElement structureElement = null; + StructureElement responseStructureElement = null; + UUID uuid, uuid2, uuid3, uuid4 = null; + + // a number of entries for which the last entry has status PENDING + structureElement = new StructureElement( + Type.SYSTEM, null, systemGroupUuid, + "name", "P1", "P1", 2, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreate(structureElement); + uuid = responseStructureElement.getUuid(); + + // a number of entries for which the last entry has status CANCELLED + structureElement = new StructureElement( + Type.SYSTEM, null, systemGroupUuid, + "name", "C1", "C1", 2, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateCancel(structureElement); + uuid2 = responseStructureElement.getUuid(); + + // a number of entries for which the last entry has status REJECTED + structureElement = new StructureElement( + Type.SYSTEM, null, systemGroupUuid, + "name", "R1", "R1", 2, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateReject(structureElement); + uuid3 = responseStructureElement.getUuid(); + + // a number of entries for which the last entry has status APPROVED + structureElement = new StructureElement( + Type.SYSTEM, null, systemGroupUuid, + "name", "A1", "A1", 2, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid4 = responseStructureElement.getUuid(); + + try { + // from first structure element + assertNotNull(uuid); + + // note + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + + ITUtilStructureElement.assertRead("/SYSTEM?queryFields=UUID&queryValues=" + uuid.toString(), 1, 1); + ITUtilStructureElement.assertRead("/SYSTEM?queryFields=UUID&queryValues=" + uuid2.toString(), 1, 1); + ITUtilStructureElement.assertRead("/SYSTEM?queryFields=UUID&queryValues=" + uuid3.toString(), 1, 1); + ITUtilStructureElement.assertRead("/SYSTEM?queryFields=UUID&queryValues=" + uuid4.toString(), 1, 1); + + ITUtilStructureElement.assertRead("/mnemonic/P1", 0, 0); + ITUtilStructureElement.assertRead("/mnemonic/C1", 0, 0); + ITUtilStructureElement.assertRead("/mnemonic/R1", 0, 0); + ITUtilStructureElement.assertRead("/mnemonic/A1", 1, 1); + + // normally expected number of entries are 1, 2, 2, 2 + // since within 1 second from requested to processed, expected number of entries 1, 1, 1, 1 + ITUtilStructureElement.assertRead("/history/" + uuid.toString(), 1, 1); + ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 1, 1); + ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 1, 1); + ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 1, 1); + } catch (Exception e) { + fail(); + } + } + + @Test + public void readSearchHistoryStatusLatest9() { + // purpose + // test read system in various ways + // status + // latest + // ( deleted ) + // history + // + // what + // entries with different statuses + // + // note + // create (and more) to read (with content) + // 4 different lines of uuid with combinations of status and latest + // 9 entries for each line of uuid + // in particular different statuses for last entry in lines of uuid + // mnemonic - P, C, R, A (pending, cancelled, rejected, approved) + // + // note! + // not only + // exclude APPROVED and not latest + // not only + // exclude earlier than APPROVED and latest (considered history) + // include PENDING and not latest (considered future) + // instead + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + + StructureElement structureElement = null; + StructureElement responseStructureElement = null; + UUID uuid, uuid2, uuid3, uuid4 = null; + + // a number of entries for which the last entry has status PENDING + structureElement = new StructureElement( + Type.SYSTEM, null, systemGroupUuid, + "name", "P9", "P9", 2, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid = responseStructureElement.getUuid(); + + responseStructureElement.setComment("test comment 2"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 3"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + responseStructureElement.setComment("test comment 4"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 5"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 6"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + responseStructureElement.setComment("test comment 7"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 8"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 9"); + responseStructureElement = ITUtilStructureElement.assertUpdate(responseStructureElement); + + // a number of entries for which the last entry has status CANCELLED + structureElement = new StructureElement( + Type.SYSTEM, null, systemGroupUuid, + "name", "C9", "C9", 2, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid2 = responseStructureElement.getUuid(); + + responseStructureElement.setComment("test comment 2"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 3"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + responseStructureElement.setComment("test comment 4"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 5"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 6"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + responseStructureElement.setComment("test comment 7"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 8"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 9"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + + // a number of entries for which the last entry has status REJECTED + structureElement = new StructureElement( + Type.SYSTEM, null, systemGroupUuid, + "name", "R9", "R9", 2, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid3 = responseStructureElement.getUuid(); + + responseStructureElement.setComment("test comment 2"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 3"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + responseStructureElement.setComment("test comment 4"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 5"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 6"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + responseStructureElement.setComment("test comment 7"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 8"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 9"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + + // a number of entries for which the last entry has status APPROVED + structureElement = new StructureElement( + Type.SYSTEM, null, systemGroupUuid, + "name", "A9", "A9", 2, + "description", Status.PENDING, Boolean.FALSE, Boolean.FALSE, + null, "test who", "test comment 1"); + responseStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + uuid4 = responseStructureElement.getUuid(); + + responseStructureElement.setComment("test comment 2"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 3"); + responseStructureElement = ITUtilStructureElement.assertUpdateCancel(responseStructureElement); + responseStructureElement.setComment("test comment 4"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 5"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 6"); + responseStructureElement = ITUtilStructureElement.assertUpdateReject(responseStructureElement); + responseStructureElement.setComment("test comment 7"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 8"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + responseStructureElement.setComment("test comment 9"); + responseStructureElement = ITUtilStructureElement.assertUpdateApprove(responseStructureElement); + + try { + // from first structure element + assertNotNull(uuid); + + // note + // exclude earlier than APPROVED and latest (considered history) + // ( include if latest ) + // include if latest not exists (considered present + future) + + ITUtilStructureElement.assertRead("/SYSTEM?queryFields=UUID&queryValues=" + uuid.toString(), 2, 2); + ITUtilStructureElement.assertRead("/SYSTEM?queryFields=UUID&queryValues=" + uuid2.toString(), 2, 2); + ITUtilStructureElement.assertRead("/SYSTEM?queryFields=UUID&queryValues=" + uuid3.toString(), 2, 2); + ITUtilStructureElement.assertRead("/SYSTEM?queryFields=UUID&queryValues=" + uuid4.toString(), 1, 1); + + ITUtilStructureElement.assertRead("/mnemonic/P9", 1, 1); + ITUtilStructureElement.assertRead("/mnemonic/C9", 1, 1); + ITUtilStructureElement.assertRead("/mnemonic/R9", 1, 1); + ITUtilStructureElement.assertRead("/mnemonic/A9", 1, 1); + + // normally expected number of entries are 17, 18, 18, 18 + // since within 1 second from requested to processed, expected number of entries 9, 9, 9, 9 + ITUtilStructureElement.assertRead("/history/" + uuid.toString(), 9, 9); + ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 9, 9); + ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 9, 9); + ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 9, 9); + } catch (Exception e) { + fail(); + } + } + @Test public void readSearchStatusDeletedChildren() { // purpose - // test read system group in various ways + // test read system in various ways // status // ( latest ) // deleted @@ -1502,27 +1783,26 @@ public class StructuresSystemIT { // from first structure element assertNotNull(uuid); - ITUtilStructureElement.assertRead("/SYSTEM?queryFields=MNEMONIC&queryValues=A__", 45, 45); - - ITUtilStructureElement.assertRead("/SYSTEM?statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 10, 10); - ITUtilStructureElement.assertRead("/SYSTEM?statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 20, 20); - ITUtilStructureElement.assertRead("/SYSTEM?statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/SYSTEM?statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 10, 10); - ITUtilStructureElement.assertRead("/SYSTEM?statuses=PENDING&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 30, 30); - - ITUtilStructureElement.assertRead("/SYSTEM?deleted=false&queryFields=MNEMONIC&queryValues=A__", 30, 30); - ITUtilStructureElement.assertRead("/SYSTEM?deleted=false&statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/SYSTEM?deleted=false&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 15, 15); - ITUtilStructureElement.assertRead("/SYSTEM?deleted=false&statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/SYSTEM?deleted=false&statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/SYSTEM?queryFields=MNEMONIC&queryValues=A__", 45, 45); + ITUtilStructureElement.assertRead("/SYSTEM?statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 10, 10); + ITUtilStructureElement.assertRead("/SYSTEM?statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 20, 20); + ITUtilStructureElement.assertRead("/SYSTEM?statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/SYSTEM?statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 10, 10); + ITUtilStructureElement.assertRead("/SYSTEM?statuses=PENDING&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 30, 30); + + ITUtilStructureElement.assertRead("/SYSTEM?deleted=false&queryFields=MNEMONIC&queryValues=A__", 30, 30); + ITUtilStructureElement.assertRead("/SYSTEM?deleted=false&statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/SYSTEM?deleted=false&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 15, 15); + ITUtilStructureElement.assertRead("/SYSTEM?deleted=false&statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/SYSTEM?deleted=false&statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 5, 5); ITUtilStructureElement.assertRead("/SYSTEM?deleted=false&statuses=PENDING&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 20, 20); - ITUtilStructureElement.assertRead("/SYSTEM?deleted=true&queryFields=MNEMONIC&queryValues=A__", 15, 15); - ITUtilStructureElement.assertRead("/SYSTEM?deleted=true&statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/SYSTEM?deleted=true&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/SYSTEM?deleted=true&statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 0, 0); - ITUtilStructureElement.assertRead("/SYSTEM?deleted=true&statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 5, 5); - ITUtilStructureElement.assertRead("/SYSTEM?deleted=true&statuses=PENDING&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 10, 10); + ITUtilStructureElement.assertRead("/SYSTEM?deleted=true&queryFields=MNEMONIC&queryValues=A__", 15, 15); + ITUtilStructureElement.assertRead("/SYSTEM?deleted=true&statuses=PENDING&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/SYSTEM?deleted=true&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/SYSTEM?deleted=true&statuses=CANCELLED&queryFields=MNEMONIC&queryValues=A__", 0, 0); + ITUtilStructureElement.assertRead("/SYSTEM?deleted=true&statuses=REJECTED&queryFields=MNEMONIC&queryValues=A__", 5, 5); + ITUtilStructureElement.assertRead("/SYSTEM?deleted=true&statuses=PENDING&statuses=APPROVED&queryFields=MNEMONIC&queryValues=A__", 10, 10); ITUtilStructureElement.assertRead("/children/SYSTEM/" + uuid.toString(), 0, 0); ITUtilStructureElement.assertRead("/children/SYSTEMGROUP/" + systemGroupUuid.toString(), -1, 1); @@ -1531,15 +1811,4 @@ public class StructuresSystemIT { } } - @Test - public void equivalenceMnemonic() { - // purpose - // test mnemonic equivalence - // - // what - // read equivalence mnemonic - - ITUtilStructureElement.assertEquivalence("Sys", "SYS"); - } - }