From fad625f204ff5ce1ecf27f4ad71fa5b18e7d820e Mon Sep 17 00:00:00 2001 From: Fabrice Lecomte Date: Wed, 2 Oct 2019 11:12:56 +0200 Subject: [PATCH] Fix: get All vote of current citizen now return complete target --- .../kotlin/fr/dcproject/repository/Vote.kt | 55 ++++++++++++++++--- .../kotlin/fr/dcproject/routes/VoteArticle.kt | 2 +- .../kotlin/feature/KtorServerRequestSteps.kt | 2 +- src/test/resources/feature/vote.feature | 4 +- 4 files changed, 51 insertions(+), 12 deletions(-) diff --git a/src/main/kotlin/fr/dcproject/repository/Vote.kt b/src/main/kotlin/fr/dcproject/repository/Vote.kt index 0f24f34..34bfa59 100644 --- a/src/main/kotlin/fr/dcproject/repository/Vote.kt +++ b/src/main/kotlin/fr/dcproject/repository/Vote.kt @@ -1,5 +1,6 @@ package fr.dcproject.repository +import com.fasterxml.jackson.core.type.TypeReference import fr.dcproject.entity.Article import fr.dcproject.entity.Constitution import fr.dcproject.entity.VoteAggregation @@ -30,26 +31,64 @@ open class Vote (override var requester: Requester): RepositoryI< )!! } - open fun findByCitizen( + fun findByCitizen( citizen: CitizenEntity, + target: String, + typeReference: TypeReference>>, page: Int = 1, limit: Int = 50 ): Paginated> = - findByCitizen(citizen.id ?: error("The citizen must have an id"), page, limit) + findByCitizen( + citizen.id ?: error("The citizen must have an id"), + target, + typeReference, + page, + limit + ) - open fun findByCitizen( + fun findByCitizen( citizenId: UUID, + target: String, + typeReference: TypeReference>>, page: Int = 1, limit: Int = 50 ): Paginated> { return requester.run { getFunction("find_votes_by_citizen") - .select(page, limit, - "created_by_id" to citizenId - ) + .select(page, limit, typeReference, mapOf( + "created_by_id" to citizenId, + "reference" to target + )) } } } -class VoteArticle (requester: Requester): Vote
(requester) -class VoteConstitution (requester: Requester): Vote(requester) \ No newline at end of file +class VoteArticle (requester: Requester): Vote
(requester) { + fun findByCitizen( + citizen: CitizenEntity, + page: Int = 1, + limit: Int = 50 + ): Paginated> = + findByCitizen( + citizen, + "article", + object: TypeReference>>() {}, + page, + limit + ) +} + +class VoteConstitution (requester: Requester): Vote(requester) { + fun findByCitizen( + citizen: CitizenEntity, + page: Int = 1, + limit: Int = 50 + ): Paginated> = + findByCitizen( + citizen, + "constitution", + object: TypeReference>>() {}, + page, + limit + ) +} \ No newline at end of file diff --git a/src/main/kotlin/fr/dcproject/routes/VoteArticle.kt b/src/main/kotlin/fr/dcproject/routes/VoteArticle.kt index bffcb0f..0459719 100644 --- a/src/main/kotlin/fr/dcproject/routes/VoteArticle.kt +++ b/src/main/kotlin/fr/dcproject/routes/VoteArticle.kt @@ -50,7 +50,7 @@ fun Route.voteArticle(repo: VoteArticleRepository) { } get { - val votes = repo.findByCitizen(it.citizen) + val votes = repo.findByCitizen(it.citizen, it.page, it.limit) assertCan(VIEW, votes.result) call.respond(votes) diff --git a/src/test/kotlin/feature/KtorServerRequestSteps.kt b/src/test/kotlin/feature/KtorServerRequestSteps.kt index 1751cbc..acf6fa3 100644 --- a/src/test/kotlin/feature/KtorServerRequestSteps.kt +++ b/src/test/kotlin/feature/KtorServerRequestSteps.kt @@ -50,7 +50,7 @@ class KtorServerRequestSteps : En { Then("the response should contain object:") { expected: DataTable -> expected.asMap(String::class.java, String::class.java).forEach { (key, valueExpected) -> val jsonPrimitive = findJsonElement(key) as? JsonPrimitive ?: fail("\"$key\" element isn't json primitive") - assertEquals(jsonPrimitive.asString, valueExpected) + assertEquals(valueExpected, jsonPrimitive.asString) } } diff --git a/src/test/resources/feature/vote.feature b/src/test/resources/feature/vote.feature index 446de80..20e3433 100644 --- a/src/test/resources/feature/vote.feature +++ b/src/test/resources/feature/vote.feature @@ -27,5 +27,5 @@ Feature: vote Article And the response should contain object: | current_page | 1 | | limit | 50 | - | total | 2 | - | result[0].note | -1 | + | total | 1 | + | result[0].note | 1 |