From d8db46c5899479c84fe84bfee23fdb9eb17db21d Mon Sep 17 00:00:00 2001 From: Gauthier Roebroeck Date: Fri, 21 Aug 2020 11:35:02 +0800 Subject: [PATCH] refactor: use builtin UniqueElements validator --- .../komga/infrastructure/validation/Unique.kt | 23 ------------------- .../rest/dto/CollectionCreationDto.kt | 4 ++-- .../rest/dto/CollectionUpdateDto.kt | 4 ++-- .../rest/dto/ReadListCreationDto.kt | 4 ++-- .../interfaces/rest/dto/ReadListUpdateDto.kt | 4 ++-- .../interfaces/rest/ReadListControllerTest.kt | 12 ++++------ .../rest/SeriesCollectionControllerTest.kt | 12 ++++------ 7 files changed, 18 insertions(+), 45 deletions(-) delete mode 100644 komga/src/main/kotlin/org/gotson/komga/infrastructure/validation/Unique.kt diff --git a/komga/src/main/kotlin/org/gotson/komga/infrastructure/validation/Unique.kt b/komga/src/main/kotlin/org/gotson/komga/infrastructure/validation/Unique.kt deleted file mode 100644 index aa56f5407..000000000 --- a/komga/src/main/kotlin/org/gotson/komga/infrastructure/validation/Unique.kt +++ /dev/null @@ -1,23 +0,0 @@ -package org.gotson.komga.infrastructure.validation - -import javax.validation.Constraint -import javax.validation.ConstraintValidator -import javax.validation.ConstraintValidatorContext -import kotlin.reflect.KClass - - -@Constraint(validatedBy = [UniqueValidator::class]) -@Target(AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.FIELD, AnnotationTarget.PROPERTY_GETTER) -@Retention(AnnotationRetention.RUNTIME) -annotation class Unique( - val message: String = "Must contain unique values", - val groups: Array> = [], - val payload: Array> = [] -) - -class UniqueValidator : ConstraintValidator> { - override fun isValid(value: List<*>?, context: ConstraintValidatorContext?): Boolean { - if (value == null) return true - return value.distinct().size == value.size - } -} diff --git a/komga/src/main/kotlin/org/gotson/komga/interfaces/rest/dto/CollectionCreationDto.kt b/komga/src/main/kotlin/org/gotson/komga/interfaces/rest/dto/CollectionCreationDto.kt index 5417a0ff0..35b9dffd5 100644 --- a/komga/src/main/kotlin/org/gotson/komga/interfaces/rest/dto/CollectionCreationDto.kt +++ b/komga/src/main/kotlin/org/gotson/komga/interfaces/rest/dto/CollectionCreationDto.kt @@ -1,11 +1,11 @@ package org.gotson.komga.interfaces.rest.dto -import org.gotson.komga.infrastructure.validation.Unique +import org.hibernate.validator.constraints.UniqueElements import javax.validation.constraints.NotBlank import javax.validation.constraints.NotEmpty data class CollectionCreationDto( @get:NotBlank val name: String, val ordered: Boolean, - @get:NotEmpty @get:Unique val seriesIds: List + @get:NotEmpty @get:UniqueElements val seriesIds: List ) diff --git a/komga/src/main/kotlin/org/gotson/komga/interfaces/rest/dto/CollectionUpdateDto.kt b/komga/src/main/kotlin/org/gotson/komga/interfaces/rest/dto/CollectionUpdateDto.kt index 6330bb5cf..240fbc6e0 100644 --- a/komga/src/main/kotlin/org/gotson/komga/interfaces/rest/dto/CollectionUpdateDto.kt +++ b/komga/src/main/kotlin/org/gotson/komga/interfaces/rest/dto/CollectionUpdateDto.kt @@ -2,10 +2,10 @@ package org.gotson.komga.interfaces.rest.dto import org.gotson.komga.infrastructure.validation.NullOrNotBlank import org.gotson.komga.infrastructure.validation.NullOrNotEmpty -import org.gotson.komga.infrastructure.validation.Unique +import org.hibernate.validator.constraints.UniqueElements data class CollectionUpdateDto( @get:NullOrNotBlank val name: String?, val ordered: Boolean?, - @get:NullOrNotEmpty @get:Unique val seriesIds: List? + @get:NullOrNotEmpty @get:UniqueElements val seriesIds: List? ) diff --git a/komga/src/main/kotlin/org/gotson/komga/interfaces/rest/dto/ReadListCreationDto.kt b/komga/src/main/kotlin/org/gotson/komga/interfaces/rest/dto/ReadListCreationDto.kt index ebb2ee0d9..0d54d1df6 100644 --- a/komga/src/main/kotlin/org/gotson/komga/interfaces/rest/dto/ReadListCreationDto.kt +++ b/komga/src/main/kotlin/org/gotson/komga/interfaces/rest/dto/ReadListCreationDto.kt @@ -1,10 +1,10 @@ package org.gotson.komga.interfaces.rest.dto -import org.gotson.komga.infrastructure.validation.Unique +import org.hibernate.validator.constraints.UniqueElements import javax.validation.constraints.NotBlank import javax.validation.constraints.NotEmpty data class ReadListCreationDto( @get:NotBlank val name: String, - @get:NotEmpty @get:Unique val bookIds: List + @get:NotEmpty @get:UniqueElements val bookIds: List ) diff --git a/komga/src/main/kotlin/org/gotson/komga/interfaces/rest/dto/ReadListUpdateDto.kt b/komga/src/main/kotlin/org/gotson/komga/interfaces/rest/dto/ReadListUpdateDto.kt index dd2b7527e..a2248651d 100644 --- a/komga/src/main/kotlin/org/gotson/komga/interfaces/rest/dto/ReadListUpdateDto.kt +++ b/komga/src/main/kotlin/org/gotson/komga/interfaces/rest/dto/ReadListUpdateDto.kt @@ -2,9 +2,9 @@ package org.gotson.komga.interfaces.rest.dto import org.gotson.komga.infrastructure.validation.NullOrNotBlank import org.gotson.komga.infrastructure.validation.NullOrNotEmpty -import org.gotson.komga.infrastructure.validation.Unique +import org.hibernate.validator.constraints.UniqueElements data class ReadListUpdateDto( @get:NullOrNotBlank val name: String?, - @get:NullOrNotEmpty @get:Unique val bookIds: List? + @get:NullOrNotEmpty @get:UniqueElements val bookIds: List? ) diff --git a/komga/src/test/kotlin/org/gotson/komga/interfaces/rest/ReadListControllerTest.kt b/komga/src/test/kotlin/org/gotson/komga/interfaces/rest/ReadListControllerTest.kt index 43038a098..149f46861 100644 --- a/komga/src/test/kotlin/org/gotson/komga/interfaces/rest/ReadListControllerTest.kt +++ b/komga/src/test/kotlin/org/gotson/komga/interfaces/rest/ReadListControllerTest.kt @@ -170,7 +170,7 @@ class ReadListControllerTest( @WithMockCustomUser fun `given non-admin user when creating read list then return forbidden`() { val jsonString = """ - {"name":"readlist","bookIds":[3]} + {"name":"readlist","bookIds":["3"]} """.trimIndent() mockMvc.post("/api/v1/readlists") { @@ -204,7 +204,7 @@ class ReadListControllerTest( makeReadLists() val jsonString = """ - {"name":"Lib1","bookIds":[${booksLibrary1.first().id}]} + {"name":"Lib1","bookIds":["${booksLibrary1.first().id}"]} """.trimIndent() mockMvc.post("/api/v1/readlists") { @@ -218,10 +218,8 @@ class ReadListControllerTest( @Test @WithMockCustomUser(roles = [ROLE_ADMIN]) fun `given read list with duplicate bookIds when creating read list then return bad request`() { - makeReadLists() - val jsonString = """ - {"name":"Lib1","bookIds":[${booksLibrary1.first().id},${booksLibrary1.first().id}]} + {"name":"Lib1","bookIds":["${booksLibrary1.first().id}","${booksLibrary1.first().id}"]} """.trimIndent() mockMvc.post("/api/v1/readlists") { @@ -239,7 +237,7 @@ class ReadListControllerTest( @WithMockCustomUser fun `given non-admin user when updating read list then return forbidden`() { val jsonString = """ - {"name":"readlist","bookIds":[3]} + {"name":"readlist","bookIds":["3"]} """.trimIndent() mockMvc.patch("/api/v1/readlists/5") { @@ -295,7 +293,7 @@ class ReadListControllerTest( fun `given existing read list when updating read list with duplicate bookIds then return bad request`() { makeReadLists() - val jsonString = """{"bookIds":[${booksLibrary1.first().id},${booksLibrary1.first().id}]}""" + val jsonString = """{"bookIds":["${booksLibrary1.first().id}","${booksLibrary1.first().id}"]}""" mockMvc.patch("/api/v1/readlists/${rlLib1.id}") { contentType = MediaType.APPLICATION_JSON diff --git a/komga/src/test/kotlin/org/gotson/komga/interfaces/rest/SeriesCollectionControllerTest.kt b/komga/src/test/kotlin/org/gotson/komga/interfaces/rest/SeriesCollectionControllerTest.kt index 5eef6cb5b..bbbf4ab2c 100644 --- a/komga/src/test/kotlin/org/gotson/komga/interfaces/rest/SeriesCollectionControllerTest.kt +++ b/komga/src/test/kotlin/org/gotson/komga/interfaces/rest/SeriesCollectionControllerTest.kt @@ -165,7 +165,7 @@ class SeriesCollectionControllerTest( @WithMockCustomUser fun `given non-admin user when creating collection then return forbidden`() { val jsonString = """ - {"name":"collection","ordered":false,"seriesIds":[3]} + {"name":"collection","ordered":false,"seriesIds":["3"]} """.trimIndent() mockMvc.post("/api/v1/collections") { @@ -200,7 +200,7 @@ class SeriesCollectionControllerTest( makeCollections() val jsonString = """ - {"name":"Lib1","ordered":false,"seriesIds":[${seriesLibrary1.first().id}]} + {"name":"Lib1","ordered":false,"seriesIds":["${seriesLibrary1.first().id}"]} """.trimIndent() mockMvc.post("/api/v1/collections") { @@ -214,10 +214,8 @@ class SeriesCollectionControllerTest( @Test @WithMockCustomUser(roles = [ROLE_ADMIN]) fun `given collection with duplicate seriesIds when creating collection then return bad request`() { - makeCollections() - val jsonString = """ - {"name":"Lib1","ordered":false,"seriesIds":[${seriesLibrary1.first().id},${seriesLibrary1.first().id}]} + {"name":"Lib1","ordered":false,"seriesIds":["${seriesLibrary1.first().id}","${seriesLibrary1.first().id}"]} """.trimIndent() mockMvc.post("/api/v1/collections") { @@ -235,7 +233,7 @@ class SeriesCollectionControllerTest( @WithMockCustomUser fun `given non-admin user when updating collection then return forbidden`() { val jsonString = """ - {"name":"collection","ordered":false,"seriesIds":[3]} + {"name":"collection","ordered":false,"seriesIds":["3"]} """.trimIndent() mockMvc.patch("/api/v1/collections/5") { @@ -292,7 +290,7 @@ class SeriesCollectionControllerTest( fun `given existing collection when updating collection with duplicate seriesIds then return bad request`() { makeCollections() - val jsonString = """{"seriesIds":[${seriesLibrary1.first().id},${seriesLibrary1.first().id}]}""" + val jsonString = """{"seriesIds":["${seriesLibrary1.first().id}","${seriesLibrary1.first().id}"]}""" mockMvc.patch("/api/v1/collections/${colLib1.id}") { contentType = MediaType.APPLICATION_JSON