From 8207de7a32281f0ce5f1c59dd68a65e18e4ec26e Mon Sep 17 00:00:00 2001 From: John Michael Luy Date: Thu, 12 Aug 2021 21:18:24 +0800 Subject: [PATCH] Allow optional IdTagInfo in SendLocalList when UpdateType is differential. --- .../localauthlist/AuthorizationData.java | 2 +- .../localauthlist/SendLocalListRequest.java | 4 ++ .../test/SendLocalListRequestTest.java | 48 +++++++++++++++++++ 3 files changed, 53 insertions(+), 1 deletion(-) diff --git a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/model/localauthlist/AuthorizationData.java b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/model/localauthlist/AuthorizationData.java index 28e93c95a..8556621b5 100644 --- a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/model/localauthlist/AuthorizationData.java +++ b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/model/localauthlist/AuthorizationData.java @@ -88,7 +88,7 @@ public void setIdTagInfo(IdTagInfo idTagInfo) { @Override public boolean validate() { - return ModelUtil.validate(idTag, 20) && idTagInfo.validate(); + return ModelUtil.validate(idTag, 20) && (idTagInfo == null || idTagInfo.validate()); } @Override diff --git a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/model/localauthlist/SendLocalListRequest.java b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/model/localauthlist/SendLocalListRequest.java index e749f2627..d71ad2855 100644 --- a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/model/localauthlist/SendLocalListRequest.java +++ b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/model/localauthlist/SendLocalListRequest.java @@ -127,6 +127,10 @@ public boolean validate() { if (localAuthorizationList != null) { for (AuthorizationData data : localAuthorizationList) { valid &= data.validate(); + + if (updateType == UpdateType.Full) { + valid &= data.getIdTagInfo() != null; + } } } diff --git a/ocpp-v1_6/src/test/java/eu/chargetime/ocpp/model/localauthlist/test/SendLocalListRequestTest.java b/ocpp-v1_6/src/test/java/eu/chargetime/ocpp/model/localauthlist/test/SendLocalListRequestTest.java index 338b9d894..cfa1436bc 100644 --- a/ocpp-v1_6/src/test/java/eu/chargetime/ocpp/model/localauthlist/test/SendLocalListRequestTest.java +++ b/ocpp-v1_6/src/test/java/eu/chargetime/ocpp/model/localauthlist/test/SendLocalListRequestTest.java @@ -4,8 +4,13 @@ import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.instanceOf; import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import eu.chargetime.ocpp.PropertyConstraintException; +import eu.chargetime.ocpp.model.core.AuthorizationStatus; +import eu.chargetime.ocpp.model.core.IdTagInfo; import eu.chargetime.ocpp.model.localauthlist.AuthorizationData; import eu.chargetime.ocpp.model.localauthlist.SendLocalListRequest; import eu.chargetime.ocpp.model.localauthlist.UpdateType; @@ -107,4 +112,47 @@ public void validate_updateTypeIsNotSet_isNotValid() { // Then assertThat(request.validate(), equalTo(false)); } + + @Test + public void validate_updateTypeFullWithTagInfo_isValid() { + // When + request.setListVersion(42); + request.setUpdateType(UpdateType.Full); + request.setLocalAuthorizationList(aList(data)); + + when(data.validate()).thenReturn(true); + when(data.getIdTagInfo()).thenReturn(new IdTagInfo(AuthorizationStatus.Accepted)); + + // Then + assertThat(request.validate(), equalTo(true)); + verify(data, times(1)).getIdTagInfo(); + verify(data, times(1)).validate(); + } + + @Test + public void validate_updateTypeFullEmptyTagInfo_isNotValid() { + // When + request.setListVersion(42); + request.setUpdateType(UpdateType.Full); + request.setLocalAuthorizationList(aList(data)); + + when(data.validate()).thenReturn(true); + when(data.getIdTagInfo()).thenReturn(null); + + // Then + assertThat(request.validate(), equalTo(false)); + } + + @Test + public void validate_updateTypeDifferentialEmptyIdTagInfo_isValid() { + // When + request.setListVersion(42); + request.setUpdateType(UpdateType.Differential); + request.setLocalAuthorizationList(aList(data)); + + when(data.validate()).thenReturn(true); + + // Then + assertThat(request.validate(), equalTo(true)); + } }