diff --git a/src/main/java/org/folio/marc4ld/configuration/property/Marc4LdRules.java b/src/main/java/org/folio/marc4ld/configuration/property/Marc4LdRules.java index 4ef8969..d6d49f4 100644 --- a/src/main/java/org/folio/marc4ld/configuration/property/Marc4LdRules.java +++ b/src/main/java/org/folio/marc4ld/configuration/property/Marc4LdRules.java @@ -73,6 +73,7 @@ public static class Marc2ldCondition { private String ind1; private String ind2; private List controlFields; + private boolean skip; } @Data diff --git a/src/main/java/org/folio/marc4ld/service/condition/ConditionCheckerImpl.java b/src/main/java/org/folio/marc4ld/service/condition/ConditionCheckerImpl.java index e4ea163..c8880d2 100644 --- a/src/main/java/org/folio/marc4ld/service/condition/ConditionCheckerImpl.java +++ b/src/main/java/org/folio/marc4ld/service/condition/ConditionCheckerImpl.java @@ -45,7 +45,9 @@ public boolean isMarc2LdConditionSatisfied(Marc4LdRules.FieldRule fieldRule, Dat if (isNull(condition)) { return true; } - return isInd1Condition(dataField, condition) + return + !condition.isSkip() + && isInd1Condition(dataField, condition) && isInd2Condition(dataField, condition) && isControlFieldConditions(controlFields, condition) && isAllOfFieldConditions(dataField, condition) diff --git a/src/main/resources/marc4ld.yml b/src/main/resources/marc4ld.yml index ade953f..c54b733 100644 --- a/src/main/resources/marc4ld.yml +++ b/src/main/resources/marc4ld.yml @@ -571,6 +571,13 @@ bibFieldRules: subfields: a: NOTE append: true + - types: WORK + parent: INSTANCE + predicate: INSTANTIATES + subfields: + a: NOTE + marc2ldCondition: + skip: true 501: - types: INSTANCE subfields: diff --git a/src/test/java/org/folio/marc4ld/mapper/field500/Ld2Marc500IT.java b/src/test/java/org/folio/marc4ld/mapper/field500/Ld2Marc500IT.java new file mode 100644 index 0000000..7ae5517 --- /dev/null +++ b/src/test/java/org/folio/marc4ld/mapper/field500/Ld2Marc500IT.java @@ -0,0 +1,57 @@ +package org.folio.marc4ld.mapper.field500; + +import static org.folio.ld.dictionary.PropertyDictionary.NOTE; +import static org.folio.ld.dictionary.ResourceTypeDictionary.INSTANCE; +import static org.folio.ld.dictionary.ResourceTypeDictionary.WORK; +import static org.folio.marc4ld.mapper.test.TestUtil.loadResourceAsString; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.assertj.core.api.AssertionsForClassTypes; +import org.folio.ld.dictionary.PredicateDictionary; +import org.folio.ld.dictionary.model.Resource; +import org.folio.marc4ld.mapper.test.MonographTestUtil; +import org.folio.marc4ld.mapper.test.SpringTestConfig; +import org.folio.marc4ld.service.ld2marc.Ld2MarcMapperImpl; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.SpringBootTest; + +@EnableConfigurationProperties +@SpringBootTest(classes = SpringTestConfig.class) +class Ld2Marc500IT { + + @Autowired + private Ld2MarcMapperImpl ld2MarcMapper; + + @Test + void shouldMapField500() { + // given + var expectedMarc = loadResourceAsString("fields/500/marc_500.jsonl"); + var resource = createResourceWith500(); + + //when + var result = ld2MarcMapper.toMarcJson(resource); + + // then + AssertionsForClassTypes.assertThat(result) + .isEqualTo(expectedMarc); + } + + private Resource createResourceWith500() { + var work = MonographTestUtil.createResource( + Map.of(NOTE, List.of("note 2")), + Set.of(WORK), + Collections.emptyMap() + ).setLabel("Work: label"); + + return MonographTestUtil.createResource( + Map.of(NOTE, List.of("note 1")), + Set.of(INSTANCE), + Map.of(PredicateDictionary.INSTANTIATES, List.of(work)) + ); + } +} diff --git a/src/test/java/org/folio/marc4ld/mapper/field500/Marc2Ld500IT.java b/src/test/java/org/folio/marc4ld/mapper/field500/Marc2Ld500IT.java new file mode 100644 index 0000000..ed105ae --- /dev/null +++ b/src/test/java/org/folio/marc4ld/mapper/field500/Marc2Ld500IT.java @@ -0,0 +1,36 @@ +package org.folio.marc4ld.mapper.field500; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.folio.marc4ld.mapper.test.TestUtil.loadResourceAsString; +import static org.folio.marc4ld.mapper.test.TestUtil.validateResource; + +import java.util.List; +import java.util.Map; +import org.assertj.core.api.InstanceOfAssertFactories; +import org.folio.ld.dictionary.ResourceTypeDictionary; +import org.folio.marc4ld.Marc2LdTestBase; +import org.folio.marc4ld.test.helper.ResourceEdgeHelper; +import org.junit.jupiter.api.Test; + +class Marc2Ld500IT extends Marc2LdTestBase { + + @Test + void shouldMapField500() { + // given + var marc = loadResourceAsString("fields/500/marc_500.jsonl"); + + // when + var result = marcBibToResource(marc); + + // then + assertThat(result) + .satisfies(resource -> validateResource(resource, + List.of(ResourceTypeDictionary.INSTANCE), + Map.of( + "http://bibfra.me/vocab/lite/note", List.of("note 1", "note 2") + ), "" + )).extracting(ResourceEdgeHelper::getEdges) + .asInstanceOf(InstanceOfAssertFactories.LIST) + .isEmpty(); + } +} diff --git a/src/test/resources/fields/500/marc_500.jsonl b/src/test/resources/fields/500/marc_500.jsonl new file mode 100644 index 0000000..430add6 --- /dev/null +++ b/src/test/resources/fields/500/marc_500.jsonl @@ -0,0 +1,22 @@ +{ + "leader" : "00124nam a2200061uc 4500", + "fields" : [ { + "008" : " " + }, { + "500" : { + "subfields" : [ { + "a" : "note 1" + } ], + "ind1" : " ", + "ind2" : " " + } + }, { + "500" : { + "subfields" : [ { + "a" : "note 2" + } ], + "ind1" : " ", + "ind2" : " " + } + } ] +} \ No newline at end of file