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 a085692895..91c165cd80 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 @@ -97,7 +97,13 @@ class OntologyResponderV2(responderData: ResponderData) extends Responder(respon superClassOfRelations: Map[SmartIri, Set[SmartIri]], subPropertyOfRelations: Map[SmartIri, Set[SmartIri]], guiAttributeDefinitions: Map[SmartIri, Set[SalsahGuiAttributeDefinition]], - standoffProperties: Set[SmartIri]) + standoffProperties: Set[SmartIri]) { + lazy val allPropertyDefs: Map[SmartIri, PropertyInfoContentV2] = ontologies.values + .flatMap(_.properties.map { + case (propertyIri, readPropertyInfo) => propertyIri -> readPropertyInfo.entityInfoContent + }) + .toMap + } /** * Receives a message of type [[OntologiesResponderRequestV2]], and returns an appropriate response message. @@ -163,7 +169,7 @@ class OntologyResponderV2(responderData: ResponderData) extends Responder(respon */ private def loadOntologies(featureFactoryConfig: FeatureFactoryConfig, requestingUser: UserADM): Future[SuccessResponseV2] = { - for { + val loadOntologiesFuture: Future[SuccessResponseV2] = for { _ <- Future { if (!(requestingUser.id == KnoraSystemInstances.Users.SystemUser.id || requestingUser.permissions.isSystemAdmin)) { throw ForbiddenException(s"Only a system administrator can reload ontologies") @@ -211,8 +217,19 @@ class OntologyResponderV2(responderData: ResponderData) extends Responder(respon ontologyGraphs: Iterable[OntologyGraph] <- Future.sequence(ontologyGraphResponseFutures) _ = makeOntologyCache(allOntologyMetadata, ontologyGraphs) - } yield SuccessResponseV2("Ontologies loaded.") + + loadOntologiesFuture.recover { + case exception: Throwable => + exception match { + case inconsistentRepositoryDataException: InconsistentRepositoryDataException => + log.error(inconsistentRepositoryDataException.message) + SuccessResponseV2( + s"An error occurred when loading ontologies: ${inconsistentRepositoryDataException.message}") + + case other => throw other + } + } } /** @@ -895,24 +912,16 @@ class OntologyResponderV2(responderData: ResponderData) extends Responder(respon } } - // A cardinality on a property with a boolean object must be 1 or 0-1. - - val invalidCardinalitiesOnBooleanProps: Set[SmartIri] = directCardinalities.filter { - case (propertyIri, knoraCardinalityInfo) => - val propertyObjectClassConstraint: SmartIri = allPropertyDefs(propertyIri).requireIriObject( - OntologyConstants.KnoraBase.ObjectClassConstraint.toSmartIri, - throw InconsistentRepositoryDataException( - s"Property $propertyIri has no knora-base:objectClassConstraint") - ) - propertyObjectClassConstraint == OntologyConstants.KnoraBase.BooleanValue.toSmartIri && - !(knoraCardinalityInfo.cardinality == Cardinality.MustHaveOne || knoraCardinalityInfo.cardinality == Cardinality.MayHaveOne) - }.keySet - - if (invalidCardinalitiesOnBooleanProps.nonEmpty) { - throw InconsistentRepositoryDataException( - s"Class $classIri has one or more invalid cardinalities on boolean properties: ${invalidCardinalitiesOnBooleanProps - .mkString(", ")}") - } + // Check for invalid cardinalities on boolean properties. + checkForInvalidBooleanCardinalities( + classIri = classIri, + directCardinalities = directCardinalities, + allPropertyDefs = allPropertyDefs, + schemaForErrors = InternalSchema, + errorFun = { msg: String => + throw InconsistentRepositoryDataException(msg) + } + ) // All its base classes with Knora IRIs must also be resource classes. for (baseClass <- classDef.subClassOf) { @@ -1023,6 +1032,42 @@ class OntologyResponderV2(responderData: ResponderData) extends Responder(respon } } + /** + * Checks for invalid cardinalities on boolean properties. + * + * @param classIri the class IRI. + * @param directCardinalities the cardinalities directly defined on the class. + * @param allPropertyDefs all property definitions. + */ + def checkForInvalidBooleanCardinalities(classIri: SmartIri, + directCardinalities: Map[SmartIri, KnoraCardinalityInfo], + allPropertyDefs: Map[SmartIri, PropertyInfoContentV2], + schemaForErrors: OntologySchema, + errorFun: String => Nothing): Unit = { + // A cardinality on a property with a boolean object must be 1 or 0-1. + + val invalidCardinalitiesOnBooleanProps: Set[SmartIri] = directCardinalities.filter { + case (propertyIri, knoraCardinalityInfo) => + val objectClassConstraintIri = OntologyConstants.KnoraBase.ObjectClassConstraint.toSmartIri + + val propertyObjectClassConstraint: SmartIri = allPropertyDefs(propertyIri).requireIriObject( + objectClassConstraintIri, + errorFun(s"Property ${propertyIri + .toOntologySchema(schemaForErrors)} has no ${objectClassConstraintIri.toOntologySchema(schemaForErrors)}") + ) + + propertyObjectClassConstraint == OntologyConstants.KnoraBase.BooleanValue.toSmartIri && + !(knoraCardinalityInfo.cardinality == Cardinality.MustHaveOne || knoraCardinalityInfo.cardinality == Cardinality.MayHaveOne) + }.keySet + + if (invalidCardinalitiesOnBooleanProps.nonEmpty) { + errorFun( + s"Class ${classIri.toOntologySchema(schemaForErrors).toSparql} has one or more invalid cardinalities on boolean properties: ${invalidCardinalitiesOnBooleanProps + .map(_.toOntologySchema(schemaForErrors).toSparql) + .mkString(", ")}") + } + } + /** * Constructs a map of property IRIs to [[ReadPropertyInfoV2]] instances, based on property definitions loaded from the * triplestore. @@ -2504,6 +2549,17 @@ class OntologyResponderV2(responderData: ResponderData) extends Responder(respon case None => () } + // Check for invalid cardinalities on boolean properties. + checkForInvalidBooleanCardinalities( + classIri = internalClassDef.classIri, + directCardinalities = internalClassDef.directCardinalities, + allPropertyDefs = cacheData.allPropertyDefs, + schemaForErrors = ApiV2Complex, + errorFun = { msg: String => + throw BadRequestException(msg) + } + ) + (classDefWithAddedLinkValueProps, cardinalitiesForClassWithInheritance) } 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 0bad7597d8..d0711aff7a 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 @@ -77,7 +77,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { override lazy val rdfDataObjects: Seq[RdfDataObject] = List(exampleSharedOntology, anythingData) - private def customLoadTestData(rdfDataObjs: List[RdfDataObject], expectOK: Boolean = false): Unit = { + private def loadInvalidTestData(rdfDataObjs: List[RdfDataObject]): Unit = { storeManager ! ResetRepositoryContent(rdfDataObjs) expectMsg(5 minutes, ResetRepositoryContentACK()) @@ -86,9 +86,8 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { requestingUser = KnoraSystemInstances.Users.SystemUser ) - if (expectOK) { - expectMsgType[SuccessResponseV2](10.seconds) - } + val response: SuccessResponseV2 = expectMsgType[SuccessResponseV2](10.seconds) + assert(response.message.contains("An error occurred when loading ontologies")) } "The ontology responder v2" should { @@ -3386,6 +3385,39 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { } } + "not add an 0-n cardinality for a boolean property" in { + val classIri = AnythingOntologyIri.makeEntityIri("Nothing") + + val classInfoContent = ClassInfoContentV2( + classIri = classIri, + predicates = Map( + OntologyConstants.Rdf.Type.toSmartIri -> PredicateInfoV2( + predicateIri = OntologyConstants.Rdf.Type.toSmartIri, + objects = Seq(SmartIriLiteralV2(OntologyConstants.Owl.Class.toSmartIri)) + ) + ), + directCardinalities = Map( + AnythingOntologyIri.makeEntityIri("hasNothingness") -> KnoraCardinalityInfo(cardinality = + Cardinality.MayHaveMany, + guiOrder = Some(0)) + ), + ontologySchema = ApiV2Complex + ) + + responderManager ! AddCardinalitiesToClassRequestV2( + classInfoContent = classInfoContent, + lastModificationDate = anythingLastModDate, + apiRequestID = UUID.randomUUID, + featureFactoryConfig = defaultFeatureFactoryConfig, + requestingUser = anythingAdminUser + ) + + expectMsgPF(timeout) { + case msg: akka.actor.Status.Failure => + msg.cause.isInstanceOf[BadRequestException] should ===(true) + } + } + "add a cardinality for the property anything:hasNothingness to the class anything:Nothing" in { val classIri = AnythingOntologyIri.makeEntityIri("Nothing") @@ -4518,9 +4550,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load an ontology containing a class that's missing a cardinality for a link value property" in { @@ -4530,9 +4560,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load an ontology containing a class that's missing a cardinality for a link property" in { @@ -4542,9 +4570,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load an ontology containing a class with a cardinality whose subject class constraint is incompatible with the class" in { @@ -4554,9 +4580,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load an ontology containing a resource class without an rdfs:label" in { @@ -4566,9 +4590,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load an ontology containing a resource property without an rdfs:label" in { @@ -4578,9 +4600,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load an ontology containing a resource class that is also a standoff class" in { @@ -4590,9 +4610,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load an ontology containing a resource class with a cardinality on an undefined property" in { @@ -4602,9 +4620,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load an ontology containing a resource class with a directly defined cardinality on a non-resource property" in { @@ -4614,9 +4630,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load an ontology containing a resource class with a cardinality on knora-base:resourceProperty" in { @@ -4626,9 +4640,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load an ontology containing a resource class with a cardinality on knora-base:hasValue" in { @@ -4638,9 +4650,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load an ontology containing a resource class with a base class that has a Knora IRI but isn't a resource class" in { @@ -4650,9 +4660,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load an ontology containing a standoff class with a cardinality on a resource property" in { @@ -4662,9 +4670,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load an ontology containing a standoff class with a base class that's not a standoff class" in { @@ -4674,9 +4680,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load an ontology containing a property with a subject class constraint of foaf:Person" in { @@ -4686,9 +4690,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load an ontology containing a Knora value property with a subject class constraint of knora-base:TextValue" in { @@ -4698,9 +4700,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load an ontology containing a property with a subject class constraint of salsah-gui:Guielement" in { @@ -4710,9 +4710,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load an ontology containing a property with an object class constraint of foaf:Person" in { @@ -4722,9 +4720,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load an ontology containing a property whose object class constraint is incompatible with its base property" in { @@ -4734,9 +4730,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load an ontology containing a class with cardinalities for a link property and a matching link value property, except that the link property isn't really a link property" in { @@ -4746,9 +4740,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load an ontology containing a class with cardinalities for a link property and a matching link value property, except that the link value property isn't really a link value property" in { @@ -4758,9 +4750,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load an ontology containing a resource property with no object class constraint" ignore { // Consistency checks don't allow this in GraphDB. @@ -4770,9 +4760,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load an ontology containing a resource property with no rdfs:label" in { @@ -4782,9 +4770,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load an ontology containing a property that's a subproperty of both knora-base:hasValue and knora-base:hasLinkTo" in { @@ -4794,9 +4780,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load an ontology containing a property that's a subproperty of knora-base:hasFileValue" in { @@ -4806,9 +4790,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load an ontology containing a resource property with a base property that has a Knora IRI but isn't a resource property" in { @@ -4818,9 +4800,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load an ontology containing a property that contains salsah-gui:guiOrder" ignore { // Consistency checks don't allow this in GraphDB. @@ -4830,9 +4810,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load an ontology containing a cardinality that contains salsah-gui:guiElement" in { @@ -4842,9 +4820,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load an ontology containing a cardinality that contains salsah-gui:guiAttribute" in { @@ -4854,9 +4830,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load a project-specific ontology containing an owl:TransitiveProperty" in { @@ -4866,9 +4840,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load a project-specific ontology with a class that has cardinalities both on property P and on a subproperty of P" in { @@ -4878,9 +4850,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load a project-specific ontology containing mismatched cardinalities for a link property and a link value property" in { @@ -4890,9 +4860,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load a project-specific ontology containing an invalid cardinality on a boolean property" in { @@ -4902,9 +4870,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load a project-specific ontology containing a class with a cardinality on a property from a non-shared ontology in another project" in { @@ -4914,9 +4880,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load a project-specific ontology containing a class with a base class defined in a non-shared ontology in another project" in { @@ -4926,9 +4890,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load a project-specific ontology containing a property with a base property defined in a non-shared ontology in another project" in { @@ -4938,9 +4900,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load a project-specific ontology containing a property whose subject class constraint is defined in a non-shared ontology in another project" in { @@ -4950,9 +4910,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load a project-specific ontology containing a property whose object class constraint is defined in a non-shared ontology in another project" in { @@ -4962,9 +4920,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } "not load a project-specific ontology containing a class with two cardinalities that override the same base class cardinality of 1 or 0-1" in { @@ -4974,9 +4930,7 @@ class OntologyResponderV2Spec extends CoreSpec() with ImplicitSender { name = "http://www.knora.org/ontology/invalid" )) - customLoadTestData(invalidOnto) - expectMsgType[akka.actor.Status.Failure](timeout).cause - .isInstanceOf[InconsistentRepositoryDataException] should ===(true) + loadInvalidTestData(invalidOnto) } } }