diff --git a/NEWS.md b/NEWS.md index c3dcadcff..31239e0a7 100644 --- a/NEWS.md +++ b/NEWS.md @@ -112,6 +112,7 @@ - Use system user context for processing kafka messages [MODLD-1026](https://folio-org.atlassian.net/browse/MODLD-1026) - Update dimensions property URI [MODLD-1024](https://folio-org.atlassian.net/browse/MODLD-1024) - Use GitHub Workflows for Maven [MODLD-971](https://folio-org.atlassian.net/browse/MODLD-971) +- Get rid of RESOURCE_PREFERRED property [MODLD-1028](https://folio-org.atlassian.net/browse/MODLD-1028) ## 1.0.4 (04-24-2025) - Work Edit form - Instance read-only section: "Notes about the instance" data is not shown [MODLD-716](https://folio-org.atlassian.net/browse/MODLD-716) diff --git a/src/main/java/org/folio/linked/data/mapper/dto/resource/common/ReferenceMapperUnit.java b/src/main/java/org/folio/linked/data/mapper/dto/resource/common/ReferenceMapperUnit.java index 6a8ef1cbd..5b06c9f59 100644 --- a/src/main/java/org/folio/linked/data/mapper/dto/resource/common/ReferenceMapperUnit.java +++ b/src/main/java/org/folio/linked/data/mapper/dto/resource/common/ReferenceMapperUnit.java @@ -1,5 +1,6 @@ package org.folio.linked.data.mapper.dto.resource.common; +import static java.util.Objects.nonNull; import static org.folio.linked.data.util.ResourceUtils.ensureLatestReplaced; import lombok.RequiredArgsConstructor; @@ -9,7 +10,6 @@ import org.folio.linked.data.model.entity.Resource; import org.folio.linked.data.model.entity.ResourceTypeEntity; import org.folio.linked.data.service.reference.ReferenceService; -import org.folio.linked.data.util.ResourceUtils; @RequiredArgsConstructor public abstract class ReferenceMapperUnit implements SingleResourceMapperUnit { @@ -21,7 +21,7 @@ protected ReferenceResponse toReference(Resource resource) { return new ReferenceResponse() .id(String.valueOf(latestResource.getId())) .label(latestResource.getLabel()) - .isPreferred(isPreferred(latestResource)) + .isPreferred(isFolioResource(latestResource)) .types(latestResource.getTypes().stream().map(ResourceTypeEntity::getUri).toList()); } @@ -31,7 +31,7 @@ public Resource toEntity(Object dto, Resource parentEntity) { return referenceService.resolveReference(reference); } - protected boolean isPreferred(Resource resource) { - return ResourceUtils.isPreferred(resource); + protected boolean isFolioResource(Resource resource) { + return nonNull(resource.getFolioMetadata()); } } diff --git a/src/main/java/org/folio/linked/data/mapper/dto/resource/common/agent/AgentMapperUnit.java b/src/main/java/org/folio/linked/data/mapper/dto/resource/common/agent/AgentMapperUnit.java index 963573fa8..fff2a37bf 100644 --- a/src/main/java/org/folio/linked/data/mapper/dto/resource/common/agent/AgentMapperUnit.java +++ b/src/main/java/org/folio/linked/data/mapper/dto/resource/common/agent/AgentMapperUnit.java @@ -1,10 +1,10 @@ package org.folio.linked.data.mapper.dto.resource.common.agent; +import static java.util.Objects.nonNull; import static java.util.Optional.ofNullable; import static org.folio.ld.dictionary.PredicateDictionary.CONTRIBUTOR; import static org.folio.ld.dictionary.PredicateDictionary.CREATOR; import static org.folio.linked.data.util.ResourceUtils.ensureLatestReplaced; -import static org.folio.linked.data.util.ResourceUtils.isPreferred; import java.util.Set; import lombok.RequiredArgsConstructor; @@ -35,7 +35,7 @@ public

P toDto(Resource resourceToConvert, P parentDto, ResourceMappingConte .id(String.valueOf(resourceToConvert.getId())) .label(resourceToConvert.getLabel()) .type(resourceToConvert.getTypes().iterator().next().getUri()) - .isPreferred(isPreferred(resourceToConvert)); + .isPreferred(nonNull(resourceToConvert.getFolioMetadata())); agentRoleAssigner.assignRoles(agent, context.parentResource()); if (context.predicate().getUri().equals(CREATOR.getUri())) { diff --git a/src/main/java/org/folio/linked/data/mapper/dto/resource/common/work/sub/reference/SubjectMapperUnit.java b/src/main/java/org/folio/linked/data/mapper/dto/resource/common/work/sub/reference/SubjectMapperUnit.java index 6d60080a0..a3a84675d 100644 --- a/src/main/java/org/folio/linked/data/mapper/dto/resource/common/work/sub/reference/SubjectMapperUnit.java +++ b/src/main/java/org/folio/linked/data/mapper/dto/resource/common/work/sub/reference/SubjectMapperUnit.java @@ -1,14 +1,10 @@ package org.folio.linked.data.mapper.dto.resource.common.work.sub.reference; -import static java.util.Optional.ofNullable; import static org.folio.ld.dictionary.PredicateDictionary.FOCUS; import static org.folio.ld.dictionary.PredicateDictionary.SUBJECT; import static org.folio.ld.dictionary.PredicateDictionary.SUB_FOCUS; -import static org.folio.ld.dictionary.PropertyDictionary.RESOURCE_PREFERRED; import static org.folio.ld.dictionary.ResourceTypeDictionary.CONCEPT; -import static org.folio.linked.data.util.ResourceUtils.copyWithoutPreferred; -import java.util.Optional; import java.util.Set; import org.folio.linked.data.domain.dto.Reference; import org.folio.linked.data.domain.dto.WorkRequest; @@ -20,7 +16,6 @@ import org.folio.linked.data.service.reference.ReferenceService; import org.folio.linked.data.service.resource.hash.HashService; import org.springframework.stereotype.Component; -import tools.jackson.databind.JsonNode; @Component @MapperUnit(type = CONCEPT, predicate = SUBJECT, requestDto = Reference.class) @@ -55,17 +50,9 @@ public

P toDto(Resource resourceToConvert, P parentDto, ResourceMappingConte } @Override - public boolean isPreferred(Resource resource) { - return getPreferredFromDoc(resource) - .orElseGet(() -> hasNoSubFocusEdges(resource) && isFocusEdgePreferred(resource)); - } - - private Optional getPreferredFromDoc(Resource resource) { - return ofNullable(resource.getDoc()) - .map(doc -> doc.get(RESOURCE_PREFERRED.getValue())) - .filter(jsonNode -> !jsonNode.isEmpty()) - .map(jsonNode -> jsonNode.get(0)) - .map(JsonNode::asBoolean); + public boolean isFolioResource(Resource resource) { + return super.isFolioResource(resource) + || hasNoSubFocusEdges(resource) && isFocusEdgeFolioResource(resource); } private boolean hasNoSubFocusEdges(Resource resource) { @@ -74,19 +61,19 @@ private boolean hasNoSubFocusEdges(Resource resource) { .noneMatch(predicate -> predicate.equals(SUB_FOCUS.getUri())); } - private boolean isFocusEdgePreferred(Resource resource) { + private boolean isFocusEdgeFolioResource(Resource resource) { return resource.getOutgoingEdges().stream() .filter(edge -> edge.getPredicate().getUri().equals(FOCUS.getUri())) .findFirst() .map(ResourceEdge::getTarget) - .flatMap(this::getPreferredFromDoc) + .map(super::isFolioResource) .orElse(false); } private Resource wrapWithConcept(Resource subject) { var concept = new Resource() .setLabel(subject.getLabel()) - .setDoc(copyWithoutPreferred(subject)) + .setDoc(subject.getDoc().deepCopy()) .addTypes(CONCEPT); subject.getTypes().forEach(concept::addType); concept.addOutgoingEdge(new ResourceEdge(concept, subject, FOCUS)); diff --git a/src/main/java/org/folio/linked/data/service/resource/graph/ResourceGraphServiceImpl.java b/src/main/java/org/folio/linked/data/service/resource/graph/ResourceGraphServiceImpl.java index 9c4e28409..c0337d710 100644 --- a/src/main/java/org/folio/linked/data/service/resource/graph/ResourceGraphServiceImpl.java +++ b/src/main/java/org/folio/linked/data/service/resource/graph/ResourceGraphServiceImpl.java @@ -5,8 +5,6 @@ import static java.util.stream.Collectors.toCollection; import static org.apache.commons.lang3.ObjectUtils.notEqual; import static org.folio.ld.dictionary.PredicateDictionary.REPLACED_BY; -import static org.folio.ld.dictionary.PropertyDictionary.RESOURCE_PREFERRED; -import static org.folio.linked.data.util.ResourceUtils.isPreferred; import static org.springframework.transaction.annotation.Propagation.REQUIRES_NEW; import java.util.LinkedHashSet; @@ -110,7 +108,7 @@ private ResourceSaveResult updateResource(Resource existingResource, Resource in existingResource.setDoc(mergeDocs(existingResource, incomingResource)); existingResource.setActive(incomingResource.isActive()); addFolioMetadataIfAbsent(existingResource, incomingResource.getFolioMetadata()); - removeReplacedByEdgeIfPreferred(existingResource); + removeReplacedByEdgeIfFolioResource(existingResource); return ResourceSaveResult.updated(existingResource); } @@ -127,20 +125,11 @@ private void addFolioMetadataIfAbsent(Resource existingResource, FolioMetadata i } private JsonNode mergeDocs(Resource existingResource, Resource incomingResource) { - var mergedDoc = JsonUtils.merge(existingResource.getDoc(), incomingResource.getDoc()); - resetPreferredFlagWithIncomingValue(incomingResource, mergedDoc); - return mergedDoc; + return JsonUtils.merge(existingResource.getDoc(), incomingResource.getDoc()); } - private void resetPreferredFlagWithIncomingValue(Resource incomingResource, JsonNode mergedDoc) { - var resourcePreferred = RESOURCE_PREFERRED.getValue(); - ofNullable(incomingResource.getDoc()) - .flatMap(incomingDoc -> JsonUtils.getProperty(incomingDoc, resourcePreferred)) - .ifPresent(incomingPreferredFlag -> JsonUtils.setProperty(mergedDoc, resourcePreferred, incomingPreferredFlag)); - } - - private void removeReplacedByEdgeIfPreferred(Resource resource) { - if (isPreferred(resource)) { + private void removeReplacedByEdgeIfFolioResource(Resource resource) { + if (nonNull(resource.getFolioMetadata())) { resource.getOutgoingEdges().removeIf(edge -> edge.getPredicate().getUri().equals(REPLACED_BY.getUri())); } } diff --git a/src/main/java/org/folio/linked/data/service/resource/marc/ResourceMarcAuthorityServiceImpl.java b/src/main/java/org/folio/linked/data/service/resource/marc/ResourceMarcAuthorityServiceImpl.java index 21c047585..4fdb509c3 100644 --- a/src/main/java/org/folio/linked/data/service/resource/marc/ResourceMarcAuthorityServiceImpl.java +++ b/src/main/java/org/folio/linked/data/service/resource/marc/ResourceMarcAuthorityServiceImpl.java @@ -5,7 +5,6 @@ import static org.folio.linked.data.domain.dto.AssignmentCheckResponseDto.InvalidAssignmentReasonEnum.NOT_VALID_FOR_TARGET; import static org.folio.linked.data.domain.dto.AssignmentCheckResponseDto.InvalidAssignmentReasonEnum.UNSUPPORTED_MARC; import static org.folio.linked.data.util.Constants.MSG_NOT_FOUND_IN; -import static org.folio.linked.data.util.ResourceUtils.setPreferred; import java.util.Objects; import java.util.Optional; @@ -171,7 +170,6 @@ private Long replaceAuthority(Resource resource) { private Long markObsoleteAndReplace(Resource previous, Resource incoming) { if (Objects.equals(previous.getTypes(), incoming.getTypes())) { var previousObsolete = markObsolete(previous); - setPreferred(incoming, true); addReplacedByRelation(previousObsolete, incoming); logMarcAction(incoming, "not found by id, but found by srsId [" + incoming.getFolioMetadata().getSrsId() + "]", @@ -180,7 +178,6 @@ private Long markObsoleteAndReplace(Resource previous, Resource incoming) { } markObsolete(previous); logMarcAction(previous, "set as obsolete", "be saved"); - setPreferred(incoming, true); var saveGraphResult = resourceGraphService.saveMergingGraph(incoming); logMarcAction(incoming, "set as preferred", "be saved"); return saveGraphResult.rootResource().getId(); @@ -212,7 +209,6 @@ private Long saveAndPublishEvent(Resource resource, Function getTypeUris(Resource resource) { return resource.getTypes() .stream() @@ -153,18 +142,6 @@ public static List getTypeUris(Resource resource) { .toList(); } - public static JsonNode copyWithoutPreferred(Resource subject) { - return ofNullable(subject.getDoc()) - .map(node -> { - var copiedDoc = node.deepCopy(); - if (copiedDoc.isObject()) { - ((ObjectNode) copiedDoc).remove(RESOURCE_PREFERRED.getValue()); - } - return copiedDoc; - }) - .orElse(null); - } - public static List getPropertyValues(Resource resource, PropertyDictionary property) { return ofNullable(resource.getDoc()) .map(doc -> doc.get(property.getValue())) diff --git a/src/test/java/org/folio/linked/data/e2e/mappings/work/subject/HubAsSubjectIT.java b/src/test/java/org/folio/linked/data/e2e/mappings/work/subject/HubAsSubjectIT.java index e5c30269d..ddda2a8a8 100644 --- a/src/test/java/org/folio/linked/data/e2e/mappings/work/subject/HubAsSubjectIT.java +++ b/src/test/java/org/folio/linked/data/e2e/mappings/work/subject/HubAsSubjectIT.java @@ -8,7 +8,6 @@ import lombok.SneakyThrows; import org.folio.linked.data.e2e.mappings.PostResourceIT; import org.folio.linked.data.model.entity.Resource; -import org.folio.linked.data.util.ResourceUtils; import org.springframework.test.web.servlet.ResultActions; public class HubAsSubjectIT extends PostResourceIT { @@ -57,7 +56,6 @@ protected void validateGraph(Resource resource) { assertThat(concept.getLabel()).isEqualTo("Hub AAP 😊"); validateResourceType(concept, "http://bibfra.me/vocab/lite/Concept", "http://bibfra.me/vocab/lite/Hub"); - assertThat(ResourceUtils.isPreferred(concept)).isFalse(); var hub = getFirstOutgoingResource(concept, "http://bibfra.me/vocab/lite/focus"); validateResourceType(hub, "http://bibfra.me/vocab/lite/Hub"); diff --git a/src/test/java/org/folio/linked/data/e2e/resource/AuthorityUpdateAndReadWorkIT.java b/src/test/java/org/folio/linked/data/e2e/resource/AuthorityUpdateAndReadWorkIT.java index 466d45bbe..ed56ba252 100644 --- a/src/test/java/org/folio/linked/data/e2e/resource/AuthorityUpdateAndReadWorkIT.java +++ b/src/test/java/org/folio/linked/data/e2e/resource/AuthorityUpdateAndReadWorkIT.java @@ -122,8 +122,8 @@ private List readAndAssertAuthoritiesInTheDb() { assertThat(authoritiesFromDb).hasSize(2); var expectedLabelCreated = "bValue, aValue, cValue, qValue, dValue -- xValue -- zValue -- yValue -- vValue"; var expectedLabelUpdated = expectedLabelCreated.replace("aValue", "newAValue"); - assertAuthority(authoritiesFromDb.getFirst(), expectedLabelCreated, false, false, authoritiesFromDb.get(1)); - assertAuthority(authoritiesFromDb.get(1), expectedLabelUpdated, true, true, null); + assertAuthority(authoritiesFromDb.getFirst(), expectedLabelCreated, false, authoritiesFromDb.get(1)); + assertAuthority(authoritiesFromDb.get(1), expectedLabelUpdated, true, null); return authoritiesFromDb; } diff --git a/src/test/java/org/folio/linked/data/e2e/resource/MergeResourcesIT.java b/src/test/java/org/folio/linked/data/e2e/resource/MergeResourcesIT.java index f590eb51c..7cf41aa20 100644 --- a/src/test/java/org/folio/linked/data/e2e/resource/MergeResourcesIT.java +++ b/src/test/java/org/folio/linked/data/e2e/resource/MergeResourcesIT.java @@ -15,13 +15,13 @@ import org.folio.ld.dictionary.PropertyDictionary; import org.folio.ld.dictionary.ResourceTypeDictionary; import org.folio.linked.data.e2e.base.IntegrationTest; +import org.folio.linked.data.model.entity.FolioMetadata; import org.folio.linked.data.model.entity.Resource; import org.folio.linked.data.model.entity.ResourceEdge; import org.folio.linked.data.service.resource.graph.ResourceGraphService; import org.folio.linked.data.service.tenant.TenantScopedExecutionService; import org.folio.linked.data.test.MonographTestUtil; import org.folio.linked.data.test.resource.ResourceTestService; -import org.folio.linked.data.util.JsonUtils; import org.folio.spring.tools.kafka.KafkaAdminService; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -136,7 +136,7 @@ void testResourcesMerging1_and_2() { } @Test - void should_remove_replacedBy_edge_when_resource_becomes_preferred() { + void shouldRemoveReplacedByEdge_whenResourceGetsFolioMetadata() { // given var replacedByTargetResource = createResource(2L, Map.of()).setDoc(getInitialDoc()); var lccnResource = new Resource().setIdAndRefreshEdges(3L).addTypes(ID_LCCN); @@ -153,6 +153,7 @@ void should_remove_replacedBy_edge_when_resource_becomes_preferred() { var newSourceResource = createResource(1L, Map.of(PredicateDictionary.STATUS, List.of(statusResource)) ).setDoc(getNewDoc()); + newSourceResource.setFolioMetadata(new FolioMetadata(newSourceResource)); resourceGraphService.saveMergingGraph(newSourceResource); // then @@ -190,26 +191,15 @@ private void assertResourceDoc(String id, JsonNode expected) { } private JsonNode getInitialDoc() { - return getDocWithPreferredFlag("samples/json_merge/existing.jsonl", false); + return TEST_JSON_MAPPER.readTree(loadResourceAsString("samples/json_merge/existing.jsonl")); } private JsonNode getNewDoc() { - return getDocWithPreferredFlag("samples/json_merge/incoming.jsonl", true); + return TEST_JSON_MAPPER.readTree(loadResourceAsString("samples/json_merge/incoming.jsonl")); } private JsonNode getMergedDoc() { - return getDocWithPreferredFlag("samples/json_merge/merged.jsonl", true); - } - - private JsonNode getDocWithPreferredFlag(String docFile, boolean isPreferred) { - var preferredJson = """ - { - "http://library.link/vocab/resourcePreferred": [ - "$PREFERRED_FLAG" - ] - } - """.replace("$PREFERRED_FLAG", String.valueOf(isPreferred)); - return JsonUtils.merge(TEST_JSON_MAPPER.readTree(loadResourceAsString(docFile)), TEST_JSON_MAPPER.readTree(preferredJson)); + return TEST_JSON_MAPPER.readTree(loadResourceAsString("samples/json_merge/merged.jsonl")); } private Resource createGraph1toto2() { diff --git a/src/test/java/org/folio/linked/data/integration/kafka/listener/handler/SourceRecordDomainEventHandlerIT.java b/src/test/java/org/folio/linked/data/integration/kafka/listener/handler/SourceRecordDomainEventHandlerIT.java index 1c57661b1..a9764ceac 100644 --- a/src/test/java/org/folio/linked/data/integration/kafka/listener/handler/SourceRecordDomainEventHandlerIT.java +++ b/src/test/java/org/folio/linked/data/integration/kafka/listener/handler/SourceRecordDomainEventHandlerIT.java @@ -191,7 +191,7 @@ void shouldProcessAuthoritySourceRecordDomainCreateEvent() { assertThat(found).isPresent(); var expectedLabel = "bValue, aaValue, cValue, qValue, dValue -- xValue -- zValue -- yValue -- vValue"; - assertAuthority(found.get(), expectedLabel, true, true, null); + assertAuthority(found.get(), expectedLabel, true, null); } @Test @@ -229,8 +229,8 @@ void shouldProcessAuthoritySourceRecordDomainUpdateEvent() { var updatedResource = found.getFirst(); var expectedLabelCreated = "bValue, aValue, cValue, qValue, dValue -- xValue -- zValue -- yValue -- vValue"; var expectedLabelUpdated = expectedLabelCreated.replace("aValue", "newAValue"); - assertAuthority(createdResource, expectedLabelCreated, false, false, updatedResource); - assertAuthority(updatedResource, expectedLabelUpdated, true, true, null); + assertAuthority(createdResource, expectedLabelCreated, false, updatedResource); + assertAuthority(updatedResource, expectedLabelUpdated, true, null); } } diff --git a/src/test/java/org/folio/linked/data/mapper/dto/resource/common/work/sub/reference/SubjectMapperUnitTest.java b/src/test/java/org/folio/linked/data/mapper/dto/resource/common/work/sub/reference/SubjectMapperUnitTest.java index aef7bb25b..611112637 100644 --- a/src/test/java/org/folio/linked/data/mapper/dto/resource/common/work/sub/reference/SubjectMapperUnitTest.java +++ b/src/test/java/org/folio/linked/data/mapper/dto/resource/common/work/sub/reference/SubjectMapperUnitTest.java @@ -8,13 +8,13 @@ import static org.folio.ld.dictionary.ResourceTypeDictionary.PERSON; import static org.folio.ld.dictionary.ResourceTypeDictionary.PLACE; import static org.folio.ld.dictionary.ResourceTypeDictionary.TOPIC; -import static org.folio.linked.data.test.TestUtil.TEST_JSON_MAPPER; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.List; import org.folio.linked.data.domain.dto.Reference; import org.folio.linked.data.domain.dto.WorkResponse; +import org.folio.linked.data.model.entity.FolioMetadata; import org.folio.linked.data.model.entity.Resource; import org.folio.linked.data.model.entity.ResourceEdge; import org.folio.linked.data.model.entity.ResourceTypeEntity; @@ -44,7 +44,6 @@ void toEntity_wrapsWithConcept_whenSubjectIsNotOfTypeConcept() { // given var name = "Sample Name"; var doc = JsonNodeFactory.instance.objectNode(); - doc.set("http://library.link/vocab/resourcePreferred", JsonNodeFactory.instance.arrayNode().add("true")); doc.set("http://bibfra.me/vocab/lite/name", JsonNodeFactory.instance.arrayNode().add(name)); var resource = new Resource().setLabel("Label").addTypes(PERSON).setDoc(doc); var subjectDto = new Reference() @@ -57,7 +56,6 @@ void toEntity_wrapsWithConcept_whenSubjectIsNotOfTypeConcept() { // then assertThat(result).isNotNull(); - assertThat(result.getDoc().has("http://library.link/vocab/resourcePreferred")).isFalse(); assertThat(result.getDoc().get("http://bibfra.me/vocab/lite/name").get(0).asString()).isEqualTo(name); assertThat(result.getTypes().stream().map(ResourceTypeEntity::getUri)).contains(CONCEPT.getUri()); assertThat(result.getOutgoingEdges()) @@ -91,14 +89,10 @@ void toDto_shouldConvertResourceToDto() { var label = "label string"; var id = 1L; var resource = new Resource() - .setDoc(TEST_JSON_MAPPER.readTree(""" - { - "http://library.link/vocab/resourcePreferred": ["true"] - } - """)) .setLabel(label) .setIdAndRefreshEdges(id) .addTypes(CONCEPT, PLACE); + resource.setFolioMetadata(new FolioMetadata(resource)); // when var result = subjectMapperUnit.toDto(resource, new WorkResponse(2), null); @@ -117,21 +111,11 @@ void toDto_preferredFlagShouldBeFalse_whenResourceHasSubFocusEdge() { // given var focus = new Resource() .setLabel("John Doe") - .addTypes(PERSON) - .setDoc(TEST_JSON_MAPPER.readTree(""" - { - "http://library.link/vocab/resourcePreferred": ["true"] - } - """)); + .addTypes(PERSON); var subFocus = new Resource() .setLabel("Childhood") - .addTypes(TOPIC) - .setDoc(TEST_JSON_MAPPER.readTree(""" - { - "http://library.link/vocab/resourcePreferred": ["true"] - } - """)); + .addTypes(TOPIC); var conceptWithSubFocus = new Resource() .setLabel("John Doe -- Childhood") @@ -154,12 +138,8 @@ void toDto_shouldFetchPreferredFlagFromFocus_whenResourceHasNoSubFocusEdges() { // given var focus = new Resource() .setLabel("John Doe") - .addTypes(PERSON) - .setDoc(TEST_JSON_MAPPER.readTree(""" - { - "http://library.link/vocab/resourcePreferred": ["true"] - } - """)); + .addTypes(PERSON); + focus.setFolioMetadata(new FolioMetadata(focus)); var conceptWithoutSubFocus = new Resource() .setLabel("John Doe") diff --git a/src/test/java/org/folio/linked/data/service/resource/marc/ResourceMarcAuthorityServiceIT.java b/src/test/java/org/folio/linked/data/service/resource/marc/ResourceMarcAuthorityServiceIT.java index ec868945c..f26429679 100644 --- a/src/test/java/org/folio/linked/data/service/resource/marc/ResourceMarcAuthorityServiceIT.java +++ b/src/test/java/org/folio/linked/data/service/resource/marc/ResourceMarcAuthorityServiceIT.java @@ -3,7 +3,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.folio.ld.dictionary.PredicateDictionary.REPLACED_BY; import static org.folio.linked.data.test.TestUtil.TEST_JSON_MAPPER; -import static org.folio.linked.data.util.ResourceUtils.isPreferred; import java.util.Set; import org.folio.ld.dictionary.ResourceTypeDictionary; @@ -52,8 +51,8 @@ void testAuthorityPreferenceToggle_when_authority_is_reverted_back_to_original_s var v1ResourceFromDb = resourceTestService.getResourceById("1", 1); var v2ResourceFromDb = resourceTestService.getResourceById("2", 1); validateResourceIdBySrsId(srsId, v2Resource.getId()); - assertResourceIsPreferred(v2ResourceFromDb); - assertResourceIsNotPreferred(v1ResourceFromDb); + assertResourceIsActive(v2ResourceFromDb); + assertResourceIsNotActive(v1ResourceFromDb); assertReplacedBy(v1ResourceFromDb, v2ResourceFromDb); // Revert the authority back to the original (v1) version @@ -62,8 +61,8 @@ void testAuthorityPreferenceToggle_when_authority_is_reverted_back_to_original_s v1ResourceFromDb = resourceTestService.getResourceById("1", 1); v2ResourceFromDb = resourceTestService.getResourceById("2", 1); validateResourceIdBySrsId(srsId, v1Resource.getId()); - assertResourceIsPreferred(v1ResourceFromDb); - assertResourceIsNotPreferred(v2ResourceFromDb); + assertResourceIsActive(v1ResourceFromDb); + assertResourceIsNotActive(v2ResourceFromDb); assertReplacedBy(v2ResourceFromDb, v1ResourceFromDb); } @@ -72,15 +71,13 @@ private void validateResourceIdBySrsId(String srsId, Long expectedResourceId) { assertThat(resourceIdOptional).contains(expectedResourceId); } - private void assertResourceIsPreferred(org.folio.linked.data.model.entity.Resource resource) { + private void assertResourceIsActive(org.folio.linked.data.model.entity.Resource resource) { assertThat(resource.isActive()).isTrue(); - assertThat(isPreferred(resource)).isTrue(); assertThat(resource.getOutgoingEdges()).isEmpty(); } - private void assertResourceIsNotPreferred(org.folio.linked.data.model.entity.Resource resource) { + private void assertResourceIsNotActive(org.folio.linked.data.model.entity.Resource resource) { assertThat(resource.isActive()).isFalse(); - assertThat(isPreferred(resource)).isFalse(); } private void assertReplacedBy(org.folio.linked.data.model.entity.Resource resource, diff --git a/src/test/java/org/folio/linked/data/service/resource/marc/ResourceMarcAuthorityServiceImplTest.java b/src/test/java/org/folio/linked/data/service/resource/marc/ResourceMarcAuthorityServiceImplTest.java index df926ca61..6817623ae 100644 --- a/src/test/java/org/folio/linked/data/service/resource/marc/ResourceMarcAuthorityServiceImplTest.java +++ b/src/test/java/org/folio/linked/data/service/resource/marc/ResourceMarcAuthorityServiceImplTest.java @@ -4,7 +4,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.folio.ld.dictionary.PredicateDictionary.REPLACED_BY; -import static org.folio.ld.dictionary.PropertyDictionary.RESOURCE_PREFERRED; import static org.folio.ld.dictionary.ResourceTypeDictionary.CONCEPT; import static org.folio.ld.dictionary.ResourceTypeDictionary.PERSON; import static org.folio.ld.dictionary.ResourceTypeDictionary.WORK; @@ -172,8 +171,6 @@ void saveMarcAuthority_shouldNotReplaceOldAuthority_ifNewAuthorityHasDifferentTy // then assertThat(actualId).isEqualTo(newAuthority.getId()); assertThat(newAuthority.getOutgoingEdges()).isEmpty(); - assertThat(newAuthority.getDoc().get(RESOURCE_PREFERRED.getValue()).get(0).stringValue()).isEqualTo("true"); - assertThat(existedAuthority.getDoc().get(RESOURCE_PREFERRED.getValue()).get(0).stringValue()).isEqualTo("false"); } @Test @@ -200,11 +197,9 @@ void saveMarcAuthority_shouldCreateNewAuthorityVersionAndMarkOldAsObsolete_ifGiv // then assertThat(result).isEqualTo(id); assertThat(existed.isActive()).isFalse(); - assertThat(existed.getDoc().get(RESOURCE_PREFERRED.getValue()).get(0).stringValue()).isEqualTo("false"); assertThat(existed.getFolioMetadata()).isNull(); verify(resourceGraphService).saveMergingGraph(mapped); verify(applicationEventPublisher).publishEvent(new ResourceReplacedEvent(existed, mapped.getId())); - assertThat(mapped.getDoc().get(RESOURCE_PREFERRED.getValue()).get(0).stringValue()).isEqualTo("true"); assertThat(mapped.getIncomingEdges()).contains(new ResourceEdge(existed, mapped, REPLACED_BY)); } diff --git a/src/test/java/org/folio/linked/data/test/MonographTestUtil.java b/src/test/java/org/folio/linked/data/test/MonographTestUtil.java index 47df09ded..ab99fe271 100644 --- a/src/test/java/org/folio/linked/data/test/MonographTestUtil.java +++ b/src/test/java/org/folio/linked/data/test/MonographTestUtil.java @@ -51,7 +51,6 @@ import static org.folio.ld.dictionary.PropertyDictionary.PROJECTED_PROVISION_DATE; import static org.folio.ld.dictionary.PropertyDictionary.PROVIDER_DATE; import static org.folio.ld.dictionary.PropertyDictionary.QUALIFIER; -import static org.folio.ld.dictionary.PropertyDictionary.RESOURCE_PREFERRED; import static org.folio.ld.dictionary.PropertyDictionary.SIMPLE_PLACE; import static org.folio.ld.dictionary.PropertyDictionary.SOURCE; import static org.folio.ld.dictionary.PropertyDictionary.STATEMENT_OF_RESPONSIBILITY; @@ -341,8 +340,7 @@ public static Resource getSampleWork(Resource linkedInstance) { var genre1 = createResource( Map.of( - NAME, List.of("genre 1"), - RESOURCE_PREFERRED, List.of("true") + NAME, List.of("genre 1") ), Set.of(FORM), emptyMap() @@ -435,22 +433,19 @@ public static Resource getSampleHub() { } public static Resource getSubjectPersonPreferred() { - return getSubjectAndConcept("person", -6999093488677112301L, -3951421359442339069L, PERSON, true); + return getSubjectAndConcept("person", -6999093488677112301L, -3951421359442339069L, PERSON); } public static Resource getSubjectFormNotPreferred() { - return getSubjectAndConcept("form", -4718450084121784027L, -354125450028352284L, FORM, false); + return getSubjectAndConcept("form", -4718450084121784027L, -354125450028352284L, FORM); } private static Resource getSubjectAndConcept(String name, Long subjectId, Long conceptId, - ResourceTypeDictionary type, - boolean isPreferred) { + ResourceTypeDictionary type) { var subject = createResource( - isPreferred - ? Map.of(NAME, List.of("Subject " + name), RESOURCE_PREFERRED, List.of("true")) - : Map.of(NAME, List.of("Subject " + name)), + Map.of(NAME, List.of("Subject " + name)), Set.of(type), emptyMap() ).setLabel("subject " + name) diff --git a/src/test/java/org/folio/linked/data/test/TestUtil.java b/src/test/java/org/folio/linked/data/test/TestUtil.java index 23d8e03de..f67b602c8 100644 --- a/src/test/java/org/folio/linked/data/test/TestUtil.java +++ b/src/test/java/org/folio/linked/data/test/TestUtil.java @@ -9,7 +9,6 @@ import static java.util.stream.Collectors.toCollection; import static org.assertj.core.api.Assertions.assertThat; import static org.folio.ld.dictionary.PredicateDictionary.REPLACED_BY; -import static org.folio.ld.dictionary.PropertyDictionary.RESOURCE_PREFERRED; import static org.folio.linked.data.service.lccn.LccnResourceService.LccnResourceSearchResult; import static org.folio.linked.data.util.Constants.STANDALONE_PROFILE; import static org.folio.linked.data.util.JsonUtils.JSON_MAPPER; @@ -151,15 +150,11 @@ public static void awaitAndAssert(ThrowingRunnable throwingRunnable) { public static void assertAuthority(Resource resource, String label, boolean isActive, - boolean isPreferred, Resource replacedBy) { assertThat(resource) .hasFieldOrPropertyWithValue("label", label) .hasFieldOrPropertyWithValue("active", isActive) .satisfies(r -> assertThat(r.getDoc()).isNotEmpty()) - .satisfies(r -> - assertThat(resource.getDoc().get(RESOURCE_PREFERRED.getValue()).get(0).asBoolean()).isEqualTo(isPreferred) - ) .satisfies(r -> assertThat(r.getOutgoingEdges()).isNotEmpty()) .extracting(Resource::getOutgoingEdges) .satisfies(resourceEdges -> assertThat(resourceEdges) diff --git a/src/test/java/org/folio/linked/data/util/ResourceUtilsTest.java b/src/test/java/org/folio/linked/data/util/ResourceUtilsTest.java index 11796e312..e0a4d1757 100644 --- a/src/test/java/org/folio/linked/data/util/ResourceUtilsTest.java +++ b/src/test/java/org/folio/linked/data/util/ResourceUtilsTest.java @@ -23,7 +23,6 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import tools.jackson.databind.node.JsonNodeFactory; @UnitTest class ResourceUtilsTest { @@ -182,35 +181,6 @@ void extractInstancesFromWork_shouldReturnInstancesListWithEdgesToWork_ifGivenRe assertThat(instance2.getOutgoingEdges()).containsOnly(new ResourceEdge(instance2, work, INSTANTIATES)); } - @Test - void test_isPreferred_when_preferred_flag_is_not_set() { - // given - Resource resource = new Resource(); - - // then - assertThat(ResourceUtils.isPreferred(resource)).isFalse(); - } - - @Test - void test_isPreferred_when_preferred_flag_is_set_as_true() { - // given - Resource resource = new Resource(); - ResourceUtils.setPreferred(resource, true); - - // then - assertThat(ResourceUtils.isPreferred(resource)).isTrue(); - } - - @Test - void test_isPreferred_when_preferred_flag_is_set_as_false() { - // given - Resource resource = new Resource(); - ResourceUtils.setPreferred(resource, false); - - // then - assertThat(ResourceUtils.isPreferred(resource)).isFalse(); - } - @ParameterizedTest @MethodSource("dataProvider") void getTypes_shouldReturn_resourceTypes(Resource resource, List expectedTypes) { @@ -219,52 +189,6 @@ void getTypes_shouldReturn_resourceTypes(Resource resource, List expecte .containsExactlyInAnyOrderElementsOf(expectedTypes); } - @Test - void copyWithoutPreferred_removesPreferredProperty_whenDocContainsPreferred() { - // given - var resource = new Resource(); - var doc = JsonNodeFactory.instance.objectNode(); - doc.set("http://library.link/vocab/resourcePreferred", JsonNodeFactory.instance.arrayNode().add("true")); - resource.setDoc(doc); - - // when - var result = ResourceUtils.copyWithoutPreferred(resource); - - // then - assertThat(result).isNotNull(); - assertThat(result.has("http://library.link/vocab/resourcePreferred")).isFalse(); - } - - @Test - void copyWithoutPreferred_returnsNull_whenDocIsNull() { - // given - var resource = new Resource(); - resource.setDoc(null); - - // when - var result = ResourceUtils.copyWithoutPreferred(resource); - - // then - assertThat(result).isNull(); - } - - @Test - void copyWithoutPreferred_returnsUnchangedCopy_whenDocDoesNotContainPreferred() { - // given - var resource = new Resource(); - var doc = JsonNodeFactory.instance.objectNode(); - doc.put("otherProperty", "value"); - resource.setDoc(doc); - - // when - var result = ResourceUtils.copyWithoutPreferred(resource); - - // then - assertThat(result).isNotNull(); - assertThat(result.has("otherProperty")).isTrue(); - assertThat(result.get("otherProperty").asString()).isEqualTo("value"); - } - @Test void addProperty_createsDocAndSetsArrayValue() { // given