diff --git a/docs/03-apis/api-admin/groups.md b/docs/03-apis/api-admin/groups.md index 933cdc9591..85c228f0a2 100644 --- a/docs/03-apis/api-admin/groups.md +++ b/docs/03-apis/api-admin/groups.md @@ -48,7 +48,7 @@ License along with Knora. If not, see . - POST: `/admin/groups` - BODY: - ```JSON +```json { "name": "NewGroup", "description": "NewGroupDescription", @@ -56,10 +56,12 @@ License along with Knora. If not, see . "status": true, "selfjoin": false } - ``` - Additionally, each group can have an optional custom IRI (of @ref:[Knora IRI](../api-v2/knora-iris.md#iris-for-data) form) - specified by the `id` in the request body as below: - ```JSON +``` + +Additionally, each group can have an optional custom IRI (of @ref:[Knora IRI](../api-v2/knora-iris.md#iris-for-data) form) +specified by the `id` in the request body as below: + +```json { "id": "http://rdfh.ch/groups/00FF/group-with-custom-Iri", "name": "GroupWithCustomIRI", @@ -68,7 +70,7 @@ License along with Knora. If not, see . "status": true, "selfjoin": false } - ``` +``` ### Update group information @@ -80,10 +82,10 @@ hasProjectRestrictedGroupAdminPermission (for this group) - PUT: `/admin/groups/` - BODY: -``` +```json { "name": "UpdatedGroupName", - "description": "UpdatedGroupDescription". + "description": "UpdatedGroupDescription", "selfjoin": false } ``` diff --git a/docs/03-apis/api-admin/lists.md b/docs/03-apis/api-admin/lists.md index 486d50056d..bbc77902c9 100644 --- a/docs/03-apis/api-admin/lists.md +++ b/docs/03-apis/api-admin/lists.md @@ -57,22 +57,25 @@ License along with Knora. If not, see . - Required permission: SystemAdmin / ProjectAdmin - POST: `/admin/lists` - BODY: - ```JSON + +```json { "projectIri": "someprojectiri", "labels": [{ "value": "Neue Liste", "language": "de"}], "comments": [] } - ``` - Additionally, each list can have an optional custom IRI (of [Knora IRI](../api-v2/knora-iris.md#iris-for-data) form) specified by the `id` in the request body as below: - ```JSON +``` + +Additionally, each list can have an optional custom IRI (of [Knora IRI](../api-v2/knora-iris.md#iris-for-data) form) specified by the `id` in the request body as below: + +```json { "id": "http://rdfh.ch/lists/0001/a-list-with-IRI", "projectIri": "http://rdfh.ch/projects/0001", "labels": [{ "value": "Neue Liste mit IRI", "language": "de"}], "comments": [] } - ``` +``` ### Create new child node @@ -82,7 +85,8 @@ License along with Knora. If not, see . are currently only appended. - POST: `/admin/lists/` - BODY: - ``` + +```json { "parentNodeIri": "nodeIri", "projectIri": "someprojectiri", @@ -90,7 +94,7 @@ License along with Knora. If not, see . "labels": [{ "value": "New First Child List Node Value", "language": "en"}], "comments": [{ "value": "New First Child List Node Comment", "language": "en"}] } - ``` +``` ### Get list's information @@ -104,14 +108,15 @@ License along with Knora. If not, see . - Update list information - PUT: `/admin/lists/infos/` - BODY: - ``` + +```json { "listIri": "listIri", "projectIri": "someprojectiri", "labels": [{ "value": "Neue geönderte Liste", "language": "de"}, { "value": "Changed list", "language": "en"}], "comments": [{ "value": "Neuer Kommentar", "language": "de"}, { "value": "New comment", "language": "en"}] } - ``` +``` ## List Node Operations diff --git a/docs/03-apis/api-admin/projects.md b/docs/03-apis/api-admin/projects.md index 0b028ec6bd..142bf35326 100644 --- a/docs/03-apis/api-admin/projects.md +++ b/docs/03-apis/api-admin/projects.md @@ -63,13 +63,17 @@ License along with Knora. If not, see . - Optional information: longname, description, keywords, logo - Returns information about the newly created project - Remark: There are two distinct use cases / payload combination: + (1) change ontology and data graph: ontologygraph, datagraph, + (2) basic project information: shortname, longname, description, keywords, logo, institution, status, selfjoin + - TypeScript Docs: projectFormats - CreateProjectApiRequestV1 - POST: `/admin/projects/` - BODY: - ```JSON + +```json { "shortname": "newproject", "longname": "project longname", @@ -79,9 +83,11 @@ License along with Knora. If not, see . "status": true, "selfjoin": false } - ``` - Additionally, each project can have an optional custom IRI (of [Knora IRI](../api-v2/knora-iris.md#iris-for-data) form) specified by the `id` in the request body as below: - ```JSON +``` + +Additionally, each project can have an optional custom IRI (of [Knora IRI](../api-v2/knora-iris.md#iris-for-data) form) specified by the `id` in the request body as below: + +```json { "id": "http://rdfh.ch/projects/3333", "shortname": "newprojectWithIri", @@ -93,7 +99,8 @@ License along with Knora. If not, see . "status": true, "selfjoin": false } - ``` +``` + ### Update project information: - Required permission: SystemAdmin / ProjectAdmin @@ -102,7 +109,8 @@ License along with Knora. If not, see . - TypeScript Docs: projectFormats - ChangeProjectApiRequestV1 - PUT: `/admin/projects/iri/` - BODY: - ```JSON + +```json { "shortname": "newproject", "longname": "project longname", @@ -112,7 +120,7 @@ License along with Knora. If not, see . "status": true, "selfjoin": false } - ``` +``` ### Delete project (update project status): diff --git a/docs/03-apis/api-admin/users.md b/docs/03-apis/api-admin/users.md index 9c8adc35b3..bd8ac92286 100644 --- a/docs/03-apis/api-admin/users.md +++ b/docs/03-apis/api-admin/users.md @@ -67,7 +67,7 @@ License along with Knora. If not, see . - Required permission: none, self-registration is allowed - Required information: email (unique), given name, family name, - password, password, status, systemAdmin + password, status, systemAdmin - Username restrictions: - 4 - 50 characters long - Only contains alphanumeric characters, underscore and dot. @@ -77,7 +77,8 @@ License along with Knora. If not, see . - TypeScript Docs: userFormats - `CreateUserApiRequestV1` - POST: `/admin/users` - BODY: - ```JSON + +```json { "email": "donald.duck@example.org", "givenName": "Donald", @@ -88,11 +89,12 @@ License along with Knora. If not, see . "lang": "en", "systemAdmin": false } - ``` +``` - Additionally, each user can have an optional custom IRI (of [Knora IRI](../api-v2/knora-iris.md#iris-for-data) form) - specified by the `id` in the request body as below: - ```JSON +Additionally, each user can have an optional custom IRI (of [Knora IRI](../api-v2/knora-iris.md#iris-for-data) form) +specified by the `id` in the request body as below: + +```json { "id" : "http://rdfh.ch/users/donaldDuck", "email": "donald.duck@example.org", @@ -104,7 +106,7 @@ License along with Knora. If not, see . "lang": "en", "systemAdmin": false } - ``` +``` ### Update basic user information** @@ -114,7 +116,8 @@ License along with Knora. If not, see . - TypeScript Docs: userFormats - ChangeUserApiRequestADM - PUT: `/admin/users/iri//BasicUserInformation` - BODY: - ``` + +```json { "username": "donald.big.duck", "email": "donald.big.duck@example.org", @@ -122,7 +125,7 @@ License along with Knora. If not, see . "familyName": "Duckmann", "lang": "de" } - ``` +``` ### Update user's password @@ -130,12 +133,13 @@ License along with Knora. If not, see . - Changeable information: password - PUT: `/admin/users/iri//Password` - BODY: - ``` + +```json { "requesterPassword": "test", "newPassword": "test1234" } - ``` +``` ### Delete user @@ -144,11 +148,12 @@ License along with Knora. If not, see . `false`. To un-delete, set `status` to `true`. - PUT: `/admin/users/iri//Status` - BODY: - ``` + +``` { "status": false // true or false } - ``` +``` ### Delete user (-\update user)** @@ -210,11 +215,12 @@ License along with Knora. If not, see . `true` or `false` - PUT: `/admin/users/iri//SystemAdmin` - BODY: - ```JSON + +``` { "systemAdmin": false } - ``` +``` ## Example Data diff --git a/webapi/src/main/scala/org/knora/webapi/messages/admin/responder/projectsmessages/ProjectsMessagesADM.scala b/webapi/src/main/scala/org/knora/webapi/messages/admin/responder/projectsmessages/ProjectsMessagesADM.scala index adee0fcaf9..920dcce87a 100644 --- a/webapi/src/main/scala/org/knora/webapi/messages/admin/responder/projectsmessages/ProjectsMessagesADM.scala +++ b/webapi/src/main/scala/org/knora/webapi/messages/admin/responder/projectsmessages/ProjectsMessagesADM.scala @@ -62,9 +62,8 @@ case class CreateProjectApiRequestADM(id: Option[IRI] = None, implicit protected val stringFormatter: StringFormatter = StringFormatter.getGeneralInstance def toJsValue: JsValue = createProjectApiRequestADMFormat.write(this) - if (description.isEmpty) { - throw BadRequestException("Project description needs to be supplied.") - } + if (description.isEmpty) throw BadRequestException("Project description needs to be supplied.") + stringFormatter.validateOptionalProjectIri(id, throw BadRequestException(s"Invalid project IRI")) } diff --git a/webapi/src/test/scala/org/knora/webapi/e2e/admin/GroupsADME2ESpec.scala b/webapi/src/test/scala/org/knora/webapi/e2e/admin/GroupsADME2ESpec.scala index f1b86a19ce..9de97148a7 100644 --- a/webapi/src/test/scala/org/knora/webapi/e2e/admin/GroupsADME2ESpec.scala +++ b/webapi/src/test/scala/org/knora/webapi/e2e/admin/GroupsADME2ESpec.scala @@ -88,25 +88,6 @@ class GroupsADME2ESpec extends E2ESpec(GroupsADME2ESpec.config) with GroupsADMJs result.id should be ("http://rdfh.ch/groups/00FF/group-with-customIri") } - "return 'BadRequest' if the supplied 'id' is not a valid IRI" in { - val params = - s"""{ "id": "invalid-group-IRI", - | "name": "NewGroupWithInvalidCustomIri", - | "description": "A new group with an invalid custom Iri", - | "project": "${SharedTestDataADM.IMAGES_PROJECT_IRI}", - | "status": true, - | "selfjoin": false - |}""".stripMargin - - - val request = Post(baseApiUrl + s"/admin/groups", HttpEntity(ContentTypes.`application/json`, params)) ~> addCredentials(BasicHttpCredentials(imagesUser01Email, testPass)) - val response: HttpResponse = singleAwaitingRequest(request) - response.status should be (StatusCodes.BadRequest) - val errorMessage : String = Await.result(Unmarshal(response.entity).to[String], 1.second) - val invalidIri: Boolean = errorMessage.contains(s"Invalid group IRI") - invalidIri should be(true) - } - "return 'BadRequest' if the supplied IRI for the group is not unique" in { val params = s"""{ "id": "http://rdfh.ch/groups/00FF/group-with-customIri", diff --git a/webapi/src/test/scala/org/knora/webapi/e2e/admin/ListsADME2ESpec.scala b/webapi/src/test/scala/org/knora/webapi/e2e/admin/ListsADME2ESpec.scala index cf640cc095..cf8d85635e 100644 --- a/webapi/src/test/scala/org/knora/webapi/e2e/admin/ListsADME2ESpec.scala +++ b/webapi/src/test/scala/org/knora/webapi/e2e/admin/ListsADME2ESpec.scala @@ -171,27 +171,6 @@ class ListsADME2ESpec extends E2ESpec(ListsADME2ESpec.config) with SessionJsonPr labels.head should be (StringLiteralV2(value = "New list with a custom IRI", language = Some("en"))) } - "return a BadRequestException during list creation when an invalid list IRI is given" in { - - // invalid list IRI - val params = - s""" - |{ - | "id": "invalid-list-IRI", - | "projectIri": "${SharedTestDataADM.ANYTHING_PROJECT_IRI}", - | "labels": [{ "value": "New List", "language": "en"}], - | "comments": [] - |} - """.stripMargin - - val request = Post(baseApiUrl + s"/admin/lists", HttpEntity(ContentTypes.`application/json`, params)) ~> addCredentials(anythingAdminUserCreds.basicHttpCredentials) - val response: HttpResponse = singleAwaitingRequest(request) - response.status should be(StatusCodes.BadRequest) - val errorMessage : String = Await.result(Unmarshal(response.entity).to[String], 1.second) - val invalidIri: Boolean = errorMessage.contains("Invalid list IRI") - invalidIri should be(true) - } - "return a DuplicateValueException during list creation when the supplied list IRI is not unique" in { // duplicate list IRI diff --git a/webapi/src/test/scala/org/knora/webapi/e2e/admin/ProjectsADME2ESpec.scala b/webapi/src/test/scala/org/knora/webapi/e2e/admin/ProjectsADME2ESpec.scala index d00f9fae7e..677c697cea 100644 --- a/webapi/src/test/scala/org/knora/webapi/e2e/admin/ProjectsADME2ESpec.scala +++ b/webapi/src/test/scala/org/knora/webapi/e2e/admin/ProjectsADME2ESpec.scala @@ -140,29 +140,6 @@ class ProjectsADME2ESpec extends E2ESpec(ProjectsADME2ESpec.config) with Session } - "return 'BadRequest' if the supplied project IRI is not a valid IRI" in { - val params = - s"""{ - | "id": "invalid-project-IRI", - | "shortname": "newprojectWithInvalidIri", - | "shortcode": "2222", - | "longname": "new project with a custom invalid IRI", - | "description": [{"value": "a project created with an invalid custom IRI", "language": "en"}], - | "keywords": ["projectInvalidIRI"], - | "logo": "/fu/bar/baz.jpg", - | "status": true, - | "selfjoin": false - |}""".stripMargin - - - val request = Post(baseApiUrl + s"/admin/projects", HttpEntity(ContentTypes.`application/json`, params)) ~> addCredentials(BasicHttpCredentials(rootEmail, testPass)) - val response: HttpResponse = singleAwaitingRequest(request) - response.status should be (StatusCodes.BadRequest) - val errorMessage : String = Await.result(Unmarshal(response.entity).to[String], 1.second) - val invalidIri: Boolean = errorMessage.contains("Invalid project IRI") - invalidIri should be(true) - } - "return 'BadRequest' if the supplied project IRI is not unique" in { val params = s"""{ @@ -210,8 +187,6 @@ class ProjectsADME2ESpec extends E2ESpec(ProjectsADME2ESpec.config) with Session result.selfjoin should be (false) newProjectIri.set(result.id) - // log.debug("newProjectIri: {}", newProjectIri.get) - } "return a 'BadRequest' if the supplied project shortname during creation is not unique" in { @@ -219,7 +194,7 @@ class ProjectsADME2ESpec extends E2ESpec(ProjectsADME2ESpec.config) with Session s""" |{ | "shortname": "newproject", - | "shortcode"; "1112", + | "shortcode": "1112", | "longname": "project longname", | "description": [{"value": "project description", "language": "en"}], | "keywords": ["keywords"], @@ -232,7 +207,7 @@ class ProjectsADME2ESpec extends E2ESpec(ProjectsADME2ESpec.config) with Session val request = Post(baseApiUrl + s"/admin/projects", HttpEntity(ContentTypes.`application/json`, params)) ~> addCredentials(BasicHttpCredentials(rootEmail, testPass)) val response: HttpResponse = singleAwaitingRequest(request) - // log.debug(s"response: {}", response) + response.status should be (StatusCodes.BadRequest) } @@ -240,7 +215,7 @@ class ProjectsADME2ESpec extends E2ESpec(ProjectsADME2ESpec.config) with Session val params = s""" |{ - | "shortcode"; "1112", + | "shortcode": "1112", | "longname": "project longname", | "description": [{"value": "project description", "language": "en"}], | "keywords": ["keywords"], @@ -250,10 +225,8 @@ class ProjectsADME2ESpec extends E2ESpec(ProjectsADME2ESpec.config) with Session |} """.stripMargin - val request = Post(baseApiUrl + s"/admin/projects", HttpEntity(ContentTypes.`application/json`, params)) ~> addCredentials(BasicHttpCredentials(rootEmail, testPass)) val response: HttpResponse = singleAwaitingRequest(request) - // log.debug(s"response: {}", response) response.status should be (StatusCodes.BadRequest) } @@ -261,7 +234,7 @@ class ProjectsADME2ESpec extends E2ESpec(ProjectsADME2ESpec.config) with Session val params = s""" |{ - | "shortname"; "newproject2", + | "shortname": "newproject2", | "longname": "project longname", | "description": [{"value": "project description", "language": "en"}], | "keywords": ["keywords"], @@ -271,10 +244,8 @@ class ProjectsADME2ESpec extends E2ESpec(ProjectsADME2ESpec.config) with Session |} """.stripMargin - val request = Post(baseApiUrl + s"/admin/projects", HttpEntity(ContentTypes.`application/json`, params)) ~> addCredentials(BasicHttpCredentials(rootEmail, testPass)) val response: HttpResponse = singleAwaitingRequest(request) - // log.debug(s"response: {}", response) response.status should be (StatusCodes.BadRequest) } @@ -282,8 +253,8 @@ class ProjectsADME2ESpec extends E2ESpec(ProjectsADME2ESpec.config) with Session val params = s""" |{ - | "shortcode"; "1114", - | "shortname"; "newproject5", + | "shortcode": "1114", + | "shortname": "newproject5", | "longname": "project longname", | "description": [], | "keywords": ["keywords"], @@ -293,10 +264,8 @@ class ProjectsADME2ESpec extends E2ESpec(ProjectsADME2ESpec.config) with Session |} """.stripMargin - val request = Post(baseApiUrl + s"/admin/projects", HttpEntity(ContentTypes.`application/json`, params)) ~> addCredentials(BasicHttpCredentials(rootEmail, testPass)) val response: HttpResponse = singleAwaitingRequest(request) - // log.debug(s"response: {}", response) response.status should be (StatusCodes.BadRequest) } @@ -305,7 +274,6 @@ class ProjectsADME2ESpec extends E2ESpec(ProjectsADME2ESpec.config) with Session val projectIriEncoded = URLEncoder.encode(newProjectIri.get, "utf-8") val request = Put(baseApiUrl + s"/admin/projects/iri/" + projectIriEncoded, HttpEntity(ContentTypes.`application/json`, SharedTestDataADM.updateProjectRequest)) ~> addCredentials(BasicHttpCredentials(rootEmail, testPass)) val response: HttpResponse = singleAwaitingRequest(request) - // log.debug(s"response: {}", response) response.status should be (StatusCodes.OK) val result: ProjectADM = AkkaHttpUtils.httpResponseToJson(response).fields("project").convertTo[ProjectADM] diff --git a/webapi/src/test/scala/org/knora/webapi/e2e/admin/UsersADME2ESpec.scala b/webapi/src/test/scala/org/knora/webapi/e2e/admin/UsersADME2ESpec.scala index 418b2e1136..595acf95c2 100644 --- a/webapi/src/test/scala/org/knora/webapi/e2e/admin/UsersADME2ESpec.scala +++ b/webapi/src/test/scala/org/knora/webapi/e2e/admin/UsersADME2ESpec.scala @@ -232,29 +232,6 @@ class UsersADME2ESpec extends E2ESpec(UsersADME2ESpec.config) with ProjectsADMJs result.id should be ("http://rdfh.ch/users/userWithCustomIri") } - "return 'BadRequest' if the supplied 'id' is not a valid IRI" in { - val params = - s"""{ - | "id": "invalid-user-IRI", - | "username": "userWithInvalidCustomIri", - | "email": "userWithInvalidCustomIri@example.org", - | "givenName": "a user", - | "familyName": "with an invalid custom Iri", - | "password": "test", - | "status": true, - | "lang": "en", - | "systemAdmin": false - |}""".stripMargin - - - val request = Post(baseApiUrl + s"/admin/users", HttpEntity(ContentTypes.`application/json`, params)) - val response: HttpResponse = singleAwaitingRequest(request) - response.status should be (StatusCodes.BadRequest) - val errorMessage : String = Await.result(Unmarshal(response.entity).to[String], 1.second) - val invalidIri: Boolean = errorMessage.contains(s"Invalid user IRI") - invalidIri should be(true) - } - "return 'BadRequest' if the supplied IRI for the user is not unique" in { val params = s"""{ diff --git a/webapi/src/test/scala/org/knora/webapi/messages/BUILD.bazel b/webapi/src/test/scala/org/knora/webapi/messages/BUILD.bazel index d3aa12e8ad..e75d5c6ef4 100644 --- a/webapi/src/test/scala/org/knora/webapi/messages/BUILD.bazel +++ b/webapi/src/test/scala/org/knora/webapi/messages/BUILD.bazel @@ -1,162 +1,8 @@ package(default_visibility = ["//visibility:public"]) -load("@io_bazel_rules_scala//scala:scala.bzl", "scala_test") -load("//third_party:dependencies.bzl", "BASE_TEST_DEPENDENCIES", "BASE_TEST_DEPENDENCIES_WITH_JSON") - filegroup( name = "SessionMessagesV1", srcs = [ "v1/responder/sessionmessages/SessionMessagesV1.scala", ], ) - -scala_test( - name = "ListsMessagesADMSpec", - size = "small", # 60s - srcs = [ - "admin/responder/listsmessages/ListsMessagesADMSpec.scala", - ], - data = [ - "//knora-ontologies", - "//test_data", - ], - jvm_flags = ["-Dconfig.resource=fuseki.conf"], - # unused_dependency_checker_mode = "warn", - deps = [ - "//webapi:main_library", - "//webapi:test_library", - ] + BASE_TEST_DEPENDENCIES_WITH_JSON, -) - -scala_test( - name = "PermissionsMessagesADMSpec", - size = "small", # 60s - srcs = [ - "admin/responder/permissionsmessages/PermissionsMessagesADMSpec.scala", - ], - data = [ - "//knora-ontologies", - "//test_data", - ], - jvm_flags = ["-Dconfig.resource=fuseki.conf"], - # unused_dependency_checker_mode = "warn", - deps = [ - "//webapi:main_library", - "//webapi:test_library", - "@maven//:org_scalatest_scalatest_2_12", - "@maven//:org_scalactic_scalactic_2_12", - ], -) - -scala_test( - name = "ProjectsMessagesADMSpec", - size = "small", # 60s - srcs = [ - "admin/responder/projectsmessages/ProjectsMessagesADMSpec.scala", - ], - data = [ - "//knora-ontologies", - "//test_data", - ], - jvm_flags = ["-Dconfig.resource=fuseki.conf"], - # unused_dependency_checker_mode = "warn", - deps = [ - "//webapi:main_library", - "//webapi:test_library", - ] + BASE_TEST_DEPENDENCIES_WITH_JSON, -) - -scala_test( - name = "UsersMessagesADMSpec", - size = "small", # 60s - srcs = [ - "admin/responder/usersmessages/UsersMessagesADMSpec.scala", - ], - data = [ - "//knora-ontologies", - "//test_data", - ], - jvm_flags = ["-Dconfig.resource=fuseki.conf"], - # unused_dependency_checker_mode = "warn", - deps = [ - "//webapi:main_library", - "//webapi:test_library", - "@maven//:org_springframework_security_spring_security_core", - ] + BASE_TEST_DEPENDENCIES_WITH_JSON, -) - -scala_test( - name = "TriplestoreMessagesSpec", - size = "small", # 60s - srcs = [ - "store/triplestoremessages/TriplestoreMessagesSpec.scala", - ], - data = [ - "//knora-ontologies", - "//test_data", - ], - jvm_flags = ["-Dconfig.resource=fuseki.conf"], - # unused_dependency_checker_mode = "warn", - deps = [ - "//webapi:main_library", - ] + BASE_TEST_DEPENDENCIES_WITH_JSON, -) - -scala_test( - name = "PermissionMessagesV1Spec", - size = "small", # 60s - srcs = [ - "v1/responder/permissionmessages/PermissionMessagesV1Spec.scala", - ], - data = [ - "//knora-ontologies", - "//test_data", - ], - jvm_flags = ["-Dconfig.resource=fuseki.conf"], - # unused_dependency_checker_mode = "warn", - deps = [ - "//webapi:main_library", - "//webapi:test_library", - "@maven//:org_scalatest_scalatest_2_12", - "@maven//:org_scalactic_scalactic_2_12", - ], -) - -scala_test( - name = "UserMessagesV1Spec", - size = "small", # 60s - srcs = [ - "v1/responder/usermessages/UserMessagesV1Spec.scala", - ], - data = [ - "//knora-ontologies", - "//test_data", - ], - jvm_flags = ["-Dconfig.resource=fuseki.conf"], - # unused_dependency_checker_mode = "warn", - deps = [ - "//webapi:main_library", - "//webapi:test_library", - "@maven//:org_scalatest_scalatest_2_12", - "@maven//:org_scalactic_scalactic_2_12", - "@maven//:org_springframework_security_spring_security_core", - ], -) - -scala_test( - name = "InputOntologyV2Spec", - size = "small", # 60s - srcs = [ - "v2/responder/ontologymessages/InputOntologyV2Spec.scala", - ], - data = [ - "//knora-ontologies", - "//test_data", - ], - jvm_flags = ["-Dconfig.resource=fuseki.conf"], - # unused_dependency_checker_mode = "warn", - deps = [ - "//webapi:main_library", - "//webapi:test_library", - ] + BASE_TEST_DEPENDENCIES, -) diff --git a/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/groupsmessages/BUILD.bazel b/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/groupsmessages/BUILD.bazel new file mode 100644 index 0000000000..586df5b372 --- /dev/null +++ b/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/groupsmessages/BUILD.bazel @@ -0,0 +1,22 @@ +package(default_visibility = ["//visibility:public"]) + +load("@io_bazel_rules_scala//scala:scala.bzl", "scala_test") +load("//third_party:dependencies.bzl", "BASE_TEST_DEPENDENCIES_WITH_JSON") + +scala_test( + name = "GroupsMessagesADMSpec", + size = "small", # 60s + srcs = [ + "GroupsMessagesADMSpec.scala", + ], + data = [ + "//knora-ontologies", + "//test_data", + ], + jvm_flags = ["-Dconfig.resource=fuseki.conf"], + # unused_dependency_checker_mode = "warn", + deps = [ + "//webapi:main_library", + "//webapi:test_library", + ] + BASE_TEST_DEPENDENCIES_WITH_JSON, +) diff --git a/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/groupsmessages/GroupsMessagesADMSpec.scala b/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/groupsmessages/GroupsMessagesADMSpec.scala new file mode 100644 index 0000000000..c63261b5e7 --- /dev/null +++ b/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/groupsmessages/GroupsMessagesADMSpec.scala @@ -0,0 +1,55 @@ +/* + * Copyright © 2015-2019 the contributors (see Contributors.md). + * + * This file is part of Knora. + * + * Knora is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Knora is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public + * License along with Knora. If not, see . + */ + +package org.knora.webapi.messages.admin.responder.groupsmessages + +import com.typesafe.config.ConfigFactory +import org.knora.webapi.{SharedTestDataADM, _} + +object GroupsMessagesADMSpec { + val config = ConfigFactory.parseString( + """ + akka.loglevel = "DEBUG" + akka.stdout-loglevel = "DEBUG" + """.stripMargin) +} + +/** + * This spec is used to test 'GroupAdminMessages'. + */ +class GroupsMessagesADMSpec extends CoreSpec(GroupsMessagesADMSpec.config) { + + "The CreateGroupsApiRequestADM case class" should { + + "return 'BadRequest' if the supplied 'id' is not a valid IRI" in { + + val caught = intercept[BadRequestException]( + CreateGroupApiRequestADM( + id = Some("invalid-group-IRI"), + name = "NewGroupWithInvalidCustomIri", + description = Some("A new group with an invalid custom Iri"), + project = SharedTestDataADM.IMAGES_PROJECT_IRI, + status = true, + selfjoin = false + ) + ) + assert(caught.getMessage === "Invalid group IRI") + } + } +} diff --git a/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/listsmessages/BUILD.bazel b/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/listsmessages/BUILD.bazel new file mode 100644 index 0000000000..324f604c46 --- /dev/null +++ b/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/listsmessages/BUILD.bazel @@ -0,0 +1,22 @@ +package(default_visibility = ["//visibility:public"]) + +load("@io_bazel_rules_scala//scala:scala.bzl", "scala_test") +load("//third_party:dependencies.bzl", "BASE_TEST_DEPENDENCIES_WITH_JSON") + +scala_test( + name = "ListsMessagesADMSpec", + size = "small", # 60s + srcs = [ + "ListsMessagesADMSpec.scala", + ], + data = [ + "//knora-ontologies", + "//test_data", + ], + jvm_flags = ["-Dconfig.resource=fuseki.conf"], + # unused_dependency_checker_mode = "warn", + deps = [ + "//webapi:main_library", + "//webapi:test_library", + ] + BASE_TEST_DEPENDENCIES_WITH_JSON, +) diff --git a/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/listsmessages/ListsMessagesADMSpec.scala b/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/listsmessages/ListsMessagesADMSpec.scala index f78602f135..65000e3832 100644 --- a/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/listsmessages/ListsMessagesADMSpec.scala +++ b/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/listsmessages/ListsMessagesADMSpec.scala @@ -160,6 +160,24 @@ class ListsMessagesADMSpec extends AnyWordSpecLike with Matchers with ListADMJso thrown.getMessage should equal (LABEL_MISSING_ERROR) } + "throw a 'BadRequestException' for `CreateListApiRequestADM` when an invalid list IRI is given" in { + + // invalid list IRI + val payload = + s""" + |{ + | "id": "invalid-list-IRI", + | "projectIri": "${SharedTestDataADM.IMAGES_PROJECT_IRI}", + | "labels": [{ "value": "New List", "language": "en"}], + | "comments": [] + |} + """.stripMargin + + val thrown = the[BadRequestException] thrownBy payload.parseJson.convertTo[CreateListApiRequestADM] + + thrown.getMessage should equal ("Invalid list IRI") + } + "throw 'BadRequestException' for `ChangeListInfoApiRequestADM` when list IRI is empty" in { val payload = @@ -337,4 +355,4 @@ class ListsMessagesADMSpec extends AnyWordSpecLike with Matchers with ListADMJso } } -} \ No newline at end of file +} diff --git a/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/permissionsmessages/BUILD.bazel b/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/permissionsmessages/BUILD.bazel new file mode 100644 index 0000000000..9e67c9aa4d --- /dev/null +++ b/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/permissionsmessages/BUILD.bazel @@ -0,0 +1,23 @@ +package(default_visibility = ["//visibility:public"]) + +load("@io_bazel_rules_scala//scala:scala.bzl", "scala_test") + +scala_test( + name = "PermissionsMessagesADMSpec", + size = "small", # 60s + srcs = [ + "PermissionsMessagesADMSpec.scala", + ], + data = [ + "//knora-ontologies", + "//test_data", + ], + jvm_flags = ["-Dconfig.resource=fuseki.conf"], + # unused_dependency_checker_mode = "warn", + deps = [ + "//webapi:main_library", + "//webapi:test_library", + "@maven//:org_scalatest_scalatest_2_12", + "@maven//:org_scalactic_scalactic_2_12", + ], +) diff --git a/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/projectsmessages/BUILD.bazel b/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/projectsmessages/BUILD.bazel new file mode 100644 index 0000000000..e7ba9a3718 --- /dev/null +++ b/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/projectsmessages/BUILD.bazel @@ -0,0 +1,22 @@ +package(default_visibility = ["//visibility:public"]) + +load("@io_bazel_rules_scala//scala:scala.bzl", "scala_test") +load("//third_party:dependencies.bzl", "BASE_TEST_DEPENDENCIES_WITH_JSON") + +scala_test( + name = "ProjectsMessagesADMSpec", + size = "small", # 60s + srcs = [ + "ProjectsMessagesADMSpec.scala", + ], + data = [ + "//knora-ontologies", + "//test_data", + ], + jvm_flags = ["-Dconfig.resource=fuseki.conf"], + # unused_dependency_checker_mode = "warn", + deps = [ + "//webapi:main_library", + "//webapi:test_library", + ] + BASE_TEST_DEPENDENCIES_WITH_JSON, +) diff --git a/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/projectsmessages/ProjectsMessagesADMSpec.scala b/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/projectsmessages/ProjectsMessagesADMSpec.scala index 9a0077dc68..a47973f1f8 100644 --- a/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/projectsmessages/ProjectsMessagesADMSpec.scala +++ b/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/projectsmessages/ProjectsMessagesADMSpec.scala @@ -30,7 +30,7 @@ object ProjectsMessagesADMSpec { } /** - * This spec is used to test subclasses of the [[org.knora.webapi.messages.v1.responder.usermessages.UsersResponderRequestV1]] class. + * This spec is used to test subclasses of the [[ProjectsMessagesADM]] class. */ class ProjectsMessagesADMSpec extends CoreSpec(ProjectsMessagesADMSpec.config) { @@ -52,7 +52,7 @@ class ProjectsMessagesADMSpec extends CoreSpec(ProjectsMessagesADMSpec.config) { "The CreateProjectApiRequestADM case class" should { "return a 'BadRequest' when project description is not supplied" in { - assertThrows[BadRequestException]( + val caught = intercept[BadRequestException]( CreateProjectApiRequestADM( shortname = "newproject5", shortcode = "1114", @@ -64,6 +64,24 @@ class ProjectsMessagesADMSpec extends CoreSpec(ProjectsMessagesADMSpec.config) { selfjoin = false ) ) + assert(caught.getMessage === "Project description needs to be supplied.") + } + + "return 'BadRequest' if the supplied project IRI is not a valid IRI" in { + val caught = intercept[BadRequestException]( + CreateProjectApiRequestADM( + id = Some("invalid-project-IRI"), + shortname = "newprojectWithInvalidIri", + shortcode = "2222", + longname = Some("new project with a custom invalid IRI"), + description = Seq(StringLiteralV2("a project created with an invalid custom IRI", Some("en"))), + keywords = Seq("projectInvalidIRI"), + logo = Some("/fu/bar/baz.jpg"), + status = true, + selfjoin = false + ) + ) + assert(caught.getMessage === "Invalid project IRI") } } diff --git a/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/usersmessages/BUILD.bazel b/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/usersmessages/BUILD.bazel new file mode 100644 index 0000000000..9cb8b994f2 --- /dev/null +++ b/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/usersmessages/BUILD.bazel @@ -0,0 +1,23 @@ +package(default_visibility = ["//visibility:public"]) + +load("@io_bazel_rules_scala//scala:scala.bzl", "scala_test") +load("//third_party:dependencies.bzl", "BASE_TEST_DEPENDENCIES_WITH_JSON") + +scala_test( + name = "UsersMessagesADMSpec", + size = "small", # 60s + srcs = [ + "UsersMessagesADMSpec.scala", + ], + data = [ + "//knora-ontologies", + "//test_data", + ], + jvm_flags = ["-Dconfig.resource=fuseki.conf"], + # unused_dependency_checker_mode = "warn", + deps = [ + "//webapi:main_library", + "//webapi:test_library", + "@maven//:org_springframework_security_spring_security_core", + ] + BASE_TEST_DEPENDENCIES_WITH_JSON, +) diff --git a/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/usersmessages/UsersMessagesADMSpec.scala b/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/usersmessages/UsersMessagesADMSpec.scala index d61676c3a0..9a7e4ed12a 100644 --- a/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/usersmessages/UsersMessagesADMSpec.scala +++ b/webapi/src/test/scala/org/knora/webapi/messages/admin/responder/usersmessages/UsersMessagesADMSpec.scala @@ -193,6 +193,25 @@ class UsersMessagesADMSpec extends CoreSpec(UsersMessagesADMSpec.config) { ) ) } + + "return 'BadRequest' if the supplied 'id' is not a valid IRI" in { + + val caught = intercept[BadRequestException]( + CreateUserApiRequestADM( + id = Some("invalid-user-IRI"), + username = "userWithInvalidCustomIri", + email = "userWithInvalidCustomIri@example.org", + givenName = "a user", + familyName = "with an invalid custom Iri", + password = "test", + status = true, + lang = "en", + systemAdmin = false + ) + ) + assert(caught.getMessage === "Invalid user IRI") + } + } "The UserIdentifierADM case class" should { diff --git a/webapi/src/test/scala/org/knora/webapi/messages/store/triplestoremessages/BUILD.bazel b/webapi/src/test/scala/org/knora/webapi/messages/store/triplestoremessages/BUILD.bazel new file mode 100644 index 0000000000..fc150bcc92 --- /dev/null +++ b/webapi/src/test/scala/org/knora/webapi/messages/store/triplestoremessages/BUILD.bazel @@ -0,0 +1,21 @@ +package(default_visibility = ["//visibility:public"]) + +load("@io_bazel_rules_scala//scala:scala.bzl", "scala_test") +load("//third_party:dependencies.bzl", "BASE_TEST_DEPENDENCIES_WITH_JSON") + +scala_test( + name = "TriplestoreMessagesSpec", + size = "small", # 60s + srcs = [ + "TriplestoreMessagesSpec.scala", + ], + data = [ + "//knora-ontologies", + "//test_data", + ], + jvm_flags = ["-Dconfig.resource=fuseki.conf"], + # unused_dependency_checker_mode = "warn", + deps = [ + "//webapi:main_library", + ] + BASE_TEST_DEPENDENCIES_WITH_JSON, +) diff --git a/webapi/src/test/scala/org/knora/webapi/messages/v1/responder/permissionmessages/BUILD.bazel b/webapi/src/test/scala/org/knora/webapi/messages/v1/responder/permissionmessages/BUILD.bazel new file mode 100644 index 0000000000..018d6bf80d --- /dev/null +++ b/webapi/src/test/scala/org/knora/webapi/messages/v1/responder/permissionmessages/BUILD.bazel @@ -0,0 +1,23 @@ +package(default_visibility = ["//visibility:public"]) + +load("@io_bazel_rules_scala//scala:scala.bzl", "scala_test") + +scala_test( + name = "PermissionMessagesV1Spec", + size = "small", # 60s + srcs = [ + "PermissionMessagesV1Spec.scala", + ], + data = [ + "//knora-ontologies", + "//test_data", + ], + jvm_flags = ["-Dconfig.resource=fuseki.conf"], + # unused_dependency_checker_mode = "warn", + deps = [ + "//webapi:main_library", + "//webapi:test_library", + "@maven//:org_scalatest_scalatest_2_12", + "@maven//:org_scalactic_scalactic_2_12", + ], +) diff --git a/webapi/src/test/scala/org/knora/webapi/messages/v1/responder/usermessages/BUILD.bazel b/webapi/src/test/scala/org/knora/webapi/messages/v1/responder/usermessages/BUILD.bazel new file mode 100644 index 0000000000..2b340929b8 --- /dev/null +++ b/webapi/src/test/scala/org/knora/webapi/messages/v1/responder/usermessages/BUILD.bazel @@ -0,0 +1,24 @@ +package(default_visibility = ["//visibility:public"]) + +load("@io_bazel_rules_scala//scala:scala.bzl", "scala_test") + +scala_test( + name = "UserMessagesV1Spec", + size = "small", # 60s + srcs = [ + "UserMessagesV1Spec.scala", + ], + data = [ + "//knora-ontologies", + "//test_data", + ], + jvm_flags = ["-Dconfig.resource=fuseki.conf"], + # unused_dependency_checker_mode = "warn", + deps = [ + "//webapi:main_library", + "//webapi:test_library", + "@maven//:org_scalatest_scalatest_2_12", + "@maven//:org_scalactic_scalactic_2_12", + "@maven//:org_springframework_security_spring_security_core", + ], +) diff --git a/webapi/src/test/scala/org/knora/webapi/messages/v2/responder/ontologymessages/BUILD.bazel b/webapi/src/test/scala/org/knora/webapi/messages/v2/responder/ontologymessages/BUILD.bazel new file mode 100644 index 0000000000..bd73b8085d --- /dev/null +++ b/webapi/src/test/scala/org/knora/webapi/messages/v2/responder/ontologymessages/BUILD.bazel @@ -0,0 +1,22 @@ +package(default_visibility = ["//visibility:public"]) + +load("@io_bazel_rules_scala//scala:scala.bzl", "scala_test") +load("//third_party:dependencies.bzl", "BASE_TEST_DEPENDENCIES") + +scala_test( + name = "InputOntologyV2Spec", + size = "small", # 60s + srcs = [ + "InputOntologyV2Spec.scala", + ], + data = [ + "//knora-ontologies", + "//test_data", + ], + jvm_flags = ["-Dconfig.resource=fuseki.conf"], + # unused_dependency_checker_mode = "warn", + deps = [ + "//webapi:main_library", + "//webapi:test_library", + ] + BASE_TEST_DEPENDENCIES, +) diff --git a/webapi/src/test/scala/org/knora/webapi/other/BUILD.bazel b/webapi/src/test/scala/org/knora/webapi/other/v1/BUILD.bazel similarity index 57% rename from webapi/src/test/scala/org/knora/webapi/other/BUILD.bazel rename to webapi/src/test/scala/org/knora/webapi/other/v1/BUILD.bazel index c8fbd26fe2..78a8e78b52 100644 --- a/webapi/src/test/scala/org/knora/webapi/other/BUILD.bazel +++ b/webapi/src/test/scala/org/knora/webapi/other/v1/BUILD.bazel @@ -1,13 +1,13 @@ package(default_visibility = ["//visibility:public"]) load("@io_bazel_rules_scala//scala:scala.bzl", "scala_test") -load("//third_party:dependencies.bzl", "BASE_TEST_DEPENDENCIES", "BASE_TEST_DEPENDENCIES_WITH_JSON", "BASE_TEST_DEPENDENCIES_WITH_JSON_LD") +load("//third_party:dependencies.bzl", "BASE_TEST_DEPENDENCIES_WITH_JSON") scala_test( name = "DrawingsGodsV1E2ESpec", size = "small", # 60s srcs = [ - "v1/DrawingsGodsV1E2ESpec.scala", + "DrawingsGodsV1E2ESpec.scala", ], data = [ "//knora-ontologies", @@ -25,25 +25,7 @@ scala_test( name = "DrawingsGodsV1Spec", size = "small", # 60s srcs = [ - "v1/DrawingsGodsV1Spec.scala", - ], - data = [ - "//knora-ontologies", - "//test_data", - ], - jvm_flags = ["-Dconfig.resource=fuseki.conf"], - # unused_dependency_checker_mode = "warn", - deps = [ - "//webapi:main_library", - "//webapi:test_library", - ] + BASE_TEST_DEPENDENCIES_WITH_JSON, -) - -scala_test( - name = "LumieresLausanneV2E2ESpec", - size = "small", # 60s - srcs = [ - "v2/LumieresLausanneV2E2ESpec.scala", + "DrawingsGodsV1Spec.scala", ], data = [ "//knora-ontologies", diff --git a/webapi/src/test/scala/org/knora/webapi/other/v2/BUILD.bazel b/webapi/src/test/scala/org/knora/webapi/other/v2/BUILD.bazel new file mode 100644 index 0000000000..f635e64bf7 --- /dev/null +++ b/webapi/src/test/scala/org/knora/webapi/other/v2/BUILD.bazel @@ -0,0 +1,22 @@ +package(default_visibility = ["//visibility:public"]) + +load("@io_bazel_rules_scala//scala:scala.bzl", "scala_test") +load("//third_party:dependencies.bzl", "BASE_TEST_DEPENDENCIES_WITH_JSON") + +scala_test( + name = "LumieresLausanneV2E2ESpec", + size = "small", # 60s + srcs = [ + "LumieresLausanneV2E2ESpec.scala", + ], + data = [ + "//knora-ontologies", + "//test_data", + ], + jvm_flags = ["-Dconfig.resource=fuseki.conf"], + # unused_dependency_checker_mode = "warn", + deps = [ + "//webapi:main_library", + "//webapi:test_library", + ] + BASE_TEST_DEPENDENCIES_WITH_JSON, +)