From 39d8377a09f7bbe63b147cff563acbe48082340d Mon Sep 17 00:00:00 2001
From: Lars Johansson <lars.johansson@ess.eu>
Date: Thu, 15 Jun 2023 15:45:20 +0200
Subject: [PATCH] Update history handling for structures and adjust validation
 for reading names

Return one or two structure elements for history of structures.
Add missing parameter in validation of input parameters for reading names.
Update unit and integration tests.
---
 .../rest/controller/NamesController.java      |  2 +-
 .../names/service/StructuresService.java      |  1 -
 .../names/util/StructureElementUtil.java      | 81 +++++++------------
 .../names/util/ValidateNameElementUtil.java   |  3 +-
 .../names/docker/StructuresDeviceGroupIT.java | 34 ++++----
 .../names/docker/StructuresDeviceTypeIT.java  | 36 ++++-----
 .../names/docker/StructuresDisciplineIT.java  | 32 ++++----
 .../names/docker/StructuresSubsystemIT.java   | 36 ++++-----
 .../names/docker/StructuresSystemGroupIT.java | 32 ++++----
 .../names/docker/StructuresSystemIT.java      | 34 ++++----
 .../names/util/ValidateUtilTest.java          |  2 +-
 11 files changed, 124 insertions(+), 169 deletions(-)

diff --git a/src/main/java/org/openepics/names/rest/controller/NamesController.java b/src/main/java/org/openepics/names/rest/controller/NamesController.java
index 784f2c98..61f92e14 100644
--- a/src/main/java/org/openepics/names/rest/controller/NamesController.java
+++ b/src/main/java/org/openepics/names/rest/controller/NamesController.java
@@ -160,7 +160,7 @@ public class NamesController implements INames {
         try {
             ValidateNameElementUtil.validateNamesInputRead(
                     deleted,
-                    uuid, name, nameEquivalence, systemStructure, deviceStructure, description,
+                    uuid, name, nameEquivalence, systemStructure, deviceStructure, index, description,
                     null,
                     orderBy, isAsc,
                     page, pageSize);
diff --git a/src/main/java/org/openepics/names/service/StructuresService.java b/src/main/java/org/openepics/names/service/StructuresService.java
index 79eccbc6..fb94f927 100644
--- a/src/main/java/org/openepics/names/service/StructuresService.java
+++ b/src/main/java/org/openepics/names/service/StructuresService.java
@@ -514,7 +514,6 @@ public class StructuresService {
 
             // uuid is in max one structure
             response = new ResponsePageStructureElements(structureElements, Long.valueOf(structureElements.size()), structureElements.size(), offset, limit);
-
         }
 
         return response;
diff --git a/src/main/java/org/openepics/names/util/StructureElementUtil.java b/src/main/java/org/openepics/names/util/StructureElementUtil.java
index 0fc03b6d..e040e5fd 100644
--- a/src/main/java/org/openepics/names/util/StructureElementUtil.java
+++ b/src/main/java/org/openepics/names/util/StructureElementUtil.java
@@ -47,9 +47,6 @@ import com.google.common.collect.Lists;
  */
 public class StructureElementUtil {
 
-    // used in handling structure attributes - requested, processed
-    private static final long THOUSAND_MILLISECONDS = 1000;
-
     /**
      * This class is not to be instantiated.
      */
@@ -64,24 +61,21 @@ public class StructureElementUtil {
      * @param holderStructure holder of system and device structure content
      * @param structureChoice whether to consider content from structure perspective or history perspective.
      *                        Structure perspective gives one StructureElement object (processed).
-     *                        History perspective gives two StructureElement objects (requested, processed).
+     *                        History perspective gives one or two StructureElement objects (requested, processed).
      *                        If choice not given then default as structure perspective (processed).
      * @return list of structure elements
      */
     public static List<StructureElement> getStructureElementsForSystemGroups(List<SystemGroup> systemGroups, HolderSystemDeviceStructure holderStructure, StructureChoice structureChoice) {
         List<StructureElement> structureElements = Lists.newArrayList();
         for (SystemGroup systemGroup : systemGroups) {
-            // one or two return elements
-            //     processed != null and processed != requested (>  1s difference) --> two entries (requested, processed)
-            //     processed != null and processed == requested (<= 1s difference) --> one entry   (processed initial)
-            //     processed == null                                               --> one entry   (requested)
+            // one or two return elements for history
+            //     processed != null --> two entries (requested, processed)
+            //     processed == null --> one entry   (requested)
 
             if (StructureChoice.HISTORY.equals(structureChoice)) {
-                if (systemGroup.getProcessed() != null && ((systemGroup.getProcessed().getTime() - systemGroup.getRequested().getTime()) > THOUSAND_MILLISECONDS)) {
+                if (systemGroup.getProcessed() != null) {
                     structureElements.add(getStructureElementRequested(systemGroup));
                     structureElements.add(getStructureElementProcessed(systemGroup, holderStructure, structureChoice));
-                } else if (systemGroup.getProcessed() != null && ((systemGroup.getProcessed().getTime() - systemGroup.getRequested().getTime()) <= THOUSAND_MILLISECONDS)) {
-                    structureElements.add(getStructureElementProcessed(systemGroup, holderStructure, structureChoice));
                 } else {
                     structureElements.add(getStructureElementRequested(systemGroup));
                 }
@@ -102,24 +96,21 @@ public class StructureElementUtil {
      * @param holderStructure holder of system and device structure content
      * @param structureChoice whether to consider content from structure perspective or history perspective.
      *                        Structure perspective gives one StructureElement object (processed).
-     *                        History perspective gives two StructureElement objects (requested, processed).
+     *                        History perspective gives one or two StructureElement objects (requested, processed).
      *                        If choice not given then default as structure perspective (processed).
      * @return list of structure elements
      */
     public static List<StructureElement> getStructureElementsForSystems(List<System> systems, HolderSystemDeviceStructure holderStructure, StructureChoice structureChoice) {
         List<StructureElement> structureElements = Lists.newArrayList();
         for (System system : systems) {
-            // one or two return elements
-            //     processed != null and processed != requested (>  1s difference) --> two entries (requested, processed)
-            //     processed != null and processed == requested (<= 1s difference) --> one entry   (processed initial)
-            //     processed == null                                               --> one entry   (requested)
+            // one or two return elements for history
+            //     processed != null --> two entries (requested, processed)
+            //     processed == null --> one entry   (requested)
 
             if (StructureChoice.HISTORY.equals(structureChoice)) {
-                if (system.getProcessed() != null && ((system.getProcessed().getTime() - system.getRequested().getTime()) > THOUSAND_MILLISECONDS)) {
+                if (system.getProcessed() != null) {
                     structureElements.add(getStructureElementRequested(system));
                     structureElements.add(getStructureElementProcessed(system, holderStructure, structureChoice));
-                } else if (system.getProcessed() != null && ((system.getProcessed().getTime() - system.getRequested().getTime()) <= THOUSAND_MILLISECONDS)) {
-                    structureElements.add(getStructureElementProcessed(system, holderStructure, structureChoice));
                 } else {
                     structureElements.add(getStructureElementRequested(system));
                 }
@@ -140,24 +131,21 @@ public class StructureElementUtil {
      * @param holderStructure holder of system and device structure content
      * @param structureChoice whether to consider content from structure perspective or history perspective.
      *                        Structure perspective gives one StructureElement object (processed).
-     *                        History perspective gives two StructureElement objects (requested, processed).
+     *                        History perspective gives one or two StructureElement objects (requested, processed).
      *                        If choice not given then default as structure perspective (processed).
      * @return list of structure elements
      */
     public static List<StructureElement> getStructureElementsForSubsystems(List<Subsystem> subsystems, HolderSystemDeviceStructure holderStructure, StructureChoice structureChoice) {
         List<StructureElement> structureElements = Lists.newArrayList();
         for (Subsystem subsystem : subsystems) {
-            // one or two return elements
-            //     processed != null and processed != requested (>  1s difference) --> two entries (requested, processed)
-            //     processed != null and processed == requested (<= 1s difference) --> one entry   (processed initial)
-            //     processed == null                                               --> one entry   (requested)
+            // one or two return elements for history
+            //     processed != null --> two entries (requested, processed)
+            //     processed == null --> one entry   (requested)
 
             if (StructureChoice.HISTORY.equals(structureChoice)) {
-                if (subsystem.getProcessed() != null && ((subsystem.getProcessed().getTime() - subsystem.getRequested().getTime()) > THOUSAND_MILLISECONDS)) {
+                if (subsystem.getProcessed() != null) {
                     structureElements.add(getStructureElementRequested(subsystem));
                     structureElements.add(getStructureElementProcessed(subsystem, holderStructure, structureChoice));
-                } else if (subsystem.getProcessed() != null && ((subsystem.getProcessed().getTime() - subsystem.getRequested().getTime()) <= THOUSAND_MILLISECONDS)) {
-                    structureElements.add(getStructureElementProcessed(subsystem, holderStructure, structureChoice));
                 } else {
                     structureElements.add(getStructureElementRequested(subsystem));
                 }
@@ -179,24 +167,21 @@ public class StructureElementUtil {
      * @param holderStructure holder of system and device structure content
      * @param structureChoice whether to consider content from structure perspective or history perspective.
      *                        Structure perspective gives one StructureElement object (processed).
-     *                        History perspective gives two StructureElement objects (requested, processed).
+     *                        History perspective gives one or two StructureElement objects (requested, processed).
      *                        If choice not given then default as structure perspective (processed).
      * @return list of structure elements
      */
     public static List<StructureElement> getStructureElementsForDisciplines(List<Discipline> disciplines, HolderSystemDeviceStructure holderStructure, StructureChoice structureChoice) {
         List<StructureElement> structureElements = Lists.newArrayList();
         for (Discipline discipline : disciplines) {
-            // one or two return elements
-            //     processed != null and processed != requested (>  1s difference) --> two entries (requested, processed)
-            //     processed != null and processed == requested (<= 1s difference) --> one entry   (processed initial)
-            //     processed == null                                               --> one entry   (requested)
+            // one or two return elements for history
+            //     processed != null --> two entries (requested, processed)
+            //     processed == null --> one entry   (requested)
 
             if (StructureChoice.HISTORY.equals(structureChoice)) {
-                if (discipline.getProcessed() != null && ((discipline.getProcessed().getTime() - discipline.getRequested().getTime()) > THOUSAND_MILLISECONDS)) {
+                if (discipline.getProcessed() != null) {
                     structureElements.add(getStructureElementRequested(discipline));
                     structureElements.add(getStructureElementProcessed(discipline, holderStructure, structureChoice));
-                } else if (discipline.getProcessed() != null && ((discipline.getProcessed().getTime() - discipline.getRequested().getTime()) <= THOUSAND_MILLISECONDS)) {
-                    structureElements.add(getStructureElementProcessed(discipline, holderStructure, structureChoice));
                 } else {
                     structureElements.add(getStructureElementRequested(discipline));
                 }
@@ -217,24 +202,21 @@ public class StructureElementUtil {
      * @param holderStructure holder of system and device structure content
      * @param structureChoice whether to consider content from structure perspective or history perspective.
      *                        Structure perspective gives one StructureElement object (processed).
-     *                        History perspective gives two StructureElement objects (requested, processed).
+     *                        History perspective gives one or two StructureElement objects (requested, processed).
      *                        If choice not given then default as structure perspective (processed).
      * @return list of structure elements
      */
     public static List<StructureElement> getStructureElementsForDeviceGroups(List<DeviceGroup> deviceGroups, HolderSystemDeviceStructure holderStructure, StructureChoice structureChoice) {
         List<StructureElement> structureElements = Lists.newArrayList();
         for (DeviceGroup deviceGroup : deviceGroups) {
-            // one or two return elements
-            //     processed != null and processed != requested (>  1s difference) --> two entries (requested, processed)
-            //     processed != null and processed == requested (<= 1s difference) --> one entry   (processed initial)
-            //     processed == null                                               --> one entry   (requested)
+            // one or two return elements for history
+            //     processed != null --> two entries (requested, processed)
+            //     processed == null --> one entry   (requested)
 
             if (StructureChoice.HISTORY.equals(structureChoice)) {
-                if (deviceGroup.getProcessed() != null && ((deviceGroup.getProcessed().getTime() - deviceGroup.getRequested().getTime()) > THOUSAND_MILLISECONDS)) {
+                if (deviceGroup.getProcessed() != null) {
                     structureElements.add(getStructureElementRequested(deviceGroup));
                     structureElements.add(getStructureElementProcessed(deviceGroup, holderStructure, structureChoice));
-                } else if (deviceGroup.getProcessed() != null && ((deviceGroup.getProcessed().getTime() - deviceGroup.getRequested().getTime()) <= THOUSAND_MILLISECONDS)) {
-                    structureElements.add(getStructureElementProcessed(deviceGroup, holderStructure, structureChoice));
                 } else {
                     structureElements.add(getStructureElementRequested(deviceGroup));
                 }
@@ -255,24 +237,21 @@ public class StructureElementUtil {
      * @param holderStructure holder of system and device structure content
      * @param structureChoice whether to consider content from structure perspective or history perspective.
      *                        Structure perspective gives one StructureElement object (processed).
-     *                        History perspective gives two StructureElement objects (requested, processed).
+     *                        History perspective gives one or two StructureElement objects (requested, processed).
      *                        If choice not given then default as structure perspective (processed).
      * @return list of structure elements
      */
     public static List<StructureElement> getStructureElementsForDeviceTypes(List<DeviceType> deviceTypes, HolderSystemDeviceStructure holderStructure, StructureChoice structureChoice) {
         List<StructureElement> structureElements = Lists.newArrayList();
         for (DeviceType deviceType : deviceTypes) {
-            // one or two return elements
-            //     processed != null and processed != requested (>  1s difference) --> two entries (requested, processed)
-            //     processed != null and processed == requested (<= 1s difference) --> one entry   (processed initial)
-            //     processed == null                                               --> one entry   (requested)
+            // one or two return elements for history
+            //     processed != null --> two entries (requested, processed)
+            //     processed == null --> one entry   (requested)
 
             if (StructureChoice.HISTORY.equals(structureChoice)) {
-                if (deviceType.getProcessed() != null && ((deviceType.getProcessed().getTime() - deviceType.getRequested().getTime()) > THOUSAND_MILLISECONDS)) {
+                if (deviceType.getProcessed() != null) {
                     structureElements.add(getStructureElementRequested(deviceType));
                     structureElements.add(getStructureElementProcessed(deviceType, holderStructure, structureChoice));
-                } else if (deviceType.getProcessed() != null && ((deviceType.getProcessed().getTime() - deviceType.getRequested().getTime()) <= THOUSAND_MILLISECONDS)) {
-                    structureElements.add(getStructureElementProcessed(deviceType, holderStructure, structureChoice));
                 } else {
                     structureElements.add(getStructureElementRequested(deviceType));
                 }
diff --git a/src/main/java/org/openepics/names/util/ValidateNameElementUtil.java b/src/main/java/org/openepics/names/util/ValidateNameElementUtil.java
index 4d2362c2..aa37d8ba 100644
--- a/src/main/java/org/openepics/names/util/ValidateNameElementUtil.java
+++ b/src/main/java/org/openepics/names/util/ValidateNameElementUtil.java
@@ -70,6 +70,7 @@ public class ValidateNameElementUtil {
      * @param nameEquivalence name equivalence
      * @param systemStructure system structure mnemonic
      * @param deviceStructure device structure mnemonic
+     * @param index index
      * @param description description
      * @param includeHistory include history
      * @param orderBy order by
@@ -78,7 +79,7 @@ public class ValidateNameElementUtil {
      * @param limit limit
      */
     public static void validateNamesInputRead(Boolean deleted,
-            String uuid, String name, String nameEquivalence, String systemStructure, String deviceStructure, String description,
+            String uuid, String name, String nameEquivalence, String systemStructure, String deviceStructure, String index, String description,
             Boolean includeHistory, FieldName orderBy, Boolean isAsc, Integer offset, Integer limit) {
 
         // validate input
diff --git a/src/test/java/org/openepics/names/docker/StructuresDeviceGroupIT.java b/src/test/java/org/openepics/names/docker/StructuresDeviceGroupIT.java
index ee720aaf..a2b9489b 100644
--- a/src/test/java/org/openepics/names/docker/StructuresDeviceGroupIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresDeviceGroupIT.java
@@ -1115,7 +1115,7 @@ class StructuresDeviceGroupIT {
             ITUtilStructureElement.assertRead("/mnemonicPath/Rsha",     0);
             ITUtilStructureElement.assertRead("/mnemonicPath/Di-Rsha",  0);
 
-            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1);
 
             ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di", Boolean.FALSE);
 
@@ -1143,7 +1143,7 @@ class StructuresDeviceGroupIT {
             ITUtilStructureElement.assertRead("/mnemonicPath/Rsha",    0);
             ITUtilStructureElement.assertRead("/mnemonicPath/Di-Rsha", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + approvedStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + approvedStructureElement.getUuid().toString(), 2);
 
             ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di", Boolean.FALSE);
         } catch (Exception e) {
@@ -1199,7 +1199,7 @@ class StructuresDeviceGroupIT {
             ITUtilStructureElement.assertRead("/mnemonicPath/Rshc",    0);
             ITUtilStructureElement.assertRead("/mnemonicPath/Di-Rshc", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1);
 
             ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di", Boolean.FALSE);
 
@@ -1227,7 +1227,7 @@ class StructuresDeviceGroupIT {
             ITUtilStructureElement.assertRead("/mnemonicPath/Rshc",    0);
             ITUtilStructureElement.assertRead("/mnemonicPath/Di-Rshc", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + cancelledStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + cancelledStructureElement.getUuid().toString(), 2);
 
             ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di", Boolean.FALSE);
         } catch (Exception e) {
@@ -1283,7 +1283,7 @@ class StructuresDeviceGroupIT {
             ITUtilStructureElement.assertRead("/mnemonicPath/Rshr",    0);
             ITUtilStructureElement.assertRead("/mnemonicPath/Di-Rshr", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1);
 
             ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di", Boolean.FALSE);
 
@@ -1311,7 +1311,7 @@ class StructuresDeviceGroupIT {
             ITUtilStructureElement.assertRead("/mnemonicPath/Rshr",    0);
             ITUtilStructureElement.assertRead("/mnemonicPath/Di-Rshr", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + rejectedStructureElement.getUuid().toString(), 1);
+            ITUtilStructureElement.assertRead("/history/" + rejectedStructureElement.getUuid().toString(), 2);
 
             ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di", Boolean.FALSE);
         } catch (Exception e) {
@@ -1404,12 +1404,10 @@ class StructuresDeviceGroupIT {
             ITUtilStructureElement.assertRead("/mnemonic/R1", 0);
             ITUtilStructureElement.assertRead("/mnemonic/A1", 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);
-            ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 1);
-            ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 1);
-            ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 1);
+            ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 2);
+            ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 2);
+            ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 2);
 
             ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di",    Boolean.FALSE);
             ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di-P1", Boolean.FALSE);
@@ -1579,12 +1577,10 @@ class StructuresDeviceGroupIT {
             ITUtilStructureElement.assertRead("/mnemonic/R9", 0);
             ITUtilStructureElement.assertRead("/mnemonic/A9", 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);
-            ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 9);
-            ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 9);
-            ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 9);
+            ITUtilStructureElement.assertRead("/history/" + uuid.toString(),  17);
+            ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 18);
+            ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 18);
+            ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 18);
 
             ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di",    Boolean.FALSE);
             ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di-P9", Boolean.FALSE);
@@ -1973,8 +1969,8 @@ class StructuresDeviceGroupIT {
 
             // history
             //     /history/{uuid}
-            ITUtilStructureElement.assertRead("/history/" + uuid.toString(),            1);
-            ITUtilStructureElement.assertRead("/history/" + discipline2Uuid.toString(), 1);
+            ITUtilStructureElement.assertRead("/history/" + uuid.toString(),            2);
+            ITUtilStructureElement.assertRead("/history/" + discipline2Uuid.toString(), 2);
 
             ITUtilStructureElement.assertExists(Type.DEVICEGROUP, "Di2", Boolean.FALSE);
         } catch (Exception e) {
diff --git a/src/test/java/org/openepics/names/docker/StructuresDeviceTypeIT.java b/src/test/java/org/openepics/names/docker/StructuresDeviceTypeIT.java
index 602a9a80..428c15c2 100644
--- a/src/test/java/org/openepics/names/docker/StructuresDeviceTypeIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresDeviceTypeIT.java
@@ -1111,7 +1111,7 @@ class StructuresDeviceTypeIT {
             ITUtilStructureElement.assertRead("/mnemonicPath/Rsha",    0);
             ITUtilStructureElement.assertRead("/mnemonicPath/Di-Rsha", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1);
 
             ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Rsha",    Boolean.FALSE);
             ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-Rsha", Boolean.FALSE);
@@ -1140,7 +1140,7 @@ class StructuresDeviceTypeIT {
             ITUtilStructureElement.assertRead("/mnemonicPath/Rsha",    0);
             ITUtilStructureElement.assertRead("/mnemonicPath/Di-Rsha", 1);
 
-            ITUtilStructureElement.assertRead("/history/" + approvedStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + approvedStructureElement.getUuid().toString(), 2);
 
             ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Rsha",    Boolean.FALSE);
             ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-Rsha", Boolean.TRUE);
@@ -1197,7 +1197,7 @@ class StructuresDeviceTypeIT {
             ITUtilStructureElement.assertRead("/mnemonicPath/Rshc",    0);
             ITUtilStructureElement.assertRead("/mnemonicPath/Di-Rshc", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1);
 
             ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Rshc",    Boolean.FALSE);
             ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-Rshc", Boolean.FALSE);
@@ -1226,7 +1226,7 @@ class StructuresDeviceTypeIT {
             ITUtilStructureElement.assertRead("/mnemonicPath/Rshc",    0);
             ITUtilStructureElement.assertRead("/mnemonicPath/Di-Rshc", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + cancelledStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + cancelledStructureElement.getUuid().toString(), 2);
 
             ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Rshc",    Boolean.FALSE);
             ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-Rshc", Boolean.FALSE);
@@ -1283,7 +1283,7 @@ class StructuresDeviceTypeIT {
             ITUtilStructureElement.assertRead("/mnemonicPath/Rshr",    0);
             ITUtilStructureElement.assertRead("/mnemonicPath/Di-Rshr", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1);
 
             ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Rshr",    Boolean.FALSE);
             ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-Rshr", Boolean.FALSE);
@@ -1312,7 +1312,7 @@ class StructuresDeviceTypeIT {
             ITUtilStructureElement.assertRead("/mnemonicPath/Rshr",    0);
             ITUtilStructureElement.assertRead("/mnemonicPath/Di-Rshr", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + rejectedStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + rejectedStructureElement.getUuid().toString(), 2);
 
             ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Rshr",    Boolean.FALSE);
             ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-Rshr", Boolean.FALSE);
@@ -1406,12 +1406,10 @@ class StructuresDeviceTypeIT {
             ITUtilStructureElement.assertRead("/mnemonic/R1", 0);
             ITUtilStructureElement.assertRead("/mnemonic/A1", 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);
-            ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 1);
-            ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 1);
-            ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 1);
+            ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 2);
+            ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 2);
+            ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 2);
 
             ITUtilStructureElement.assertExists(Type.DEVICETYPE, "P1",    Boolean.FALSE);
             ITUtilStructureElement.assertExists(Type.DEVICETYPE, "C1",    Boolean.FALSE);
@@ -1584,12 +1582,10 @@ class StructuresDeviceTypeIT {
             ITUtilStructureElement.assertRead("/mnemonic/R9", 1);
             ITUtilStructureElement.assertRead("/mnemonic/A9", 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);
-            ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 9);
-            ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 9);
-            ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 9);
+            ITUtilStructureElement.assertRead("/history/" + uuid.toString(),  17);
+            ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 18);
+            ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 18);
+            ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 18);
 
             ITUtilStructureElement.assertExists(Type.DEVICETYPE, "P9",    Boolean.FALSE);
             ITUtilStructureElement.assertExists(Type.DEVICETYPE, "C9",    Boolean.FALSE);
@@ -1993,9 +1989,9 @@ class StructuresDeviceTypeIT {
 
             // history
             //     /history/{uuid}
-            ITUtilStructureElement.assertRead("/history/" + uuid.toString(),            1);
-            ITUtilStructureElement.assertRead("/history/" + deviceGroupUuid.toString(), 1);
-            ITUtilStructureElement.assertRead("/history/" + disciplineUuid.toString(),  1);
+            ITUtilStructureElement.assertRead("/history/" + uuid.toString(),            2);
+            ITUtilStructureElement.assertRead("/history/" + deviceGroupUuid.toString(), 2);
+            ITUtilStructureElement.assertRead("/history/" + disciplineUuid.toString(),  2);
 
             ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AA1", Boolean.TRUE);
             ITUtilStructureElement.assertExists(Type.DEVICETYPE, "Di-AA2", Boolean.TRUE);
diff --git a/src/test/java/org/openepics/names/docker/StructuresDisciplineIT.java b/src/test/java/org/openepics/names/docker/StructuresDisciplineIT.java
index c4d96269..df3cddeb 100644
--- a/src/test/java/org/openepics/names/docker/StructuresDisciplineIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresDisciplineIT.java
@@ -1042,7 +1042,7 @@ class StructuresDisciplineIT {
 
             ITUtilStructureElement.assertRead("/mnemonicPath/Rsha", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1);
 
             ITUtilStructureElement.assertExists(Type.DISCIPLINE, "Rsha", Boolean.FALSE);
 
@@ -1066,7 +1066,7 @@ class StructuresDisciplineIT {
 
             ITUtilStructureElement.assertRead("/mnemonicPath/Rsha", 1);
 
-            ITUtilStructureElement.assertRead("/history/" + approvedStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + approvedStructureElement.getUuid().toString(), 2);
 
             ITUtilStructureElement.assertExists(Type.DISCIPLINE, "Rsha", Boolean.TRUE);
         } catch (Exception e) {
@@ -1118,7 +1118,7 @@ class StructuresDisciplineIT {
 
             ITUtilStructureElement.assertRead("/mnemonicPath/Rshc", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1);
 
             ITUtilStructureElement.assertExists(Type.DISCIPLINE, "Rshc", Boolean.FALSE);
 
@@ -1142,7 +1142,7 @@ class StructuresDisciplineIT {
 
             ITUtilStructureElement.assertRead("/mnemonicPath/Rshc", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + cancelledStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + cancelledStructureElement.getUuid().toString(), 2);
 
             ITUtilStructureElement.assertExists(Type.DISCIPLINE, "Rshc", Boolean.FALSE);
         } catch (Exception e) {
@@ -1194,7 +1194,7 @@ class StructuresDisciplineIT {
 
             ITUtilStructureElement.assertRead("/mnemonicPath/Rshr", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1);
 
             ITUtilStructureElement.assertExists(Type.DISCIPLINE, "Rshr", Boolean.FALSE);
 
@@ -1218,7 +1218,7 @@ class StructuresDisciplineIT {
 
             ITUtilStructureElement.assertRead("/mnemonicPath/Rshr", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + rejectedStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + rejectedStructureElement.getUuid().toString(), 2);
 
             ITUtilStructureElement.assertExists(Type.DISCIPLINE, "Rshr", Boolean.FALSE);
         } catch (Exception e) {
@@ -1311,12 +1311,10 @@ class StructuresDisciplineIT {
             ITUtilStructureElement.assertRead("/mnemonic/R1", 0);
             ITUtilStructureElement.assertRead("/mnemonic/A1", 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);
-            ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 1);
-            ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 1);
-            ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 1);
+            ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 2);
+            ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 2);
+            ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 2);
 
             ITUtilStructureElement.assertExists(Type.DISCIPLINE, "P1", Boolean.FALSE);
             ITUtilStructureElement.assertExists(Type.DISCIPLINE, "C1", Boolean.FALSE);
@@ -1485,12 +1483,10 @@ class StructuresDisciplineIT {
             ITUtilStructureElement.assertRead("/mnemonic/R9", 1);
             ITUtilStructureElement.assertRead("/mnemonic/A9", 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);
-            ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 9);
-            ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 9);
-            ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 9);
+            ITUtilStructureElement.assertRead("/history/" + uuid.toString(),  17);
+            ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 18);
+            ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 18);
+            ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 18);
 
             ITUtilStructureElement.assertExists(Type.DISCIPLINE, "P9", Boolean.TRUE);
             ITUtilStructureElement.assertExists(Type.DISCIPLINE, "C9", Boolean.TRUE);
@@ -1870,7 +1866,7 @@ class StructuresDisciplineIT {
 
             // history
             //     /history/{uuid}
-            ITUtilStructureElement.assertRead("/history/" + uuid.toString(),  1);
+            ITUtilStructureElement.assertRead("/history/" + uuid.toString(),  2);
 
             ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AA1", Boolean.TRUE);
             ITUtilStructureElement.assertExists(Type.DISCIPLINE, "AA2", Boolean.TRUE);
diff --git a/src/test/java/org/openepics/names/docker/StructuresSubsystemIT.java b/src/test/java/org/openepics/names/docker/StructuresSubsystemIT.java
index 503718a2..179db024 100644
--- a/src/test/java/org/openepics/names/docker/StructuresSubsystemIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresSubsystemIT.java
@@ -1115,7 +1115,7 @@ class StructuresSubsystemIT {
             ITUtilStructureElement.assertRead("/mnemonicPath/Sys-Rsha",    0);
             ITUtilStructureElement.assertRead("/mnemonicPath/Sg-Sys-Rsha", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1);
 
             ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Rsha",        Boolean.FALSE);
             ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-Rsha",    Boolean.FALSE);
@@ -1151,7 +1151,7 @@ class StructuresSubsystemIT {
             ITUtilStructureElement.assertRead("/mnemonicPath/Sys-Rsha",    1);
             ITUtilStructureElement.assertRead("/mnemonicPath/Sg-Sys-Rsha", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + approvedStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + approvedStructureElement.getUuid().toString(), 2);
 
             ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Rsha",        Boolean.FALSE);
             ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-Rsha",    Boolean.TRUE);
@@ -1215,7 +1215,7 @@ class StructuresSubsystemIT {
             ITUtilStructureElement.assertRead("/mnemonicPath/Sys-Rshc",    0);
             ITUtilStructureElement.assertRead("/mnemonicPath/Sg-Sys-Rshc", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1);
 
             ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Rshc",        Boolean.FALSE);
             ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-Rshc",    Boolean.FALSE);
@@ -1251,7 +1251,7 @@ class StructuresSubsystemIT {
             ITUtilStructureElement.assertRead("/mnemonicPath/Sys-Rshc",    0);
             ITUtilStructureElement.assertRead("/mnemonicPath/Sg-Sys-Rshc", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + cancelledStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + cancelledStructureElement.getUuid().toString(), 2);
 
             ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Rshc",        Boolean.FALSE);
             ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-Rshc",    Boolean.FALSE);
@@ -1315,7 +1315,7 @@ class StructuresSubsystemIT {
             ITUtilStructureElement.assertRead("/mnemonicPath/Sys-Rshr",    0);
             ITUtilStructureElement.assertRead("/mnemonicPath/Sg-Sys-Rshr", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1);
 
             ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Rshr",        Boolean.FALSE);
             ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-Rshr",    Boolean.FALSE);
@@ -1351,7 +1351,7 @@ class StructuresSubsystemIT {
             ITUtilStructureElement.assertRead("/mnemonicPath/Sys-Rshr",    0);
             ITUtilStructureElement.assertRead("/mnemonicPath/Sg-Sys-Rshr", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + rejectedStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + rejectedStructureElement.getUuid().toString(), 2);
 
             ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Rshr",        Boolean.FALSE);
             ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-Rshr",    Boolean.FALSE);
@@ -1446,12 +1446,10 @@ class StructuresSubsystemIT {
             ITUtilStructureElement.assertRead("/mnemonic/R1", 0);
             ITUtilStructureElement.assertRead("/mnemonic/A1", 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);
-            ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 1);
-            ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 1);
-            ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 1);
+            ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 2);
+            ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 2);
+            ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 2);
 
             ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "P1",        Boolean.FALSE);
             ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "C1",        Boolean.FALSE);
@@ -1628,12 +1626,10 @@ class StructuresSubsystemIT {
             ITUtilStructureElement.assertRead("/mnemonic/R9", 1);
             ITUtilStructureElement.assertRead("/mnemonic/A9", 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);
-            ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 9);
-            ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 9);
-            ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 9);
+            ITUtilStructureElement.assertRead("/history/" + uuid.toString(),  17);
+            ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 18);
+            ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 18);
+            ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 18);
 
             ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "P9",        Boolean.FALSE);
             ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "C9",        Boolean.FALSE);
@@ -2051,9 +2047,9 @@ class StructuresSubsystemIT {
 
             // history
             //     /history/{uuid}
-            ITUtilStructureElement.assertRead("/history/" + uuid.toString(),            1);
-            ITUtilStructureElement.assertRead("/history/" + systemUuid.toString(),      1);
-            ITUtilStructureElement.assertRead("/history/" + systemGroupUuid.toString(), 1);
+            ITUtilStructureElement.assertRead("/history/" + uuid.toString(),            2);
+            ITUtilStructureElement.assertRead("/history/" + systemUuid.toString(),      2);
+            ITUtilStructureElement.assertRead("/history/" + systemGroupUuid.toString(), 2);
 
             ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AA1", Boolean.TRUE);
             ITUtilStructureElement.assertExists(Type.SUBSYSTEM, "Sys-AA2", Boolean.TRUE);
diff --git a/src/test/java/org/openepics/names/docker/StructuresSystemGroupIT.java b/src/test/java/org/openepics/names/docker/StructuresSystemGroupIT.java
index fa664190..739e4315 100644
--- a/src/test/java/org/openepics/names/docker/StructuresSystemGroupIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresSystemGroupIT.java
@@ -1104,7 +1104,7 @@ class StructuresSystemGroupIT {
 
             ITUtilStructureElement.assertRead("/mnemonicPath/Rsha", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1);
 
             ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "Rsha", Boolean.FALSE);
 
@@ -1128,7 +1128,7 @@ class StructuresSystemGroupIT {
 
             ITUtilStructureElement.assertRead("/mnemonicPath/Rsha", 1);
 
-            ITUtilStructureElement.assertRead("/history/" + approvedStructureElement.getUuid().toString(), 1);
+            ITUtilStructureElement.assertRead("/history/" + approvedStructureElement.getUuid().toString(), 2);
 
             ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "Rsha", Boolean.TRUE);
         } catch (Exception e) {
@@ -1180,7 +1180,7 @@ class StructuresSystemGroupIT {
 
             ITUtilStructureElement.assertRead("/mnemonicPath/Rshc", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1);
 
             ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "Rshc", Boolean.FALSE);
 
@@ -1204,7 +1204,7 @@ class StructuresSystemGroupIT {
 
             ITUtilStructureElement.assertRead("/mnemonicPath/Rshc", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + cancelledStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + cancelledStructureElement.getUuid().toString(), 2);
 
             ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "Rshc", Boolean.FALSE);
         } catch (Exception e) {
@@ -1256,7 +1256,7 @@ class StructuresSystemGroupIT {
 
             ITUtilStructureElement.assertRead("/mnemonicPath/Rshr", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1);
 
             ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "Rshr", Boolean.FALSE);
 
@@ -1280,7 +1280,7 @@ class StructuresSystemGroupIT {
 
             ITUtilStructureElement.assertRead("/mnemonicPath/Rshr", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + rejectedStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + rejectedStructureElement.getUuid().toString(), 2);
 
             ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "Rshr", Boolean.FALSE);
         } catch (Exception e) {
@@ -1373,12 +1373,10 @@ class StructuresSystemGroupIT {
             ITUtilStructureElement.assertRead("/mnemonic/R1", 0);
             ITUtilStructureElement.assertRead("/mnemonic/A1", 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);
-            ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 1);
-            ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 1);
-            ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 1);
+            ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 2);
+            ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 2);
+            ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 2);
 
             ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "P1", Boolean.FALSE);
             ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "C1", Boolean.FALSE);
@@ -1547,12 +1545,10 @@ class StructuresSystemGroupIT {
             ITUtilStructureElement.assertRead("/mnemonic/R9", 1);
             ITUtilStructureElement.assertRead("/mnemonic/A9", 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);
-            ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 9);
-            ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 9);
-            ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 9);
+            ITUtilStructureElement.assertRead("/history/" + uuid.toString(),  17);
+            ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 18);
+            ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 18);
+            ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 18);
 
             ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "P9", Boolean.TRUE);
             ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "C9", Boolean.TRUE);
@@ -1932,7 +1928,7 @@ class StructuresSystemGroupIT {
 
             // history
             //     /history/{uuid}
-            ITUtilStructureElement.assertRead("/history/" + uuid.toString(), 1);
+            ITUtilStructureElement.assertRead("/history/" + uuid.toString(), 2);
 
             ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AA1", Boolean.TRUE);
             ITUtilStructureElement.assertExists(Type.SYSTEMGROUP, "AA2", Boolean.TRUE);
diff --git a/src/test/java/org/openepics/names/docker/StructuresSystemIT.java b/src/test/java/org/openepics/names/docker/StructuresSystemIT.java
index 2930268a..df29fcf6 100644
--- a/src/test/java/org/openepics/names/docker/StructuresSystemIT.java
+++ b/src/test/java/org/openepics/names/docker/StructuresSystemIT.java
@@ -1092,7 +1092,7 @@ class StructuresSystemIT {
             ITUtilStructureElement.assertRead("/mnemonicPath/Rsha",    0);
             ITUtilStructureElement.assertRead("/mnemonicPath/Sg-Rsha", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1);
 
             ITUtilStructureElement.assertExists(Type.SYSTEM, "Rsha",    Boolean.FALSE);
             ITUtilStructureElement.assertExists(Type.SYSTEM, "Sg-Rsha", Boolean.FALSE);
@@ -1121,7 +1121,7 @@ class StructuresSystemIT {
             ITUtilStructureElement.assertRead("/mnemonicPath/Rsha",    1);
             ITUtilStructureElement.assertRead("/mnemonicPath/Sg-Rsha", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + approvedStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + approvedStructureElement.getUuid().toString(), 2);
 
             ITUtilStructureElement.assertExists(Type.SYSTEM, "Rsha",    Boolean.TRUE);
             ITUtilStructureElement.assertExists(Type.SYSTEM, "Sg-Rsha", Boolean.FALSE);
@@ -1178,7 +1178,7 @@ class StructuresSystemIT {
             ITUtilStructureElement.assertRead("/mnemonicPath/Rshc",    0);
             ITUtilStructureElement.assertRead("/mnemonicPath/Sg-Rshc", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1);
 
             ITUtilStructureElement.assertExists(Type.SYSTEM, "Rshc",    Boolean.FALSE);
             ITUtilStructureElement.assertExists(Type.SYSTEM, "Sg-Rshc", Boolean.FALSE);
@@ -1207,7 +1207,7 @@ class StructuresSystemIT {
             ITUtilStructureElement.assertRead("/mnemonicPath/Rshc",    0);
             ITUtilStructureElement.assertRead("/mnemonicPath/Sg-Rshc", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + cancelledStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + cancelledStructureElement.getUuid().toString(), 2);
 
             ITUtilStructureElement.assertExists(Type.SYSTEM, "Rshc",    Boolean.FALSE);
             ITUtilStructureElement.assertExists(Type.SYSTEM, "Sg-Rshc", Boolean.FALSE);
@@ -1264,7 +1264,7 @@ class StructuresSystemIT {
             ITUtilStructureElement.assertRead("/mnemonicPath/Rshr",    0);
             ITUtilStructureElement.assertRead("/mnemonicPath/Sg-Rshr", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + createdStructureElement.getUuid().toString(), 1);
 
             ITUtilStructureElement.assertExists(Type.SYSTEM, "Rshr",    Boolean.FALSE);
             ITUtilStructureElement.assertExists(Type.SYSTEM, "Sg-Rshr", Boolean.FALSE);
@@ -1293,7 +1293,7 @@ class StructuresSystemIT {
             ITUtilStructureElement.assertRead("/mnemonicPath/Rshr",    0);
             ITUtilStructureElement.assertRead("/mnemonicPath/Sg-Rshr", 0);
 
-            ITUtilStructureElement.assertRead("/history/" + rejectedStructureElement.getUuid().toString(), 1, -1);
+            ITUtilStructureElement.assertRead("/history/" + rejectedStructureElement.getUuid().toString(), 2);
 
             ITUtilStructureElement.assertExists(Type.SYSTEM, "Rshr",    Boolean.FALSE);
             ITUtilStructureElement.assertExists(Type.SYSTEM, "Sg-Rshr", Boolean.FALSE);
@@ -1387,12 +1387,10 @@ class StructuresSystemIT {
             ITUtilStructureElement.assertRead("/mnemonic/R1", 0);
             ITUtilStructureElement.assertRead("/mnemonic/A1", 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);
-            ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 1);
-            ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 1);
-            ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 1);
+            ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 2);
+            ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 2);
+            ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 2);
 
             ITUtilStructureElement.assertExists(Type.SYSTEM, "P1",    Boolean.FALSE);
             ITUtilStructureElement.assertExists(Type.SYSTEM, "C1",    Boolean.FALSE);
@@ -1565,12 +1563,10 @@ class StructuresSystemIT {
             ITUtilStructureElement.assertRead("/mnemonic/R9", 1);
             ITUtilStructureElement.assertRead("/mnemonic/A9", 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);
-            ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 9);
-            ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 9);
-            ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 9);
+            ITUtilStructureElement.assertRead("/history/" + uuid.toString(),  17);
+            ITUtilStructureElement.assertRead("/history/" + uuid2.toString(), 18);
+            ITUtilStructureElement.assertRead("/history/" + uuid3.toString(), 18);
+            ITUtilStructureElement.assertRead("/history/" + uuid4.toString(), 18);
 
             ITUtilStructureElement.assertExists(Type.SYSTEM, "P9",    Boolean.TRUE);
             ITUtilStructureElement.assertExists(Type.SYSTEM, "C9",    Boolean.TRUE);
@@ -1966,8 +1962,8 @@ class StructuresSystemIT {
 
             // history
             //     /history/{uuid}
-            ITUtilStructureElement.assertRead("/history/" + uuid.toString(),            1);
-            ITUtilStructureElement.assertRead("/history/" + systemGroupUuid.toString(), 1);
+            ITUtilStructureElement.assertRead("/history/" + uuid.toString(),            2);
+            ITUtilStructureElement.assertRead("/history/" + systemGroupUuid.toString(), 2);
 
             ITUtilStructureElement.assertExists(Type.SYSTEM, "AA1", Boolean.TRUE);
             ITUtilStructureElement.assertExists(Type.SYSTEM, "AA2", Boolean.TRUE);
diff --git a/src/test/java/org/openepics/names/util/ValidateUtilTest.java b/src/test/java/org/openepics/names/util/ValidateUtilTest.java
index 053e2b85..00fab639 100644
--- a/src/test/java/org/openepics/names/util/ValidateUtilTest.java
+++ b/src/test/java/org/openepics/names/util/ValidateUtilTest.java
@@ -636,7 +636,7 @@ class ValidateUtilTest {
     @Test
     void validateInputReadNames() {
         ValidateNameElementUtil.validateNamesInputRead(
-                null, null, null, null, null, null, null,
+                null, null, null, null, null, null, null, null,
                 null, null, null, null, null);
     }
 
-- 
GitLab