From 4f57977e39f004c26595d8e3b82a68067f5ac675 Mon Sep 17 00:00:00 2001 From: Benjamin Geer Date: Mon, 14 Sep 2020 09:24:23 +0200 Subject: [PATCH] fix(OntologyResponderV2): Fix ontology cache update when ontology metadata changed (#1709) --- .../responders/v2/OntologyResponderV2.scala | 2 +- .../v2/OntologyResponderV2Spec.scala | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/webapi/src/main/scala/org/knora/webapi/responders/v2/OntologyResponderV2.scala b/webapi/src/main/scala/org/knora/webapi/responders/v2/OntologyResponderV2.scala index e9edee7095..2d0c68844a 100644 --- a/webapi/src/main/scala/org/knora/webapi/responders/v2/OntologyResponderV2.scala +++ b/webapi/src/main/scala/org/knora/webapi/responders/v2/OntologyResponderV2.scala @@ -1854,7 +1854,7 @@ class OntologyResponderV2(responderData: ResponderData) extends Responder(respon // Update the ontology cache with the unescaped metadata. _ = storeCacheData(cacheData.copy( - ontologies = cacheData.ontologies + (internalOntologyIri -> ReadOntologyV2(ontologyMetadata = unescapedNewMetadata)) + ontologies = cacheData.ontologies + (internalOntologyIri -> cacheData.ontologies(internalOntologyIri).copy(ontologyMetadata = unescapedNewMetadata)) )) } yield ReadOntologyMetadataV2(ontologies = Set(unescapedNewMetadata)) diff --git a/webapi/src/test/scala/org/knora/webapi/responders/v2/OntologyResponderV2Spec.scala b/webapi/src/test/scala/org/knora/webapi/responders/v2/OntologyResponderV2Spec.scala index 51e33a7a3e..07062d91d0 100644 --- a/webapi/src/test/scala/org/knora/webapi/responders/v2/OntologyResponderV2Spec.scala +++ b/webapi/src/test/scala/org/knora/webapi/responders/v2/OntologyResponderV2Spec.scala @@ -2038,6 +2038,27 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { } } + "change the metadata of the 'anything' ontology" in { + val newLabel = "The modified anything ontology" + + responderManager ! ChangeOntologyMetadataRequestV2( + ontologyIri = AnythingOntologyIri, + label = newLabel, + lastModificationDate = anythingLastModDate, + apiRequestID = UUID.randomUUID, + requestingUser = anythingAdminUser + ) + + val response = expectMsgType[ReadOntologyMetadataV2](timeout) + assert(response.ontologies.size == 1) + val metadata = response.ontologies.head + assert(metadata.ontologyIri.toOntologySchema(ApiV2Complex) == AnythingOntologyIri) + assert(metadata.label.contains(newLabel)) + val newAnythingLastModDate = metadata.lastModificationDate.getOrElse(throw AssertionException(s"${metadata.ontologyIri} has no last modification date")) + assert(newAnythingLastModDate.isAfter(anythingLastModDate)) + anythingLastModDate = newAnythingLastModDate + } + "delete the class anything:CardinalityThing" in { val classIri = AnythingOntologyIri.makeEntityIri("CardinalityThing")