From d1f152be379b56c1ca430e64c2493cffa62e587c Mon Sep 17 00:00:00 2001 From: Lars Johansson <lars.johansson@ess.eu> Date: Mon, 8 Jan 2024 09:37:29 +0100 Subject: [PATCH] Update predicate handling for structure repository classes Update handling of where statements to better exclude obsolete values unless history is requested. Update lifecycle image. Update integration tests accordingly. --- .../repository/DeviceGroupRepository.java | 32 +++++-- .../repository/DeviceTypeRepository.java | 32 +++++-- .../repository/DisciplineRepository.java | 32 +++++-- .../names/repository/SubsystemRepository.java | 32 +++++-- .../repository/SystemGroupRepository.java | 34 ++++++-- .../names/repository/SystemRepository.java | 32 +++++-- .../images/naming_backend_lifecycle.png | Bin 37567 -> 48057 bytes .../names/docker/StructuresDeviceGroupIT.java | 75 +++++++---------- .../names/docker/StructuresDeviceTypeIT.java | 77 +++++++---------- .../names/docker/StructuresDisciplineIT.java | 77 +++++++---------- .../names/docker/StructuresSubsystemIT.java | 77 +++++++---------- .../names/docker/StructuresSystemGroupIT.java | 73 +++++++--------- .../names/docker/StructuresSystemIT.java | 79 +++++++----------- 13 files changed, 335 insertions(+), 317 deletions(-) diff --git a/src/main/java/org/openepics/names/repository/DeviceGroupRepository.java b/src/main/java/org/openepics/names/repository/DeviceGroupRepository.java index e5524fdd..aa3cc442 100644 --- a/src/main/java/org/openepics/names/repository/DeviceGroupRepository.java +++ b/src/main/java/org/openepics/names/repository/DeviceGroupRepository.java @@ -209,13 +209,20 @@ public class DeviceGroupRepository { // make sure to not exclude present and future values (latest approved and pending) // // condition(s) - // exclude content (with latest) before latest - considered history + // exclude content (with latest) before latest + // exclude content (with latest) after latest (cancelled, rejected) + // keep content (without latest) (to have line of uuid) + // <--> // select * from structure s // where ( - // not (exists (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.id < (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true)) + // not (exists (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.id < (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true)) + // and not (exists (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.id > (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.status in ('CANCELLED', 'REJECTED')) + // NOT and not (not exists (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.status in ('CANCELLED', 'REJECTED')) // ) // <--> - // not (exists (subquery id) and s.id < (subquery id)) + // not (exists (subquery id) and s.id < (subquery id)) + // and not (exists (subquery id) and s.id > (subquery id) and s.status in ('CANCELLED', 'REJECTED')) + // NOT and not (not exists (subquery id) and s.status in ('CANCELLED', 'REJECTED')) // // note // persistence libraries may optimize query @@ -229,9 +236,22 @@ public class DeviceGroupRepository { sub.select(fromSub.get(Persistable.FIELD_ID)); Predicate predicateExclude = - cb.and(cb.not(cb.and( - cb.exists(sub), - cb.lessThan(from.get(Persistable.FIELD_ID).as(Long.class), sub)))); + cb.and( + cb.not(cb.and( + cb.exists(sub), + cb.lessThan(from.get(Persistable.FIELD_ID).as(Long.class), sub))), + cb.not(cb.and( + cb.exists(sub), + cb.greaterThan(from.get(Persistable.FIELD_ID).as(Long.class), sub), + cb.or( + cb.equal(from.get(NameStructure.FIELD_STATUS), Status.CANCELLED), + cb.equal(from.get(NameStructure.FIELD_STATUS), Status.REJECTED)))) + // cb.not(cb.and( + // cb.not(cb.exists(sub)), + // cb.or( + // cb.equal(from.get(NameStructure.FIELD_STATUS), Status.CANCELLED), + // cb.equal(from.get(NameStructure.FIELD_STATUS), Status.REJECTED)))) + ); predicates.add(predicateExclude); } diff --git a/src/main/java/org/openepics/names/repository/DeviceTypeRepository.java b/src/main/java/org/openepics/names/repository/DeviceTypeRepository.java index b1543e1a..da3d50b9 100644 --- a/src/main/java/org/openepics/names/repository/DeviceTypeRepository.java +++ b/src/main/java/org/openepics/names/repository/DeviceTypeRepository.java @@ -209,13 +209,20 @@ public class DeviceTypeRepository { // make sure to not exclude present and future values (latest approved and pending) // // condition(s) - // exclude content (with latest) before latest - considered history + // exclude content (with latest) before latest + // exclude content (with latest) after latest (cancelled, rejected) + // keep content (without latest) (to have line of uuid) + // <--> // select * from structure s // where ( - // not (exists (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.id < (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true)) + // not (exists (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.id < (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true)) + // and not (exists (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.id > (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.status in ('CANCELLED', 'REJECTED')) + // NOT and not (not exists (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.status in ('CANCELLED', 'REJECTED')) // ) // <--> - // not (exists (subquery id) and s.id < (subquery id)) + // not (exists (subquery id) and s.id < (subquery id)) + // and not (exists (subquery id) and s.id > (subquery id) and s.status in ('CANCELLED', 'REJECTED')) + // NOT and not (not exists (subquery id) and s.status in ('CANCELLED', 'REJECTED')) // // note // persistence libraries may optimize query @@ -229,9 +236,22 @@ public class DeviceTypeRepository { sub.select(fromSub.get(Persistable.FIELD_ID)); Predicate predicateExclude = - cb.and(cb.not(cb.and( - cb.exists(sub), - cb.lessThan(from.get(Persistable.FIELD_ID).as(Long.class), sub)))); + cb.and( + cb.not(cb.and( + cb.exists(sub), + cb.lessThan(from.get(Persistable.FIELD_ID).as(Long.class), sub))), + cb.not(cb.and( + cb.exists(sub), + cb.greaterThan(from.get(Persistable.FIELD_ID).as(Long.class), sub), + cb.or( + cb.equal(from.get(NameStructure.FIELD_STATUS), Status.CANCELLED), + cb.equal(from.get(NameStructure.FIELD_STATUS), Status.REJECTED)))) + // cb.not(cb.and( + // cb.not(cb.exists(sub)), + // cb.or( + // cb.equal(from.get(NameStructure.FIELD_STATUS), Status.CANCELLED), + // cb.equal(from.get(NameStructure.FIELD_STATUS), Status.REJECTED)))) + ); predicates.add(predicateExclude); } diff --git a/src/main/java/org/openepics/names/repository/DisciplineRepository.java b/src/main/java/org/openepics/names/repository/DisciplineRepository.java index ad07c283..cdeafd2f 100644 --- a/src/main/java/org/openepics/names/repository/DisciplineRepository.java +++ b/src/main/java/org/openepics/names/repository/DisciplineRepository.java @@ -205,13 +205,20 @@ public class DisciplineRepository { // make sure to not exclude present and future values (latest approved and pending) // // condition(s) - // exclude content (with latest) before latest - considered history + // exclude content (with latest) before latest + // exclude content (with latest) after latest (cancelled, rejected) + // keep content (without latest) (to have line of uuid) + // <--> // select * from structure s // where ( - // not (exists (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.id < (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true)) + // not (exists (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.id < (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true)) + // and not (exists (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.id > (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.status in ('CANCELLED', 'REJECTED')) + // NOT and not (not exists (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.status in ('CANCELLED', 'REJECTED')) // ) // <--> - // not (exists (subquery id) and s.id < (subquery id)) + // not (exists (subquery id) and s.id < (subquery id)) + // and not (exists (subquery id) and s.id > (subquery id) and s.status in ('CANCELLED', 'REJECTED')) + // NOT and not (not exists (subquery id) and s.status in ('CANCELLED', 'REJECTED')) // // note // persistence libraries may optimize query @@ -225,9 +232,22 @@ public class DisciplineRepository { sub.select(fromSub.get(Persistable.FIELD_ID)); Predicate predicateExclude = - cb.and(cb.not(cb.and( - cb.exists(sub), - cb.lessThan(from.get(Persistable.FIELD_ID).as(Long.class), sub)))); + cb.and( + cb.not(cb.and( + cb.exists(sub), + cb.lessThan(from.get(Persistable.FIELD_ID).as(Long.class), sub))), + cb.not(cb.and( + cb.exists(sub), + cb.greaterThan(from.get(Persistable.FIELD_ID).as(Long.class), sub), + cb.or( + cb.equal(from.get(NameStructure.FIELD_STATUS), Status.CANCELLED), + cb.equal(from.get(NameStructure.FIELD_STATUS), Status.REJECTED)))) + // cb.not(cb.and( + // cb.not(cb.exists(sub)), + // cb.or( + // cb.equal(from.get(NameStructure.FIELD_STATUS), Status.CANCELLED), + // cb.equal(from.get(NameStructure.FIELD_STATUS), Status.REJECTED)))) + ); 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 9fc3d7d1..b2f6f540 100644 --- a/src/main/java/org/openepics/names/repository/SubsystemRepository.java +++ b/src/main/java/org/openepics/names/repository/SubsystemRepository.java @@ -209,13 +209,20 @@ public class SubsystemRepository { // make sure to not exclude present and future values (latest approved and pending) // // condition(s) - // exclude content (with latest) before latest - considered history + // exclude content (with latest) before latest + // exclude content (with latest) after latest (cancelled, rejected) + // keep content (without latest) (to have line of uuid) + // <--> // select * from structure s // where ( - // not (exists (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.id < (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true)) + // not (exists (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.id < (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true)) + // and not (exists (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.id > (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.status in ('CANCELLED', 'REJECTED')) + // NOT and not (not exists (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.status in ('CANCELLED', 'REJECTED')) // ) // <--> - // not (exists (subquery id) and s.id < (subquery id)) + // not (exists (subquery id) and s.id < (subquery id)) + // and not (exists (subquery id) and s.id > (subquery id) and s.status in ('CANCELLED', 'REJECTED')) + // NOT and not (not exists (subquery id) and s.status in ('CANCELLED', 'REJECTED')) // // note // persistence libraries may optimize query @@ -229,9 +236,22 @@ public class SubsystemRepository { sub.select(fromSub.get(Persistable.FIELD_ID)); Predicate predicateExclude = - cb.and(cb.not(cb.and( - cb.exists(sub), - cb.lessThan(from.get(Persistable.FIELD_ID).as(Long.class), sub)))); + cb.and( + cb.not(cb.and( + cb.exists(sub), + cb.lessThan(from.get(Persistable.FIELD_ID).as(Long.class), sub))), + cb.not(cb.and( + cb.exists(sub), + cb.greaterThan(from.get(Persistable.FIELD_ID).as(Long.class), sub), + cb.or( + cb.equal(from.get(NameStructure.FIELD_STATUS), Status.CANCELLED), + cb.equal(from.get(NameStructure.FIELD_STATUS), Status.REJECTED)))) + // cb.not(cb.and( + // cb.not(cb.exists(sub)), + // cb.or( + // cb.equal(from.get(NameStructure.FIELD_STATUS), Status.CANCELLED), + // cb.equal(from.get(NameStructure.FIELD_STATUS), Status.REJECTED)))) + ); predicates.add(predicateExclude); } diff --git a/src/main/java/org/openepics/names/repository/SystemGroupRepository.java b/src/main/java/org/openepics/names/repository/SystemGroupRepository.java index f9f3b06c..ab6ac1fb 100644 --- a/src/main/java/org/openepics/names/repository/SystemGroupRepository.java +++ b/src/main/java/org/openepics/names/repository/SystemGroupRepository.java @@ -197,17 +197,24 @@ public class SystemGroupRepository { if (!Boolean.TRUE.equals(includeHistory)) { // purpose of Naming to show valid entries // therefore - // exclude some values unless history requested + // exclude obsolete values unless history requested // make sure to not exclude present and future values (latest approved and pending) // // condition(s) - // exclude content (with latest) before latest - considered history + // exclude content (with latest) before latest + // exclude content (with latest) after latest (cancelled, rejected) + // keep content (without latest) (to have line of uuid) + // <--> // select * from structure s // where ( - // not (exists (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.id < (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true)) + // not (exists (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.id < (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true)) + // and not (exists (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.id > (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.status in ('CANCELLED', 'REJECTED')) + // NOT and not (not exists (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.status in ('CANCELLED', 'REJECTED')) // ) // <--> - // not (exists (subquery id) and s.id < (subquery id)) + // not (exists (subquery id) and s.id < (subquery id)) + // and not (exists (subquery id) and s.id > (subquery id) and s.status in ('CANCELLED', 'REJECTED')) + // NOT and not (not exists (subquery id) and s.status in ('CANCELLED', 'REJECTED')) // // note // persistence libraries may optimize query @@ -221,9 +228,22 @@ public class SystemGroupRepository { sub.select(fromSub.get(Persistable.FIELD_ID)); Predicate predicateExclude = - cb.and(cb.not(cb.and( - cb.exists(sub), - cb.lessThan(from.get(Persistable.FIELD_ID).as(Long.class), sub)))); + cb.and( + cb.not(cb.and( + cb.exists(sub), + cb.lessThan(from.get(Persistable.FIELD_ID).as(Long.class), sub))), + cb.not(cb.and( + cb.exists(sub), + cb.greaterThan(from.get(Persistable.FIELD_ID).as(Long.class), sub), + cb.or( + cb.equal(from.get(NameStructure.FIELD_STATUS), Status.CANCELLED), + cb.equal(from.get(NameStructure.FIELD_STATUS), Status.REJECTED)))) + // cb.not(cb.and( + // cb.not(cb.exists(sub)), + // cb.or( + // cb.equal(from.get(NameStructure.FIELD_STATUS), Status.CANCELLED), + // cb.equal(from.get(NameStructure.FIELD_STATUS), Status.REJECTED)))) + ); predicates.add(predicateExclude); } diff --git a/src/main/java/org/openepics/names/repository/SystemRepository.java b/src/main/java/org/openepics/names/repository/SystemRepository.java index 75c8107b..991f9c11 100644 --- a/src/main/java/org/openepics/names/repository/SystemRepository.java +++ b/src/main/java/org/openepics/names/repository/SystemRepository.java @@ -209,13 +209,20 @@ public class SystemRepository { // make sure to not exclude present and future values (latest approved and pending) // // condition(s) - // exclude content (with latest) before latest - considered history + // exclude content (with latest) before latest + // exclude content (with latest) after latest (cancelled, rejected) + // keep content (without latest) (to have line of uuid) + // <--> // select * from structure s // where ( - // not (exists (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.id < (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true)) + // not (exists (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.id < (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true)) + // and not (exists (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.id > (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.status in ('CANCELLED', 'REJECTED')) + // NOT and not (not exists (select s2.id from structure s2 where s2."uuid" = s."uuid" and s2.latest=true) and s.status in ('CANCELLED', 'REJECTED')) // ) // <--> - // not (exists (subquery id) and s.id < (subquery id)) + // not (exists (subquery id) and s.id < (subquery id)) + // and not (exists (subquery id) and s.id > (subquery id) and s.status in ('CANCELLED', 'REJECTED')) + // NOT and not (not exists (subquery id) and s.status in ('CANCELLED', 'REJECTED')) // // note // persistence libraries may optimize query @@ -229,9 +236,22 @@ public class SystemRepository { sub.select(fromSub.get(Persistable.FIELD_ID)); Predicate predicateExclude = - cb.and(cb.not(cb.and( - cb.exists(sub), - cb.lessThan(from.get(Persistable.FIELD_ID).as(Long.class), sub)))); + cb.and( + cb.not(cb.and( + cb.exists(sub), + cb.lessThan(from.get(Persistable.FIELD_ID).as(Long.class), sub))), + cb.not(cb.and( + cb.exists(sub), + cb.greaterThan(from.get(Persistable.FIELD_ID).as(Long.class), sub), + cb.or( + cb.equal(from.get(NameStructure.FIELD_STATUS), Status.CANCELLED), + cb.equal(from.get(NameStructure.FIELD_STATUS), Status.REJECTED)))) + // cb.not(cb.and( + // cb.not(cb.exists(sub)), + // cb.or( + // cb.equal(from.get(NameStructure.FIELD_STATUS), Status.CANCELLED), + // cb.equal(from.get(NameStructure.FIELD_STATUS), Status.REJECTED)))) + ); predicates.add(predicateExclude); } diff --git a/src/main/resources/static/images/naming_backend_lifecycle.png b/src/main/resources/static/images/naming_backend_lifecycle.png index 826ee3bcf2ff033a8ae0c5c1a31ac74513a598d6..3e490aaa37e3cbea6c98d6e51e46f4fef9ea64ac 100644 GIT binary patch literal 48057 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�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 KlwK;B`TrM{PmCx4 literal 37567 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 C{WDVl diff --git a/src/test/java/org/openepics/names/docker/StructuresDeviceGroupIT.java b/src/test/java/org/openepics/names/docker/StructuresDeviceGroupIT.java index 8e64b62c..95ced983 100644 --- a/src/test/java/org/openepics/names/docker/StructuresDeviceGroupIT.java +++ b/src/test/java/org/openepics/names/docker/StructuresDeviceGroupIT.java @@ -1376,16 +1376,10 @@ class StructuresDeviceGroupIT { // 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) + // note + // exclude content (with latest) before latest + // exclude content (with latest) after latest (cancelled, rejected) + // keep content (without latest) (to have line of uuid) StructureElementCommandCreate structureElementCommandCreate = null; StructureElement createdStructureElement = null; @@ -1427,11 +1421,6 @@ class StructuresDeviceGroupIT { // 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) - ITUtilStructures.assertFind("/DEVICEGROUP/" + uuid.toString()); ITUtilStructures.assertFind("/DEVICEGROUP/" + uuid2.toString()); ITUtilStructures.assertFind("/DEVICEGROUP/" + uuid3.toString()); @@ -1480,16 +1469,10 @@ class StructuresDeviceGroupIT { // 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) + // note + // exclude content (with latest) before latest + // exclude content (with latest) after latest (cancelled, rejected) + // keep content (without latest) (to have line of uuid) StructureElementCommandCreate structureElementCommandCreate = null; StructureElementCommandUpdate structureElementCommandUpdate = null; @@ -1604,11 +1587,6 @@ class StructuresDeviceGroupIT { // 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) - ITUtilStructures.assertFind("/DEVICEGROUP/" + uuid.toString()); ITUtilStructures.assertFind("/DEVICEGROUP/" + uuid2.toString()); ITUtilStructures.assertFind("/DEVICEGROUP/" + uuid3.toString()); @@ -1654,6 +1632,11 @@ class StructuresDeviceGroupIT { // create (and more) to read (with content) // querying for Status.APPROVED means latest approved // multiple commands at same time may have effects on order by (when) + // + // note + // exclude content (with latest) before latest + // exclude content (with latest) after latest (cancelled, rejected) + // keep content (without latest) (to have line of uuid) StructureElementCommandCreate[] structureElementCommandsCreate = null; StructureElementCommandUpdate[] structureElementCommandsUpdate = null; @@ -1817,11 +1800,11 @@ class StructuresDeviceGroupIT { // content for field in first and last items - always possible // first and last items - not always possible - ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2", 45); + ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2", 35); ITUtilStructures.assertRead("/DEVICEGROUP?statuses=PENDING&mnemonicPath=Di2", 10); ITUtilStructures.assertRead("/DEVICEGROUP?statuses=APPROVED&mnemonicPath=Di2", 25); ITUtilStructures.assertRead("/DEVICEGROUP?statuses=CANCELLED&mnemonicPath=Di2", 0); - ITUtilStructures.assertRead("/DEVICEGROUP?statuses=REJECTED&mnemonicPath=Di2", 10); + ITUtilStructures.assertRead("/DEVICEGROUP?statuses=REJECTED&mnemonicPath=Di2", 0); ITUtilStructures.assertRead("/DEVICEGROUP?statuses=PENDING&statuses=APPROVED&mnemonicPath=Di2", 35); ITUtilStructures.assertRead("/DEVICEGROUP?deleted=false&mnemonicPath=Di2", 20); @@ -1831,11 +1814,11 @@ class StructuresDeviceGroupIT { ITUtilStructures.assertRead("/DEVICEGROUP?deleted=false&statuses=REJECTED&mnemonicPath=Di2", 0); ITUtilStructures.assertRead("/DEVICEGROUP?deleted=false&statuses=PENDING&statuses=APPROVED&mnemonicPath=Di2", 20); - ITUtilStructures.assertRead("/DEVICEGROUP?deleted=true&mnemonicPath=Di2", 25); + ITUtilStructures.assertRead("/DEVICEGROUP?deleted=true&mnemonicPath=Di2", 15); ITUtilStructures.assertRead("/DEVICEGROUP?deleted=true&statuses=PENDING&mnemonicPath=Di2", 10); ITUtilStructures.assertRead("/DEVICEGROUP?deleted=true&statuses=APPROVED&mnemonicPath=Di2", 5); ITUtilStructures.assertRead("/DEVICEGROUP?deleted=true&statuses=CANCELLED&mnemonicPath=Di2", 0); - ITUtilStructures.assertRead("/DEVICEGROUP?deleted=true&statuses=REJECTED&mnemonicPath=Di2", 10); + ITUtilStructures.assertRead("/DEVICEGROUP?deleted=true&statuses=REJECTED&mnemonicPath=Di2", 0); ITUtilStructures.assertRead("/DEVICEGROUP?deleted=true&statuses=PENDING&statuses=APPROVED&mnemonicPath=Di2", 15); ITUtilStructures.assertRead("/DEVICEGROUP?parent=" + discipline2Uuid.toString(), 45, -1); @@ -1925,14 +1908,14 @@ class StructuresDeviceGroupIT { || value2 != null && (StringUtils.equals(value2, value0) || StringUtils.equals(value2, value1))); // pagination - ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=0&pageSize=100", 45); + ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=0&pageSize=100", 35); ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=1&pageSize=100", 0); - ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=0&pageSize=45", 45); - ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=1&pageSize=45", 0); - ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=0&pageSize=20", 20); - ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=1&pageSize=20", 20); - ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=2&pageSize=20", 5); - ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=3&pageSize=20", 0); + ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=0&pageSize=35", 35); + ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=1&pageSize=35", 0); + ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=0&pageSize=15", 15); + ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=1&pageSize=15", 15); + ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=2&pageSize=15", 5); + ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&page=3&pageSize=15", 0); // pagination ITUtilStructures.assertRead("/DEVICEGROUP?statuses=PENDING&statuses=APPROVED&mnemonicPath=Di2&page=0&pageSize=15", 15); @@ -1941,11 +1924,11 @@ class StructuresDeviceGroupIT { ITUtilStructures.assertRead("/DEVICEGROUP?statuses=PENDING&statuses=APPROVED&mnemonicPath=Di2&page=3&pageSize=15", 0); // order by, pagination - response = ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&orderBy=WHEN&isAsc=true&page=0&pageSize=20", 20); - response2 = ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&orderBy=WHEN&isAsc=false&page=2&pageSize=20", 5); + response = ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&orderBy=WHEN&isAsc=true&page=0&pageSize=15", 15); + response2 = ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&orderBy=WHEN&isAsc=false&page=2&pageSize=15", 5); assertEquals(response.getList().get(0).getWhen(), response2.getList().get(response2.getList().size()-1).getWhen()); - response = ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&orderBy=WHEN&isAsc=false&page=0&pageSize=20", 20); - response2 = ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&orderBy=WHEN&isAsc=true&page=2&pageSize=20", 5); + response = ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&orderBy=WHEN&isAsc=false&page=0&pageSize=15", 15); + response2 = ITUtilStructures.assertRead("/DEVICEGROUP?mnemonicPath=Di2&orderBy=WHEN&isAsc=true&page=2&pageSize=15", 5); assertEquals(response.getList().get(0).getWhen(), response2.getList().get(response2.getList().size()-1).getWhen()); // type and uuid @@ -1989,7 +1972,7 @@ class StructuresDeviceGroupIT { ITUtilStructures.assertRead("/mnemonicPath/D%", 17, -1); ITUtilStructures.assertRead("/mnemonicPath/D__", 16, -1); ITUtilStructures.assertRead("/mnemonicPath/Di_", 16, -1); - ITUtilStructures.assertRead("/mnemonicPath/Di2", 46); + ITUtilStructures.assertRead("/mnemonicPath/Di2", 36); ITUtilStructures.assertRead("/mnemonicPath/D?statuses=APPROVED&deleted=false", 0); ITUtilStructures.assertRead("/mnemonicPath/D%?statuses=APPROVED&deleted=false", 22, -1); ITUtilStructures.assertRead("/mnemonicPath/D__?statuses=APPROVED&deleted=false", 21, -1); diff --git a/src/test/java/org/openepics/names/docker/StructuresDeviceTypeIT.java b/src/test/java/org/openepics/names/docker/StructuresDeviceTypeIT.java index 316d188c..4dcf8632 100644 --- a/src/test/java/org/openepics/names/docker/StructuresDeviceTypeIT.java +++ b/src/test/java/org/openepics/names/docker/StructuresDeviceTypeIT.java @@ -1378,16 +1378,10 @@ class StructuresDeviceTypeIT { // 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) + // note + // exclude content (with latest) before latest + // exclude content (with latest) after latest (cancelled, rejected) + // keep content (without latest) (to have line of uuid) StructureElementCommandCreate structureElementCommandCreate = null; StructureElement createdStructureElement = null; @@ -1429,11 +1423,6 @@ class StructuresDeviceTypeIT { // 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) - ITUtilStructures.assertFind("/DEVICETYPE/" + uuid.toString()); ITUtilStructures.assertFind("/DEVICETYPE/" + uuid2.toString()); ITUtilStructures.assertFind("/DEVICETYPE/" + uuid3.toString()); @@ -1485,16 +1474,10 @@ class StructuresDeviceTypeIT { // 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) + // note + // exclude content (with latest) before latest + // exclude content (with latest) after latest (cancelled, rejected) + // keep content (without latest) (to have line of uuid) StructureElementCommandCreate structureElementCommandCreate = null; StructureElementCommandUpdate structureElementCommandUpdate = null; @@ -1609,19 +1592,14 @@ class StructuresDeviceTypeIT { // 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) - ITUtilStructures.assertFind("/DEVICETYPE/" + uuid.toString()); ITUtilStructures.assertFind("/DEVICETYPE/" + uuid2.toString()); ITUtilStructures.assertFind("/DEVICETYPE/" + uuid3.toString()); ITUtilStructures.assertFind("/DEVICETYPE/" + uuid4.toString()); ITUtilStructures.assertRead("/mnemonic/P9", 2); - ITUtilStructures.assertRead("/mnemonic/C9", 2); - ITUtilStructures.assertRead("/mnemonic/R9", 2); + ITUtilStructures.assertRead("/mnemonic/C9", 1); + ITUtilStructures.assertRead("/mnemonic/R9", 1); ITUtilStructures.assertRead("/mnemonic/A9", 1); ITUtilStructures.assertRead("/mnemonic/P9?statuses=APPROVED&deleted=false", 1); ITUtilStructures.assertRead("/mnemonic/C9?statuses=APPROVED&deleted=false", 1); @@ -1662,6 +1640,11 @@ class StructuresDeviceTypeIT { // create (and more) to read (with content) // querying for Status.APPROVED means latest approved // multiple commands at same time may have effects on order by (when) + // + // note + // exclude content (with latest) before latest + // exclude content (with latest) after latest (cancelled, rejected) + // keep content (without latest) (to have line of uuid) StructureElementCommandCreate[] structureElementCommandsCreate = null; StructureElementCommandUpdate[] structureElementCommandsUpdate = null; @@ -1825,11 +1808,11 @@ class StructuresDeviceTypeIT { // content for field in first and last items - always possible // first and last items - not always possible - ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__", 60); + ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__", 50); ITUtilStructures.assertRead("/DEVICETYPE?statuses=PENDING&mnemonic=A__", 15); ITUtilStructures.assertRead("/DEVICETYPE?statuses=APPROVED&mnemonic=A__", 25); ITUtilStructures.assertRead("/DEVICETYPE?statuses=CANCELLED&mnemonic=A__", 5); - ITUtilStructures.assertRead("/DEVICETYPE?statuses=REJECTED&mnemonic=A__", 15); + ITUtilStructures.assertRead("/DEVICETYPE?statuses=REJECTED&mnemonic=A__", 5); ITUtilStructures.assertRead("/DEVICETYPE?statuses=PENDING&statuses=APPROVED&mnemonic=A__", 40); ITUtilStructures.assertRead("/DEVICETYPE?deleted=false&mnemonic=A__", 35); @@ -1839,11 +1822,11 @@ class StructuresDeviceTypeIT { ITUtilStructures.assertRead("/DEVICETYPE?deleted=false&statuses=REJECTED&mnemonic=A__", 5); ITUtilStructures.assertRead("/DEVICETYPE?deleted=false&statuses=PENDING&statuses=APPROVED&mnemonic=A__", 25); - ITUtilStructures.assertRead("/DEVICETYPE?deleted=true&mnemonic=A__", 25); + ITUtilStructures.assertRead("/DEVICETYPE?deleted=true&mnemonic=A__", 15); ITUtilStructures.assertRead("/DEVICETYPE?deleted=true&statuses=PENDING&mnemonic=A__", 10); ITUtilStructures.assertRead("/DEVICETYPE?deleted=true&statuses=APPROVED&mnemonic=A__", 5); ITUtilStructures.assertRead("/DEVICETYPE?deleted=true&statuses=CANCELLED&mnemonic=A__", 0); - ITUtilStructures.assertRead("/DEVICETYPE?deleted=true&statuses=REJECTED&mnemonic=A__", 10); + ITUtilStructures.assertRead("/DEVICETYPE?deleted=true&statuses=REJECTED&mnemonic=A__", 0); ITUtilStructures.assertRead("/DEVICETYPE?deleted=true&statuses=PENDING&statuses=APPROVED&mnemonic=A__", 15); ITUtilStructures.assertRead("/DEVICETYPE?parent=" + disciplineUuid.toString(), 0); @@ -1934,14 +1917,14 @@ class StructuresDeviceTypeIT { || value2 != null && (StringUtils.equals(value2, value0) || StringUtils.equals(value2, value1))); // pagination - ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&page=0&pageSize=100", 60); + ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&page=0&pageSize=100", 50); ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&page=1&pageSize=100", 0); - ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&page=0&pageSize=60", 60); - ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&page=1&pageSize=60", 0); - ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&page=0&pageSize=25", 25); - ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&page=1&pageSize=25", 25); - ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&page=2&pageSize=25", 10); - ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&page=3&pageSize=25", 0); + ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&page=0&pageSize=50", 50); + ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&page=1&pageSize=50", 0); + ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&page=0&pageSize=20", 20); + ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&page=1&pageSize=20", 20); + ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&page=2&pageSize=20", 10); + ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&page=3&pageSize=20", 0); // pagination ITUtilStructures.assertRead("/DEVICETYPE?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=0&pageSize=15", 15); @@ -1950,11 +1933,11 @@ class StructuresDeviceTypeIT { ITUtilStructures.assertRead("/DEVICETYPE?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=3&pageSize=15", 0); // order by, pagination - response = ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&orderBy=WHEN&isAsc=true&page=0&pageSize=25", 25); - response2 = ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&orderBy=WHEN&isAsc=false&page=2&pageSize=25", 10); + response = ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&orderBy=WHEN&isAsc=true&page=0&pageSize=20", 20); + response2 = ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&orderBy=WHEN&isAsc=false&page=2&pageSize=20", 10); assertEquals(response.getList().get(0).getWhen(), response2.getList().get(response2.getList().size()-1).getWhen()); - response = ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&orderBy=WHEN&isAsc=false&page=0&pageSize=25", 25); - response2 = ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&orderBy=WHEN&isAsc=true&page=2&pageSize=25", 10); + response = ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&orderBy=WHEN&isAsc=false&page=0&pageSize=20", 20); + response2 = ITUtilStructures.assertRead("/DEVICETYPE?mnemonic=A__&orderBy=WHEN&isAsc=true&page=2&pageSize=20", 10); assertEquals(response.getList().get(0).getWhen(), response2.getList().get(response2.getList().size()-1).getWhen()); // type and uuid diff --git a/src/test/java/org/openepics/names/docker/StructuresDisciplineIT.java b/src/test/java/org/openepics/names/docker/StructuresDisciplineIT.java index 1cf60339..32d9f350 100644 --- a/src/test/java/org/openepics/names/docker/StructuresDisciplineIT.java +++ b/src/test/java/org/openepics/names/docker/StructuresDisciplineIT.java @@ -1259,16 +1259,10 @@ class StructuresDisciplineIT { // 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) + // note + // exclude content (with latest) before latest + // exclude content (with latest) after latest (cancelled, rejected) + // keep content (without latest) (to have line of uuid) StructureElementCommandCreate structureElementCommandCreate = null; StructureElement createdStructureElement = null; @@ -1310,11 +1304,6 @@ class StructuresDisciplineIT { // 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) - ITUtilStructures.assertFind("/DISCIPLINE/" + uuid.toString()); ITUtilStructures.assertFind("/DISCIPLINE/" + uuid2.toString()); ITUtilStructures.assertFind("/DISCIPLINE/" + uuid3.toString()); @@ -1362,16 +1351,10 @@ class StructuresDisciplineIT { // 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) + // note + // exclude content (with latest) before latest + // exclude content (with latest) after latest (cancelled, rejected) + // keep content (without latest) (to have line of uuid) StructureElementCommandCreate structureElementCommandCreate = null; StructureElementCommandUpdate structureElementCommandUpdate = null; @@ -1486,19 +1469,14 @@ class StructuresDisciplineIT { // 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) - ITUtilStructures.assertFind("/DISCIPLINE/" + uuid.toString()); ITUtilStructures.assertFind("/DISCIPLINE/" + uuid2.toString()); ITUtilStructures.assertFind("/DISCIPLINE/" + uuid3.toString()); ITUtilStructures.assertFind("/DISCIPLINE/" + uuid4.toString()); ITUtilStructures.assertRead("/mnemonic/P9", 2); - ITUtilStructures.assertRead("/mnemonic/C9", 2); - ITUtilStructures.assertRead("/mnemonic/R9", 2); + ITUtilStructures.assertRead("/mnemonic/C9", 1); + ITUtilStructures.assertRead("/mnemonic/R9", 1); ITUtilStructures.assertRead("/mnemonic/A9", 1); ITUtilStructures.assertRead("/mnemonic/P9?statuses=APPROVED&deleted=false", 1); ITUtilStructures.assertRead("/mnemonic/C9?statuses=APPROVED&deleted=false", 1); @@ -1535,6 +1513,11 @@ class StructuresDisciplineIT { // create (and more) to read (with content) // querying for Status.APPROVED means latest approved // multiple commands at same time may have effects on order by (when) + // + // note + // exclude content (with latest) before latest + // exclude content (with latest) after latest (cancelled, rejected) + // keep content (without latest) (to have line of uuid) StructureElementCommandCreate[] structureElementCommandsCreate = null; StructureElementCommandUpdate[] structureElementCommandsUpdate = null; @@ -1699,11 +1682,11 @@ class StructuresDisciplineIT { // content for field in first and last items - always possible // first and last items - not always possible - ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__", 60); + ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__", 50); ITUtilStructures.assertRead("/DISCIPLINE?statuses=PENDING&mnemonic=A__", 15); ITUtilStructures.assertRead("/DISCIPLINE?statuses=APPROVED&mnemonic=A__", 25); ITUtilStructures.assertRead("/DISCIPLINE?statuses=CANCELLED&mnemonic=A__", 5); - ITUtilStructures.assertRead("/DISCIPLINE?statuses=REJECTED&mnemonic=A__", 15); + ITUtilStructures.assertRead("/DISCIPLINE?statuses=REJECTED&mnemonic=A__", 5); ITUtilStructures.assertRead("/DISCIPLINE?statuses=PENDING&statuses=APPROVED&mnemonic=A__", 40); ITUtilStructures.assertRead("/DISCIPLINE?deleted=false&mnemonic=A__", 35); @@ -1713,11 +1696,11 @@ class StructuresDisciplineIT { ITUtilStructures.assertRead("/DISCIPLINE?deleted=false&statuses=REJECTED&mnemonic=A__", 5); ITUtilStructures.assertRead("/DISCIPLINE?deleted=false&statuses=PENDING&statuses=APPROVED&mnemonic=A__", 25); - ITUtilStructures.assertRead("/DISCIPLINE?deleted=true&mnemonic=A__", 25); + ITUtilStructures.assertRead("/DISCIPLINE?deleted=true&mnemonic=A__", 15); ITUtilStructures.assertRead("/DISCIPLINE?deleted=true&statuses=PENDING&mnemonic=A__", 10); ITUtilStructures.assertRead("/DISCIPLINE?deleted=true&statuses=APPROVED&mnemonic=A__", 5); ITUtilStructures.assertRead("/DISCIPLINE?deleted=true&statuses=CANCELLED&mnemonic=A__", 0); - ITUtilStructures.assertRead("/DISCIPLINE?deleted=true&statuses=REJECTED&mnemonic=A__", 10); + ITUtilStructures.assertRead("/DISCIPLINE?deleted=true&statuses=REJECTED&mnemonic=A__", 0); ITUtilStructures.assertRead("/DISCIPLINE?deleted=true&statuses=PENDING&statuses=APPROVED&mnemonic=A__", 15); ITUtilStructures.assertRead("/DISCIPLINE?parent=" + uuid.toString(), 0); @@ -1806,14 +1789,14 @@ class StructuresDisciplineIT { || value2 != null && (StringUtils.equals(value2, value0) || StringUtils.equals(value2, value1))); // pagination - ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&page=0&pageSize=100", 60); + ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&page=0&pageSize=100", 50); ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&page=1&pageSize=100", 0); - ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&page=0&pageSize=60", 60); - ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&page=1&pageSize=60", 0); - ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&page=0&pageSize=25", 25); - ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&page=1&pageSize=25", 25); - ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&page=2&pageSize=25", 10); - ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&page=3&pageSize=25", 0); + ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&page=0&pageSize=50", 50); + ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&page=1&pageSize=50", 0); + ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&page=0&pageSize=20", 20); + ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&page=1&pageSize=20", 20); + ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&page=2&pageSize=20", 10); + ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&page=3&pageSize=20", 0); // pagination ITUtilStructures.assertRead("/DISCIPLINE?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=0&pageSize=15", 15); @@ -1822,11 +1805,11 @@ class StructuresDisciplineIT { ITUtilStructures.assertRead("/DISCIPLINE?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=3&pageSize=15", 0); // order by, pagination - response = ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&orderBy=WHEN&isAsc=true&page=0&pageSize=25", 25); - response2 = ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&orderBy=WHEN&isAsc=false&page=2&pageSize=25", 10); + response = ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&orderBy=WHEN&isAsc=true&page=0&pageSize=20", 20); + response2 = ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&orderBy=WHEN&isAsc=false&page=2&pageSize=20", 10); assertEquals(response.getList().get(0).getWhen(), response2.getList().get(response2.getList().size()-1).getWhen()); - response = ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&orderBy=WHEN&isAsc=false&page=0&pageSize=25", 25); - response2 = ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&orderBy=WHEN&isAsc=true&page=2&pageSize=25", 10); + response = ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&orderBy=WHEN&isAsc=false&page=0&pageSize=20", 20); + response2 = ITUtilStructures.assertRead("/DISCIPLINE?mnemonic=A__&orderBy=WHEN&isAsc=true&page=2&pageSize=20", 10); assertEquals(response.getList().get(0).getWhen(), response2.getList().get(response2.getList().size()-1).getWhen()); // type and uuid diff --git a/src/test/java/org/openepics/names/docker/StructuresSubsystemIT.java b/src/test/java/org/openepics/names/docker/StructuresSubsystemIT.java index 54cea670..0c8ee707 100644 --- a/src/test/java/org/openepics/names/docker/StructuresSubsystemIT.java +++ b/src/test/java/org/openepics/names/docker/StructuresSubsystemIT.java @@ -1454,16 +1454,10 @@ class StructuresSubsystemIT { // 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) + // note + // exclude content (with latest) before latest + // exclude content (with latest) after latest (cancelled, rejected) + // keep content (without latest) (to have line of uuid) StructureElementCommandCreate structureElementCommandCreate = null; StructureElement createdStructureElement = null; @@ -1505,11 +1499,6 @@ class StructuresSubsystemIT { // 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) - ITUtilStructures.assertFind("/SUBSYSTEM/" + uuid.toString()); ITUtilStructures.assertFind("/SUBSYSTEM/" + uuid2.toString()); ITUtilStructures.assertFind("/SUBSYSTEM/" + uuid3.toString()); @@ -1565,16 +1554,10 @@ class StructuresSubsystemIT { // 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) + // note + // exclude content (with latest) before latest + // exclude content (with latest) after latest (cancelled, rejected) + // keep content (without latest) (to have line of uuid) StructureElementCommandCreate structureElementCommandCreate = null; StructureElementCommandUpdate structureElementCommandUpdate = null; @@ -1689,19 +1672,14 @@ class StructuresSubsystemIT { // 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) - ITUtilStructures.assertFind("/SUBSYSTEM/" + uuid.toString()); ITUtilStructures.assertFind("/SUBSYSTEM/" + uuid2.toString()); ITUtilStructures.assertFind("/SUBSYSTEM/" + uuid3.toString()); ITUtilStructures.assertFind("/SUBSYSTEM/" + uuid4.toString()); ITUtilStructures.assertRead("/mnemonic/P9", 2); - ITUtilStructures.assertRead("/mnemonic/C9", 2); - ITUtilStructures.assertRead("/mnemonic/R9", 2); + ITUtilStructures.assertRead("/mnemonic/C9", 1); + ITUtilStructures.assertRead("/mnemonic/R9", 1); ITUtilStructures.assertRead("/mnemonic/A9", 1); ITUtilStructures.assertRead("/mnemonic/P9?statuses=APPROVED&deleted=false", 1); ITUtilStructures.assertRead("/mnemonic/C9?statuses=APPROVED&deleted=false", 1); @@ -1746,6 +1724,11 @@ class StructuresSubsystemIT { // create (and more) to read (with content) // querying for Status.APPROVED means latest approved // multiple commands at same time may have effects on order by (when) + // + // note + // exclude content (with latest) before latest + // exclude content (with latest) after latest (cancelled, rejected) + // keep content (without latest) (to have line of uuid) StructureElementCommandCreate[] structureElementCommandsCreate = null; StructureElementCommandUpdate[] structureElementCommandsUpdate = null; @@ -1909,11 +1892,11 @@ class StructuresSubsystemIT { // content for field in first and last items - always possible // first and last items - not always possible - ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__", 60); + ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__", 50); ITUtilStructures.assertRead("/SUBSYSTEM?statuses=PENDING&mnemonic=A__", 15); ITUtilStructures.assertRead("/SUBSYSTEM?statuses=APPROVED&mnemonic=A__", 25); ITUtilStructures.assertRead("/SUBSYSTEM?statuses=CANCELLED&mnemonic=A__", 5); - ITUtilStructures.assertRead("/SUBSYSTEM?statuses=REJECTED&mnemonic=A__", 15); + ITUtilStructures.assertRead("/SUBSYSTEM?statuses=REJECTED&mnemonic=A__", 5); ITUtilStructures.assertRead("/SUBSYSTEM?statuses=PENDING&statuses=APPROVED&mnemonic=A__", 40); ITUtilStructures.assertRead("/SUBSYSTEM?deleted=false&mnemonic=A__", 35); @@ -1923,11 +1906,11 @@ class StructuresSubsystemIT { ITUtilStructures.assertRead("/SUBSYSTEM?deleted=false&statuses=REJECTED&mnemonic=A__", 5); ITUtilStructures.assertRead("/SUBSYSTEM?deleted=false&statuses=PENDING&statuses=APPROVED&mnemonic=A__", 25); - ITUtilStructures.assertRead("/SUBSYSTEM?deleted=true&mnemonic=A__", 25); + ITUtilStructures.assertRead("/SUBSYSTEM?deleted=true&mnemonic=A__", 15); ITUtilStructures.assertRead("/SUBSYSTEM?deleted=true&statuses=PENDING&mnemonic=A__", 10); ITUtilStructures.assertRead("/SUBSYSTEM?deleted=true&statuses=APPROVED&mnemonic=A__", 5); ITUtilStructures.assertRead("/SUBSYSTEM?deleted=true&statuses=CANCELLED&mnemonic=A__", 0); - ITUtilStructures.assertRead("/SUBSYSTEM?deleted=true&statuses=REJECTED&mnemonic=A__", 10); + ITUtilStructures.assertRead("/SUBSYSTEM?deleted=true&statuses=REJECTED&mnemonic=A__", 0); ITUtilStructures.assertRead("/SUBSYSTEM?deleted=true&statuses=PENDING&statuses=APPROVED&mnemonic=A__", 15); ITUtilStructures.assertRead("/SUBSYSTEM?parent=" + systemGroupUuid.toString(), 0); @@ -2018,14 +2001,14 @@ class StructuresSubsystemIT { || value2 != null && (StringUtils.equals(value2, value0) || StringUtils.equals(value2, value1))); // pagination - ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&page=0&pageSize=100", 60); + ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&page=0&pageSize=100", 50); ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&page=1&pageSize=100", 0); - ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&page=0&pageSize=60", 60); - ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&page=1&pageSize=60", 0); - ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&page=0&pageSize=25", 25); - ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&page=1&pageSize=25", 25); - ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&page=2&pageSize=25", 10); - ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&page=3&pageSize=25", 0); + ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&page=0&pageSize=50", 50); + ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&page=1&pageSize=50", 0); + ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&page=0&pageSize=20", 20); + ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&page=1&pageSize=20", 20); + ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&page=2&pageSize=20", 10); + ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&page=3&pageSize=20", 0); // pagination ITUtilStructures.assertRead("/SUBSYSTEM?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=0&pageSize=15", 15); @@ -2034,11 +2017,11 @@ class StructuresSubsystemIT { ITUtilStructures.assertRead("/SUBSYSTEM?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=3&pageSize=15", 0); // order by, pagination - response = ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&orderBy=WHEN&isAsc=true&page=0&pageSize=25", 25); - response2 = ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&orderBy=WHEN&isAsc=false&page=2&pageSize=25", 10); + response = ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&orderBy=WHEN&isAsc=true&page=0&pageSize=20", 20); + response2 = ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&orderBy=WHEN&isAsc=false&page=2&pageSize=20", 10); assertEquals(response.getList().get(0).getWhen(), response2.getList().get(response2.getList().size()-1).getWhen()); - response = ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&orderBy=WHEN&isAsc=false&page=0&pageSize=25", 25); - response2 = ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&orderBy=WHEN&isAsc=true&page=2&pageSize=25", 10); + response = ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&orderBy=WHEN&isAsc=false&page=0&pageSize=20", 20); + response2 = ITUtilStructures.assertRead("/SUBSYSTEM?mnemonic=A__&orderBy=WHEN&isAsc=true&page=2&pageSize=20", 10); assertEquals(response.getList().get(0).getWhen(), response2.getList().get(response2.getList().size()-1).getWhen()); // type and uuid diff --git a/src/test/java/org/openepics/names/docker/StructuresSystemGroupIT.java b/src/test/java/org/openepics/names/docker/StructuresSystemGroupIT.java index e612c07a..d9f7a96d 100644 --- a/src/test/java/org/openepics/names/docker/StructuresSystemGroupIT.java +++ b/src/test/java/org/openepics/names/docker/StructuresSystemGroupIT.java @@ -1322,15 +1322,9 @@ class StructuresSystemGroupIT { // 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) + // exclude content (with latest) before latest + // exclude content (with latest) after latest (cancelled, rejected) + // keep content (without latest) (to have line of uuid) StructureElementCommandCreate structureElementCommandCreate = null; StructureElement createdStructureElement = null; @@ -1372,11 +1366,6 @@ class StructuresSystemGroupIT { // 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) - ITUtilStructures.assertFind("/SYSTEMGROUP/" + uuid.toString()); ITUtilStructures.assertFind("/SYSTEMGROUP/" + uuid2.toString()); ITUtilStructures.assertFind("/SYSTEMGROUP/" + uuid3.toString()); @@ -1425,15 +1414,9 @@ class StructuresSystemGroupIT { // 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) + // exclude content (with latest) before latest + // exclude content (with latest) after latest (cancelled, rejected) + // keep content (without latest) (to have line of uuid) StructureElementCommandCreate structureElementCommandCreate = null; StructureElementCommandUpdate structureElementCommandUpdate = null; @@ -1548,19 +1531,14 @@ class StructuresSystemGroupIT { // 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) - ITUtilStructures.assertFind("/SYSTEMGROUP/" + uuid.toString()); ITUtilStructures.assertFind("/SYSTEMGROUP/" + uuid2.toString()); ITUtilStructures.assertFind("/SYSTEMGROUP/" + uuid3.toString()); ITUtilStructures.assertFind("/SYSTEMGROUP/" + uuid4.toString()); ITUtilStructures.assertRead("/mnemonic/P9", 2); - ITUtilStructures.assertRead("/mnemonic/C9", 2); - ITUtilStructures.assertRead("/mnemonic/R9", 2); + ITUtilStructures.assertRead("/mnemonic/C9", 1); + ITUtilStructures.assertRead("/mnemonic/R9", 1); ITUtilStructures.assertRead("/mnemonic/A9", 1); ITUtilStructures.assertRead("/mnemonic/P9?statuses=APPROVED&deleted=false", 1); ITUtilStructures.assertRead("/mnemonic/C9?statuses=APPROVED&deleted=false", 1); @@ -1597,6 +1575,11 @@ class StructuresSystemGroupIT { // create (and more) to read (with content) // querying for Status.APPROVED means latest approved // multiple commands at same time may have effects on order by (when) + // + // note + // exclude content (with latest) before latest + // exclude content (with latest) after latest (cancelled, rejected) + // keep content (without latest) (to have line of uuid) StructureElementCommandCreate[] structureElementCommandsCreate = null; StructureElementCommandUpdate[] structureElementCommandsUpdate = null; @@ -1761,11 +1744,11 @@ class StructuresSystemGroupIT { // content for field in first and last items - always possible // first and last items - not always possible - ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__", 60); + ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__", 50); ITUtilStructures.assertRead("/SYSTEMGROUP?statuses=PENDING&mnemonic=A__", 15); ITUtilStructures.assertRead("/SYSTEMGROUP?statuses=APPROVED&mnemonic=A__", 25); ITUtilStructures.assertRead("/SYSTEMGROUP?statuses=CANCELLED&mnemonic=A__", 5); - ITUtilStructures.assertRead("/SYSTEMGROUP?statuses=REJECTED&mnemonic=A__", 15); + ITUtilStructures.assertRead("/SYSTEMGROUP?statuses=REJECTED&mnemonic=A__", 5); ITUtilStructures.assertRead("/SYSTEMGROUP?statuses=PENDING&statuses=APPROVED&mnemonic=A__", 40); ITUtilStructures.assertRead("/SYSTEMGROUP?deleted=false&mnemonic=A__", 35); @@ -1775,11 +1758,11 @@ class StructuresSystemGroupIT { ITUtilStructures.assertRead("/SYSTEMGROUP?deleted=false&statuses=REJECTED&mnemonic=A__", 5); ITUtilStructures.assertRead("/SYSTEMGROUP?deleted=false&statuses=PENDING&statuses=APPROVED&mnemonic=A__", 25); - ITUtilStructures.assertRead("/SYSTEMGROUP?deleted=true&mnemonic=A__", 25); + ITUtilStructures.assertRead("/SYSTEMGROUP?deleted=true&mnemonic=A__", 15); ITUtilStructures.assertRead("/SYSTEMGROUP?deleted=true&statuses=PENDING&mnemonic=A__", 10); ITUtilStructures.assertRead("/SYSTEMGROUP?deleted=true&statuses=APPROVED&mnemonic=A__", 5); ITUtilStructures.assertRead("/SYSTEMGROUP?deleted=true&statuses=CANCELLED&mnemonic=A__", 0); - ITUtilStructures.assertRead("/SYSTEMGROUP?deleted=true&statuses=REJECTED&mnemonic=A__", 10); + ITUtilStructures.assertRead("/SYSTEMGROUP?deleted=true&statuses=REJECTED&mnemonic=A__", 0); ITUtilStructures.assertRead("/SYSTEMGROUP?deleted=true&statuses=PENDING&statuses=APPROVED&mnemonic=A__", 15); ITUtilStructures.assertRead("/SYSTEMGROUP?parent=" + uuid.toString(), 0); @@ -1869,14 +1852,14 @@ class StructuresSystemGroupIT { || value2 != null && (StringUtils.equals(value2, value0) || StringUtils.equals(value2, value1))); // pagination - ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&page=0&pageSize=100", 60); + ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&page=0&pageSize=100", 50); ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&page=1&pageSize=100", 0); - ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&page=0&pageSize=60", 60); - ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&page=1&pageSize=60", 0); - ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&page=0&pageSize=25", 25); - ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&page=1&pageSize=25", 25); - ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&page=2&pageSize=25", 10); - ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&page=3&pageSize=25", 0); + ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&page=0&pageSize=50", 50); + ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&page=1&pageSize=50", 0); + ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&page=0&pageSize=20", 20); + ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&page=1&pageSize=20", 20); + ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&page=2&pageSize=20", 10); + ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&page=3&pageSize=20", 0); // pagination ITUtilStructures.assertRead("/SYSTEMGROUP?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=0&pageSize=15", 15); @@ -1885,11 +1868,11 @@ class StructuresSystemGroupIT { ITUtilStructures.assertRead("/SYSTEMGROUP?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=3&pageSize=15", 0); // order by, pagination - response = ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&orderBy=WHEN&isAsc=true&page=0&pageSize=25", 25); - response2 = ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&orderBy=WHEN&isAsc=false&page=2&pageSize=25", 10); + response = ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&orderBy=WHEN&isAsc=true&page=0&pageSize=20", 20); + response2 = ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&orderBy=WHEN&isAsc=false&page=2&pageSize=20", 10); assertEquals(response.getList().get(0).getWhen(), response2.getList().get(response2.getList().size()-1).getWhen()); - response = ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&orderBy=WHEN&isAsc=false&page=0&pageSize=25", 25); - response2 = ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&orderBy=WHEN&isAsc=true&page=2&pageSize=25", 10); + response = ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&orderBy=WHEN&isAsc=false&page=0&pageSize=20", 20); + response2 = ITUtilStructures.assertRead("/SYSTEMGROUP?mnemonic=A__&orderBy=WHEN&isAsc=true&page=2&pageSize=20", 10); assertEquals(response.getList().get(0).getWhen(), response2.getList().get(response2.getList().size()-1).getWhen()); // type and uuid diff --git a/src/test/java/org/openepics/names/docker/StructuresSystemIT.java b/src/test/java/org/openepics/names/docker/StructuresSystemIT.java index 356da033..3f5bd00c 100644 --- a/src/test/java/org/openepics/names/docker/StructuresSystemIT.java +++ b/src/test/java/org/openepics/names/docker/StructuresSystemIT.java @@ -1359,16 +1359,10 @@ class StructuresSystemIT { // 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) + // note + // exclude content (with latest) before latest + // exclude content (with latest) after latest (cancelled, rejected) + // keep content (without latest) (to have line of uuid) StructureElementCommandCreate structureElementCommandCreate = null; StructureElement createdStructureElement = null; @@ -1410,11 +1404,6 @@ class StructuresSystemIT { // 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) - ITUtilStructures.assertFind("/SYSTEM/" + uuid.toString()); ITUtilStructures.assertFind("/SYSTEM/" + uuid2.toString()); ITUtilStructures.assertFind("/SYSTEM/" + uuid3.toString()); @@ -1466,16 +1455,10 @@ class StructuresSystemIT { // 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) + // note + // exclude content (with latest) before latest + // exclude content (with latest) after latest (cancelled, rejected) + // keep content (without latest) (to have line of uuid) StructureElementCommandCreate structureElementCommandCreate = null; StructureElementCommandUpdate structureElementCommandUpdate = null; @@ -1590,19 +1573,14 @@ class StructuresSystemIT { // 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) - ITUtilStructures.assertFind("/SYSTEM/" + uuid.toString()); ITUtilStructures.assertFind("/SYSTEM/" + uuid2.toString()); ITUtilStructures.assertFind("/SYSTEM/" + uuid3.toString()); ITUtilStructures.assertFind("/SYSTEM/" + uuid4.toString()); ITUtilStructures.assertRead("/mnemonic/P9", 2); - ITUtilStructures.assertRead("/mnemonic/C9", 2); - ITUtilStructures.assertRead("/mnemonic/R9", 2); + ITUtilStructures.assertRead("/mnemonic/C9", 1); + ITUtilStructures.assertRead("/mnemonic/R9", 1); ITUtilStructures.assertRead("/mnemonic/A9", 1); ITUtilStructures.assertRead("/mnemonic/P9?statuses=APPROVED&deleted=false", 1); ITUtilStructures.assertRead("/mnemonic/C9?statuses=APPROVED&deleted=false", 1); @@ -1643,6 +1621,11 @@ class StructuresSystemIT { // create (and more) to read (with content) // querying for Status.APPROVED means latest approved // multiple commands at same time may have effects on order by (when) + // + // note + // exclude content (with latest) before latest + // exclude content (with latest) after latest (cancelled, rejected) + // keep content (without latest) (to have line of uuid) StructureElementCommandCreate[] structureElementCommandsCreate = null; StructureElementCommandUpdate[] structureElementCommandsUpdate = null; @@ -1806,11 +1789,11 @@ class StructuresSystemIT { // content for field in first and last items - always possible // first and last items - not always possible - ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__", 60); + ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__", 50); ITUtilStructures.assertRead("/SYSTEM?statuses=PENDING&mnemonic=A__", 15); ITUtilStructures.assertRead("/SYSTEM?statuses=APPROVED&mnemonic=A__", 25); ITUtilStructures.assertRead("/SYSTEM?statuses=CANCELLED&mnemonic=A__", 5); - ITUtilStructures.assertRead("/SYSTEM?statuses=REJECTED&mnemonic=A__", 15); + ITUtilStructures.assertRead("/SYSTEM?statuses=REJECTED&mnemonic=A__", 5); ITUtilStructures.assertRead("/SYSTEM?statuses=PENDING&statuses=APPROVED&mnemonic=A__", 40); ITUtilStructures.assertRead("/SYSTEM?deleted=false&mnemonic=A__", 35); @@ -1820,11 +1803,11 @@ class StructuresSystemIT { ITUtilStructures.assertRead("/SYSTEM?deleted=false&statuses=REJECTED&mnemonic=A__", 5); ITUtilStructures.assertRead("/SYSTEM?deleted=false&statuses=PENDING&statuses=APPROVED&mnemonic=A__", 25); - ITUtilStructures.assertRead("/SYSTEM?deleted=true&mnemonic=A__", 25); + ITUtilStructures.assertRead("/SYSTEM?deleted=true&mnemonic=A__", 15); ITUtilStructures.assertRead("/SYSTEM?deleted=true&statuses=PENDING&mnemonic=A__", 10); ITUtilStructures.assertRead("/SYSTEM?deleted=true&statuses=APPROVED&mnemonic=A__", 5); ITUtilStructures.assertRead("/SYSTEM?deleted=true&statuses=CANCELLED&mnemonic=A__", 0); - ITUtilStructures.assertRead("/SYSTEM?deleted=true&statuses=REJECTED&mnemonic=A__", 10); + ITUtilStructures.assertRead("/SYSTEM?deleted=true&statuses=REJECTED&mnemonic=A__", 0); ITUtilStructures.assertRead("/SYSTEM?deleted=true&statuses=PENDING&statuses=APPROVED&mnemonic=A__", 15); ITUtilStructures.assertRead("/SYSTEM?parent=" + systemGroupUuid.toString(), 45, -1); @@ -1838,7 +1821,7 @@ class StructuresSystemIT { ITUtilStructures.assertRead("/SYSTEM?name=na%", 45, -1); ITUtilStructures.assertRead("/SYSTEM?name=name", 45, -1); - ITUtilStructures.assertRead("/SYSTEM?mnemonicPath=A__", 45); + ITUtilStructures.assertRead("/SYSTEM?mnemonicPath=A__", 35); ITUtilStructures.assertRead("/SYSTEM?description=desc", 0); ITUtilStructures.assertRead("/SYSTEM?description=desc%", 35, -1); @@ -1914,14 +1897,14 @@ class StructuresSystemIT { || value2 != null && (StringUtils.equals(value2, value0) || StringUtils.equals(value2, value1))); // pagination - ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&page=0&pageSize=100", 60); + ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&page=0&pageSize=100", 50); ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&page=1&pageSize=100", 0); - ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&page=0&pageSize=60", 60); - ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&page=1&pageSize=60", 0); - ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&page=0&pageSize=25", 25); - ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&page=1&pageSize=25", 25); - ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&page=2&pageSize=25", 10); - ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&page=3&pageSize=25", 0); + ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&page=0&pageSize=50", 50); + ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&page=1&pageSize=50", 0); + ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&page=0&pageSize=20", 20); + ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&page=1&pageSize=20", 20); + ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&page=2&pageSize=20", 10); + ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&page=3&pageSize=20", 0); // pagination ITUtilStructures.assertRead("/SYSTEM?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=0&pageSize=15", 15); @@ -1930,11 +1913,11 @@ class StructuresSystemIT { ITUtilStructures.assertRead("/SYSTEM?statuses=PENDING&statuses=APPROVED&mnemonic=A__&page=3&pageSize=15", 0); // order by, pagination - response = ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&orderBy=WHEN&isAsc=true&page=0&pageSize=25", 25); - response2 = ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&orderBy=WHEN&isAsc=false&page=2&pageSize=25", 10); + response = ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&orderBy=WHEN&isAsc=true&page=0&pageSize=20", 20); + response2 = ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&orderBy=WHEN&isAsc=false&page=2&pageSize=20", 10); assertEquals(response.getList().get(0).getWhen(), response2.getList().get(response2.getList().size()-1).getWhen()); - response = ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&orderBy=WHEN&isAsc=false&page=0&pageSize=25", 25); - response2 = ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&orderBy=WHEN&isAsc=true&page=2&pageSize=25", 10); + response = ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&orderBy=WHEN&isAsc=false&page=0&pageSize=20", 20); + response2 = ITUtilStructures.assertRead("/SYSTEM?mnemonic=A__&orderBy=WHEN&isAsc=true&page=2&pageSize=20", 10); assertEquals(response.getList().get(0).getWhen(), response2.getList().get(response2.getList().size()-1).getWhen()); // type and uuid -- GitLab