Skip to content

Commit ffdb574

Browse files
OAM-186: Added requisition template validation for Ward/Service type (#98)
* OAM-186: Added requisition template validation for Ward/Service type * OAM-186: Fixed value rejection in RequisitionTemplateDtoValidator * OAM-186: Removed unused constant, fixed access modifiers
1 parent 9e706f9 commit ffdb574

File tree

5 files changed

+46
-8
lines changed

5 files changed

+46
-8
lines changed

src/main/java/org/openlmis/requisition/i18n/MessageKeys.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,8 @@ public abstract class MessageKeys {
227227
+ ".validation.fieldMustBeGreaterOrEqual";
228228
public static final String ERROR_VALIDATION_REFERENCED_OBJECT_DOES_NOT_EXIST = ERROR_PREFIX
229229
+ ".validation.referencedObjectDoesNotExist";
230+
public static final String ERROR_VALIDATION_CANNOT_ASSIGN_WARD_SERVICE_TYPE = ERROR_PREFIX
231+
+ ".validation.cannotAssignWardServiceForRequisitionTemplate";
230232
public static final String ERROR_VALIDATION_CANNOT_CONVERT_WITHOUT_APPROVED_QTY = ERROR_PREFIX
231233
+ ".validation.cannotConvertToOrderWithoutApprovedQty";
232234
public static final String ERROR_USER_NOT_FOUND = ERROR_PREFIX

src/main/java/org/openlmis/requisition/validate/RequisitionTemplateDtoValidator.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import static org.openlmis.requisition.i18n.MessageKeys.ERROR_OPTION_NOT_AVAILABLE;
3333
import static org.openlmis.requisition.i18n.MessageKeys.ERROR_SOURCE_NOT_AVAILABLE;
3434
import static org.openlmis.requisition.i18n.MessageKeys.ERROR_SOURCE_OF_REQUISITION_TEMPLATE_COLUMN_CANNOT_BE_NULL;
35+
import static org.openlmis.requisition.i18n.MessageKeys.ERROR_VALIDATION_CANNOT_ASSIGN_WARD_SERVICE_TYPE;
3536
import static org.openlmis.requisition.i18n.MessageKeys.ERROR_VALIDATION_COLUMN_DEFINITION_MODIFIED;
3637
import static org.openlmis.requisition.i18n.MessageKeys.ERROR_VALIDATION_COLUMN_DEFINITION_NOT_FOUND;
3738
import static org.openlmis.requisition.i18n.MessageKeys.ERROR_VALIDATION_FIELD_CANNOT_BE_NULL;
@@ -47,6 +48,7 @@
4748
import org.openlmis.requisition.domain.AvailableRequisitionColumn;
4849
import org.openlmis.requisition.domain.SourceType;
4950
import org.openlmis.requisition.dto.AvailableRequisitionColumnOptionDto;
51+
import org.openlmis.requisition.dto.FacilityTypeDto;
5052
import org.openlmis.requisition.dto.RequisitionTemplateColumnDto;
5153
import org.openlmis.requisition.dto.RequisitionTemplateDto;
5254
import org.openlmis.requisition.repository.AvailableRequisitionColumnRepository;
@@ -61,10 +63,10 @@
6163
@SuppressWarnings("PMD.TooManyMethods")
6264
public class RequisitionTemplateDtoValidator extends BaseValidator {
6365

66+
static final String WARD_SERVICE_TYPE = "WS";
6467
static final String COLUMNS_MAP = "columnsMap";
6568
static final String NUMBER_OF_PERIODS_TO_AVERAGE = "numberOfPeriodsToAverage";
6669
static final String PROGRAM_ID = "programId";
67-
static final String FACILITY_TYPE_ID = "facilityTypeId";
6870
static final String PROGRAM = "program";
6971
static final String FACILITY_TYPE = "facility type";
7072
static final String REQUESTED_QUANTITY = "requestedQuantity";
@@ -83,6 +85,7 @@ public class RequisitionTemplateDtoValidator extends BaseValidator {
8385
static final Set<String> STOCK_BASED_COLUMNS = Sets.asSet(
8486
BEGINNING_BALANCE, STOCK_ON_HAND, TOTAL_RECEIVED_QUANTITY, TOTAL_CONSUMED_QUANTITY,
8587
TOTAL_LOSSES_AND_ADJUSTMENTS, TOTAL_STOCKOUT_DAYS, AVERAGE_CONSUMPTION);
88+
static final String FACILITY_TYPES = "facilityTypes";
8689

8790
private Errors errors;
8891

@@ -135,10 +138,14 @@ public void validate(Object target, Errors errors) {
135138
}
136139

137140
for (UUID facilityTypeId : template.getFacilityTypeIds()) {
138-
if (null == facilityTypeReferenceDataService.findOne(facilityTypeId)) {
139-
rejectValue(errors, FACILITY_TYPE_ID,
141+
FacilityTypeDto facilityType = facilityTypeReferenceDataService.findOne(facilityTypeId);
142+
if (null == facilityType) {
143+
rejectValue(errors, FACILITY_TYPES,
140144
new Message(ERROR_VALIDATION_REFERENCED_OBJECT_DOES_NOT_EXIST,
141145
FACILITY_TYPE, facilityTypeId));
146+
} else if (facilityType.getCode().equals(WARD_SERVICE_TYPE)) {
147+
rejectValue(errors, FACILITY_TYPES,
148+
new Message(ERROR_VALIDATION_CANNOT_ASSIGN_WARD_SERVICE_TYPE));
142149
}
143150
}
144151
}

src/main/resources/messages_en.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ requisition.error.validation.datePhysicalStockCountCompleted.mismatch=You can't
9494
requisition.error.validation.columnDefinitionNotFound=Cannot find column definition for column {0}
9595
requisition.error.validation.columnDefinitionModified=Column definition for column {0} has been modified
9696
requisition.error.validation.referencedObjectDoesNotExist=The {0} with ID {1} does not exist.
97+
requisition.error.validation.cannotAssignWardServiceForRequisitionTemplate=Ward/Service type facilities cannot be assigned to a Requisition Template.
9798
requisition.error.validation.sourceOfRequisitionTemplateColumnCannotBeNull=Source of requisition template column {0} cannot be null.
9899
requisition.error.validation.stockoutDaysCantBeGreaterThanLengthOfPeriod=Total stockout days cannot be greater than length of processing period.
99100
requisition.error.validation.cannotConvertToOrderWithoutApprovedQty=Requisition with UUID {0} cannot be converted to an order, because the approved quantity column is not enabled in the requisition template.

src/test/java/org/openlmis/requisition/testutils/FacilityTypeDtoDataBuilder.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,15 @@ public FacilityTypeDtoDataBuilder withActive(Boolean active) {
6161
this.active = active;
6262
return this;
6363
}
64+
65+
public FacilityTypeDtoDataBuilder withCode(String code) {
66+
this.code = code;
67+
return this;
68+
}
69+
70+
public FacilityTypeDtoDataBuilder withId(UUID id) {
71+
this.id = id;
72+
return this;
73+
}
74+
6475
}

src/test/java/org/openlmis/requisition/validate/RequisitionTemplateDtoValidatorTest.java

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import static org.openlmis.requisition.i18n.MessageKeys.ERROR_OPTION_NOT_AVAILABLE;
3838
import static org.openlmis.requisition.i18n.MessageKeys.ERROR_SOURCE_NOT_AVAILABLE;
3939
import static org.openlmis.requisition.i18n.MessageKeys.ERROR_SOURCE_OF_REQUISITION_TEMPLATE_COLUMN_CANNOT_BE_NULL;
40+
import static org.openlmis.requisition.i18n.MessageKeys.ERROR_VALIDATION_CANNOT_ASSIGN_WARD_SERVICE_TYPE;
4041
import static org.openlmis.requisition.i18n.MessageKeys.ERROR_VALIDATION_COLUMN_DEFINITION_MODIFIED;
4142
import static org.openlmis.requisition.i18n.MessageKeys.ERROR_VALIDATION_COLUMN_DEFINITION_NOT_FOUND;
4243
import static org.openlmis.requisition.i18n.MessageKeys.ERROR_VALIDATION_FIELD_CANNOT_BE_NULL;
@@ -51,7 +52,7 @@
5152
import static org.openlmis.requisition.validate.RequisitionTemplateDtoValidator.CALCULATED_ORDER_QUANTITY;
5253
import static org.openlmis.requisition.validate.RequisitionTemplateDtoValidator.COLUMNS_MAP;
5354
import static org.openlmis.requisition.validate.RequisitionTemplateDtoValidator.FACILITY_TYPE;
54-
import static org.openlmis.requisition.validate.RequisitionTemplateDtoValidator.FACILITY_TYPE_ID;
55+
import static org.openlmis.requisition.validate.RequisitionTemplateDtoValidator.FACILITY_TYPES;
5556
import static org.openlmis.requisition.validate.RequisitionTemplateDtoValidator.MAX_COLUMN_DEFINITION_LENGTH;
5657
import static org.openlmis.requisition.validate.RequisitionTemplateDtoValidator.NUMBER_OF_PERIODS_TO_AVERAGE;
5758
import static org.openlmis.requisition.validate.RequisitionTemplateDtoValidator.PROGRAM;
@@ -64,6 +65,7 @@
6465
import static org.openlmis.requisition.validate.RequisitionTemplateDtoValidator.TOTAL_LOSSES_AND_ADJUSTMENTS;
6566
import static org.openlmis.requisition.validate.RequisitionTemplateDtoValidator.TOTAL_RECEIVED_QUANTITY;
6667
import static org.openlmis.requisition.validate.RequisitionTemplateDtoValidator.TOTAL_STOCKOUT_DAYS;
68+
import static org.openlmis.requisition.validate.RequisitionTemplateDtoValidator.WARD_SERVICE_TYPE;
6769

6870
import java.util.Optional;
6971
import java.util.Random;
@@ -75,22 +77,22 @@
7577
import org.junit.runner.RunWith;
7678
import org.mockito.InjectMocks;
7779
import org.mockito.Mock;
78-
import org.mockito.runners.MockitoJUnitRunner;
80+
import org.mockito.junit.MockitoJUnitRunner;
7981
import org.openlmis.requisition.domain.AvailableRequisitionColumn;
8082
import org.openlmis.requisition.domain.AvailableRequisitionColumnOption;
8183
import org.openlmis.requisition.domain.RequisitionTemplate;
8284
import org.openlmis.requisition.domain.RequisitionTemplateColumn;
8385
import org.openlmis.requisition.domain.RequisitionTemplateColumnDataBuilder;
8486
import org.openlmis.requisition.domain.RequisitionTemplateDataBuilder;
8587
import org.openlmis.requisition.dto.AvailableRequisitionColumnOptionDto;
86-
import org.openlmis.requisition.dto.FacilityTypeDto;
8788
import org.openlmis.requisition.dto.RequisitionTemplateColumnDto;
8889
import org.openlmis.requisition.dto.RequisitionTemplateDto;
8990
import org.openlmis.requisition.repository.AvailableRequisitionColumnRepository;
9091
import org.openlmis.requisition.service.referencedata.FacilityTypeReferenceDataService;
9192
import org.openlmis.requisition.service.referencedata.ProgramReferenceDataService;
9293
import org.openlmis.requisition.testutils.AvailableRequisitionColumnDataBuilder;
9394
import org.openlmis.requisition.testutils.AvailableRequisitionColumnOptionDataBuilder;
95+
import org.openlmis.requisition.testutils.FacilityTypeDtoDataBuilder;
9496
import org.openlmis.requisition.testutils.ProgramDtoDataBuilder;
9597
import org.openlmis.requisition.utils.Message;
9698
import org.springframework.validation.Errors;
@@ -517,11 +519,26 @@ public void shouldRejectIfFacilityTypeWithSpecifiedIdDoesNotExist() throws Excep
517519
when(facilityTypeReferenceDataService.findOne(facilityTypeId)).thenReturn(null);
518520

519521
validator.validate(requisitionTemplate, errors);
520-
verify(errors).rejectValue(eq(FACILITY_TYPE_ID),
522+
verify(errors).rejectValue(eq(FACILITY_TYPES),
521523
eq(new Message(ERROR_VALIDATION_REFERENCED_OBJECT_DOES_NOT_EXIST,
522524
FACILITY_TYPE, facilityTypeId).toString()));
523525
}
524526

527+
@Test
528+
public void shouldRejectIfFacilityTypeIsWardService() throws Exception {
529+
RequisitionTemplateDto requisitionTemplate = generateTemplate();
530+
UUID facilityTypeId = requisitionTemplate.getFacilityTypeIds().iterator().next();
531+
when(facilityTypeReferenceDataService.findOne(facilityTypeId))
532+
.thenReturn(new FacilityTypeDtoDataBuilder()
533+
.withId(facilityTypeId)
534+
.withCode(WARD_SERVICE_TYPE)
535+
.buildAsDto());
536+
537+
validator.validate(requisitionTemplate, errors);
538+
verify(errors).rejectValue(eq(FACILITY_TYPES),
539+
eq(new Message(ERROR_VALIDATION_CANNOT_ASSIGN_WARD_SERVICE_TYPE).toString()));
540+
}
541+
525542
@Test
526543
public void shouldRejectWhenSourceInRequisitionTemplateColumnIsNull() throws Exception {
527544
RequisitionTemplateDto requisitionTemplate = generateTemplate();
@@ -709,7 +726,7 @@ private void mockResponses(RequisitionTemplateDto template) {
709726

710727
for (UUID facilityTypeId : template.getFacilityTypeIds()) {
711728
when(facilityTypeReferenceDataService.findOne(facilityTypeId)).thenReturn(
712-
new FacilityTypeDto());
729+
new FacilityTypeDtoDataBuilder().buildAsDto());
713730
}
714731
}
715732

0 commit comments

Comments
 (0)