Skip to content

Commit

Permalink
refactor(subfields-validation) update NonRepeatableSubfieldRuleValida…
Browse files Browse the repository at this point in the history
…tor to receive subfield index from Reference object
  • Loading branch information
SvitlanaKovalova1 committed Sep 10, 2024
1 parent 0df53e2 commit a2db652
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ public static Map<Character, SubfieldDto> requiredSubfields(List<SubfieldDto> su
.collect(Collectors.toMap(subfield -> subfield.getCode().charAt(0), Function.identity()));
}

public static Map<Character, SubfieldDto> nonRepeatableSubfields(List<SubfieldDto> subfieldDto) {
return subfieldDto == null ? Map.of() : subfieldDto
public static Map<Character, SubfieldDto> nonRepeatableSubfields(List<SubfieldDto> subfieldDtos) {
return subfieldDtos == null ? Map.of() : subfieldDtos
.stream()
.filter(subfield -> Boolean.FALSE.equals(subfield.getRepeatable()))
.collect(Collectors.toMap(subfield -> subfield.getCode().charAt(0), Function.identity()));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package org.folio.rspec.validation.validator.marc.impl;

import java.util.List;
import java.util.stream.Collectors;
import org.folio.rspec.domain.dto.DefinitionType;
import org.folio.rspec.domain.dto.SeverityType;
import org.folio.rspec.domain.dto.SpecificationFieldDto;
Expand Down Expand Up @@ -30,11 +29,9 @@ public List<ValidationError> validate(List<MarcSubfield> marcSubfields, Specific
var nonRepeatableSubfields = SpecificationUtils.nonRepeatableSubfields(specification.getSubfields());

return marcSubfields.stream()
.collect(Collectors.groupingBy(MarcSubfield::code))
.entrySet()
.stream()
.filter(subfield -> subfield.getValue().size() > 1 && nonRepeatableSubfields.get(subfield.getKey()) != null)
.map(subfield -> buildError(subfield.getValue().get(0), nonRepeatableSubfields.get(subfield.getKey())))
.filter(subfield ->
subfield.reference().getSubfieldIndex() > 0 && nonRepeatableSubfields.get(subfield.code()) != null)
.map(subfield -> buildError(subfield, nonRepeatableSubfields.get(subfield.code())))
.toList();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -168,12 +168,12 @@ void testNonRepeatableSubfieldValidation() {
.hasSize(6)
.extracting(ValidationError::getPath, ValidationError::getRuleCode)
.containsExactlyInAnyOrder(
tuple("100[0]$d[0]", MarcRuleCode.NON_REPEATABLE_SUBFIELD.getCode()),
tuple("100[0]$d[1]", MarcRuleCode.NON_REPEATABLE_SUBFIELD.getCode()),
tuple("100[0]$d[0]", MarcRuleCode.MISSING_SUBFIELD.getCode()),
tuple("650[0]$w[0]", MarcRuleCode.NON_REPEATABLE_SUBFIELD.getCode()),
tuple("047[0]$w[0]", MarcRuleCode.NON_REPEATABLE_SUBFIELD.getCode()),
tuple("047[0]$d[0]", MarcRuleCode.NON_REPEATABLE_SUBFIELD.getCode()),
tuple("245[0]$d[0]", MarcRuleCode.NON_REPEATABLE_SUBFIELD.getCode())
tuple("650[0]$w[1]", MarcRuleCode.NON_REPEATABLE_SUBFIELD.getCode()),
tuple("047[0]$w[1]", MarcRuleCode.NON_REPEATABLE_SUBFIELD.getCode()),
tuple("047[0]$d[1]", MarcRuleCode.NON_REPEATABLE_SUBFIELD.getCode()),
tuple("245[0]$d[1]", MarcRuleCode.NON_REPEATABLE_SUBFIELD.getCode())
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,11 @@ void validate_whenNonRepeatableSubfield_shouldReturnValidationError(char subfiel
when(translationProvider.format(any(), any(), any())).thenReturn("message");

var errors = validator.validate(
List.of(getSubfield(subfield1), getSubfield(subfield2), getSubfield(subfield3)), getFieldDefinition());
List.of(
getSubfield(subfield1, 0),
getSubfield(subfield2, 0),
getSubfield(subfield3, 1)),
getFieldDefinition());

assertEquals(1, errors.size());
ValidationError error = errors.get(0);
Expand All @@ -54,16 +58,20 @@ void validate_whenNonRepeatableSubfield_shouldReturnValidationError(char subfiel
@Test
void validate_whenNonRepeatableSubfield_shouldReturnEmptyList() {
List<ValidationError> errors = validator.validate(
List.of(getSubfield('f'), getSubfield('b'), getSubfield('t')), getFieldDefinition());
List.of(
getSubfield('f', 0),
getSubfield('b', 0),
getSubfield('t', 0)),
getFieldDefinition());

assertTrue(errors.isEmpty());
}

public static Stream<Arguments> nonRepeatableSubfieldTestSource() {
return Stream.of(
arguments('f', 'a', 'f'),
arguments('a', 'f', 'f'),
arguments('c', 'b', 'b'),
arguments('t', 't', 'k'));
arguments('k', 't', 't'));
}

private static SpecificationFieldDto getFieldDefinition() {
Expand All @@ -80,7 +88,7 @@ private static SpecificationFieldDto getFieldDefinition() {
new SubfieldDto().code("t").repeatable(false)));
}

private static MarcSubfield getSubfield(char subfield) {
return new MarcSubfield(Reference.forSubfield(Reference.forTag("tag"), subfield), "subfield value");
private static MarcSubfield getSubfield(char subfield, int subfieldIndex) {
return new MarcSubfield(Reference.forSubfield(Reference.forTag("tag"), subfield, subfieldIndex), "subfield value");
}
}

0 comments on commit a2db652

Please sign in to comment.