From 699aa3ef8a43067e05690f321adeb0642bba8791 Mon Sep 17 00:00:00 2001 From: Lars Johansson <lars.johansson@ess.eu> Date: Mon, 4 Apr 2022 14:12:26 +0200 Subject: [PATCH] Change in repository classes to exclude entries unless history requested Purpose of Naming to (default) show valid entries. Therefore exclude some values unless history requested. Make sure to not exclude present and future values. --- .../repository/DeviceGroupRepository.java | 49 ++- .../repository/DeviceTypeRepository.java | 48 ++- .../repository/DisciplineRepository.java | 48 ++- .../names/repository/NameRepository.java | 10 +- .../names/repository/SubsystemRepository.java | 48 ++- .../repository/SystemGroupRepository.java | 48 ++- .../names/repository/SystemRepository.java | 49 ++- .../org/openepics/names/docker/NamesIT.java | 88 ++--- .../names/docker/StructuresDeviceGroupIT.java | 337 +++++++++++++++-- .../names/docker/StructuresDeviceTypeIT.java | 343 ++++++++++++++++-- .../names/docker/StructuresDisciplineIT.java | 331 +++++++++++++++-- .../names/docker/StructuresSubsystemIT.java | 337 +++++++++++++++-- .../names/docker/StructuresSystemGroupIT.java | 329 +++++++++++++++-- .../names/docker/StructuresSystemIT.java | 337 +++++++++++++++-- 14 files changed, 2107 insertions(+), 295 deletions(-) diff --git a/src/main/java/org/openepics/names/repository/DeviceGroupRepository.java b/src/main/java/org/openepics/names/repository/DeviceGroupRepository.java index 342a06f6..9d608063 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 f06a8e16..133a728c 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 77faa2e3..44e99978 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 4226d7a5..be1ef023 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 461ab139..da5c5b79 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 a87a7c30..1dac1430 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 de838d49..90c2fc73 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 7dfd957a..0697e6c9 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 33ab1437..42580d07 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 6cbf0be2..93b75aa7 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 5ad6aed1..3f8bf24b 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 76de6b5a..e42cb7dc 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 2493245c..60738c8c 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 dd482fa5..b25511a9 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"); - } - } -- GitLab