@@ -57,9 +57,11 @@ public AuditSequenceStrictValidator(AuditReader auditReader, AuditEntryDefinitio
5757 * Internal constructor for direct list initialization (used by tests).
5858 */
5959 AuditSequenceStrictValidator (List <AuditEntryDefinition > expectedDefinitions , List <AuditEntry > actualEntries , AuditReader auditReader ) {
60- this .expectations = expectedDefinitions .stream ()
60+ this .expectations = expectedDefinitions != null
61+ ? expectedDefinitions .stream ()
6162 .map (AuditEntryExpectation ::new )
62- .collect (Collectors .toList ());
63+ .collect (Collectors .toList ())
64+ : new ArrayList <>();
6365 this .auditReader = auditReader ;
6466 this .actualEntries = actualEntries != null ? actualEntries : new ArrayList <>();
6567 }
@@ -68,48 +70,38 @@ public AuditSequenceStrictValidator(AuditReader auditReader, AuditEntryDefinitio
6870 public ValidationResult validate () {
6971 List <ValidationError > allErrors = new ArrayList <>();
7072
71- int expectedSize = expectations .size ();
72- int actualSize = actualEntries .size ();
73-
74- if (expectedSize != actualSize ) {
73+ if (expectations .size () != actualEntries .size ()) {
7574 allErrors .add (new CountMismatchError (getExpectedChangeIds (), getActualChangeIds ()));
7675 }
7776
7877 allErrors .addAll (getValidationErrors (expectations , actualEntries ));
7978
80- if (expectedSize > actualSize ) {
81- for (int i = actualSize ; i < expectedSize ; i ++) {
82- AuditEntryDefinition def = expectations .get (i ).getDefinition ();
83- allErrors .add (new MissingEntryError (i , def .getChangeId (), def .getState ()));
84- }
85- }
86-
87- if (expectedSize < actualSize ) {
88- for (int i = expectedSize ; i < actualSize ; i ++) {
89- AuditEntry actual = actualEntries .get (i );
90- allErrors .add (new UnexpectedEntryError (i , actual .getTaskId (), actual .getState ()));
91- }
92- }
93-
94- if (allErrors .isEmpty ()) {
95- return ValidationResult .success (VALIDATOR_NAME );
96- }
97-
98- return ValidationResult .failure (VALIDATOR_NAME , allErrors .toArray (new ValidationError [0 ]));
79+ return allErrors .isEmpty ()
80+ ? ValidationResult .success (VALIDATOR_NAME )
81+ : ValidationResult .failure (VALIDATOR_NAME , allErrors .toArray (new ValidationError [0 ]));
9982 }
10083
10184 private static List <ValidationError > getValidationErrors (List <AuditEntryExpectation > expectedEntries , List <AuditEntry > actualEntries ) {
10285 List <ValidationError > allErrors = new ArrayList <>();
103- if (expectedEntries == null || expectedEntries .isEmpty ()) {
86+ if (expectedEntries .isEmpty ()) {
10487 return allErrors ;
10588 }
106- int actualSize = actualEntries != null ? actualEntries .size () : 0 ;
107- int limit = Math .min (expectedEntries .size (), actualSize );
89+ int actualSize = actualEntries .size ();
90+ int limit = Math .max (expectedEntries .size (), actualSize );
91+
10892 for (int i = 0 ; i < limit ; i ++) {
109- AuditEntryExpectation expected = expectedEntries .get (i );
110- AuditEntry actual = actualEntries .get (i );
111- List <FieldMismatchError > entryErrors = expected .compareWith (actual );
112- allErrors .addAll (entryErrors );
93+ AuditEntryExpectation expected = i < expectedEntries .size () ? expectedEntries .get (i ) : null ;
94+ AuditEntry actual = i < actualEntries .size () ? actualEntries .get (i ) : null ;
95+ if ( expected != null && actual != null ) {
96+ allErrors .addAll (expected .compareWith (actual ));
97+ } else if ( expected != null ) {
98+ AuditEntryDefinition def = expected .getDefinition ();
99+ allErrors .add (new MissingEntryError (i , def .getChangeId (), def .getState ()));
100+ } else {
101+ assert actual != null ;
102+ allErrors .add (new UnexpectedEntryError (i , actual .getTaskId (), actual .getState ()));
103+ }
104+
113105 }
114106 return allErrors ;
115107 }
0 commit comments