Refactors Citizen into component
Refactor CitizenVoter Split citizens routes
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import fr.dcproject.Env
|
||||
import fr.dcproject.component.article.ArticleRefVersioning
|
||||
import fr.dcproject.component.article.ArticleViewManager
|
||||
import fr.dcproject.entity.CitizenRef
|
||||
import fr.dcproject.component.citizen.CitizenRef
|
||||
import fr.dcproject.module
|
||||
import io.ktor.locations.*
|
||||
import io.ktor.server.testing.*
|
||||
|
||||
@@ -3,7 +3,11 @@ package feature
|
||||
import fr.dcproject.component.article.ArticleForUpdate
|
||||
import fr.dcproject.component.article.ArticleForView
|
||||
import fr.dcproject.component.article.ArticleRepository
|
||||
import fr.dcproject.entity.*
|
||||
import fr.dcproject.component.citizen.Citizen
|
||||
import fr.dcproject.component.citizen.CitizenI
|
||||
import fr.dcproject.component.citizen.CitizenRepository
|
||||
import fr.dcproject.entity.CommentForUpdate
|
||||
import fr.dcproject.entity.WorkgroupRef
|
||||
import fr.dcproject.repository.CommentArticle
|
||||
import fr.dcproject.utils.toUUID
|
||||
import io.cucumber.datatable.DataTable
|
||||
@@ -13,7 +17,6 @@ import org.koin.test.KoinTest
|
||||
import org.koin.test.get
|
||||
import java.util.*
|
||||
import fr.dcproject.entity.User as UserEntity
|
||||
import fr.dcproject.repository.Citizen as CitizenRepository
|
||||
|
||||
class ArticleSteps : En, KoinTest {
|
||||
init {
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
package feature
|
||||
|
||||
import fr.dcproject.entity.Citizen
|
||||
import fr.dcproject.entity.CitizenI
|
||||
import fr.dcproject.component.citizen.Citizen
|
||||
import fr.dcproject.component.citizen.CitizenI
|
||||
import fr.dcproject.component.citizen.CitizenRepository
|
||||
import fr.dcproject.entity.User
|
||||
import io.cucumber.datatable.DataTable
|
||||
import io.cucumber.java8.En
|
||||
@@ -9,7 +10,6 @@ import org.joda.time.DateTime
|
||||
import org.koin.test.KoinTest
|
||||
import org.koin.test.get
|
||||
import java.util.*
|
||||
import fr.dcproject.repository.Citizen as CitizenRepository
|
||||
|
||||
class CitizenSteps : En, KoinTest {
|
||||
init {
|
||||
|
||||
@@ -1,7 +1,13 @@
|
||||
package feature
|
||||
|
||||
import fr.dcproject.component.article.ArticleRef
|
||||
import fr.dcproject.entity.*
|
||||
import fr.dcproject.component.citizen.Citizen
|
||||
import fr.dcproject.component.citizen.CitizenI
|
||||
import fr.dcproject.component.citizen.CitizenRepository
|
||||
import fr.dcproject.component.citizen.CitizenWithUserI
|
||||
import fr.dcproject.entity.CommentForUpdate
|
||||
import fr.dcproject.entity.ConstitutionRef
|
||||
import fr.dcproject.entity.ConstitutionSimple
|
||||
import fr.dcproject.repository.CommentConstitution
|
||||
import fr.dcproject.utils.toUUID
|
||||
import io.cucumber.datatable.DataTable
|
||||
@@ -11,7 +17,6 @@ import org.koin.test.KoinTest
|
||||
import org.koin.test.get
|
||||
import java.util.*
|
||||
import fr.dcproject.entity.User as UserEntity
|
||||
import fr.dcproject.repository.Citizen as CitizenRepository
|
||||
import fr.dcproject.repository.Constitution as ConstitutionRepository
|
||||
|
||||
class ConstitutionSteps : En, KoinTest {
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package feature
|
||||
|
||||
import fr.dcproject.component.article.ArticleRef
|
||||
import fr.dcproject.component.citizen.CitizenRepository
|
||||
import fr.dcproject.entity.ConstitutionRef
|
||||
import fr.dcproject.entity.FollowForUpdate
|
||||
import fr.dcproject.utils.toUUID
|
||||
import io.cucumber.java8.En
|
||||
import org.koin.test.KoinTest
|
||||
import org.koin.test.get
|
||||
import fr.dcproject.repository.Citizen as CitizenRepository
|
||||
import fr.dcproject.repository.FollowArticle as FollowArticleRepository
|
||||
import fr.dcproject.repository.FollowConstitution as FollowConstitutionRepository
|
||||
|
||||
|
||||
@@ -2,11 +2,11 @@ package feature
|
||||
|
||||
import com.auth0.jwt.JWT
|
||||
import fr.dcproject.JwtConfig
|
||||
import fr.dcproject.component.citizen.CitizenRepository
|
||||
import io.cucumber.java8.En
|
||||
import io.ktor.http.*
|
||||
import org.koin.test.KoinTest
|
||||
import org.koin.test.get
|
||||
import fr.dcproject.repository.Citizen as CitizenRepository
|
||||
|
||||
class KtorServerAuthSteps : En, KoinTest {
|
||||
init {
|
||||
|
||||
@@ -2,6 +2,7 @@ package feature
|
||||
|
||||
import fr.dcproject.component.article.ArticleRef
|
||||
import fr.dcproject.component.article.ArticleRepository
|
||||
import fr.dcproject.component.citizen.CitizenRepository
|
||||
import fr.dcproject.entity.OpinionChoice
|
||||
import fr.dcproject.entity.OpinionForUpdate
|
||||
import fr.dcproject.utils.toUUID
|
||||
@@ -10,7 +11,6 @@ import io.cucumber.java8.En
|
||||
import org.koin.test.KoinTest
|
||||
import org.koin.test.get
|
||||
import java.util.*
|
||||
import fr.dcproject.repository.Citizen as CitizenRepository
|
||||
import fr.dcproject.repository.OpinionArticle as OpinionRepository
|
||||
import fr.dcproject.repository.OpinionChoice as OpinionChoiceRepository
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package feature
|
||||
|
||||
import fr.dcproject.component.article.ArticleRepository
|
||||
import fr.dcproject.component.citizen.CitizenRepository
|
||||
import fr.dcproject.entity.VoteForUpdate
|
||||
import fr.dcproject.utils.toUUID
|
||||
import io.cucumber.java8.En
|
||||
import org.koin.test.KoinTest
|
||||
import org.koin.test.get
|
||||
import java.util.*
|
||||
import fr.dcproject.repository.Citizen as CitizenRepository
|
||||
import fr.dcproject.repository.VoteArticle as VoteRepository
|
||||
|
||||
class VoteSteps : En, KoinTest {
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
package feature
|
||||
|
||||
import fr.dcproject.component.citizen.Citizen
|
||||
import fr.dcproject.component.citizen.CitizenI
|
||||
import fr.dcproject.component.citizen.CitizenRef
|
||||
import fr.dcproject.component.citizen.CitizenRepository
|
||||
import fr.dcproject.entity.*
|
||||
import fr.dcproject.entity.WorkgroupWithMembersI.Member
|
||||
import fr.dcproject.utils.toUUID
|
||||
@@ -10,7 +14,6 @@ import org.junit.Assert
|
||||
import org.koin.test.KoinTest
|
||||
import org.koin.test.get
|
||||
import java.util.*
|
||||
import fr.dcproject.repository.Citizen as CitizenRepository
|
||||
import fr.dcproject.repository.Workgroup as WorkgroupRepository
|
||||
|
||||
class WorkgroupSteps : En, KoinTest {
|
||||
|
||||
@@ -2,8 +2,8 @@ package fr.dcproject.security.voter
|
||||
|
||||
import fr.dcproject.component.article.ArticleForView
|
||||
import fr.dcproject.component.article.ArticleVoter
|
||||
import fr.dcproject.entity.CitizenCart
|
||||
import fr.dcproject.entity.CitizenI
|
||||
import fr.dcproject.component.citizen.CitizenCart
|
||||
import fr.dcproject.component.citizen.CitizenI
|
||||
import fr.dcproject.entity.User
|
||||
import fr.dcproject.entity.UserI
|
||||
import fr.dcproject.voter.Vote.DENIED
|
||||
|
||||
@@ -1,22 +1,19 @@
|
||||
package fr.dcproject.security.voter
|
||||
|
||||
import fr.dcproject.entity.CitizenBasic
|
||||
import fr.dcproject.entity.CitizenI
|
||||
import fr.dcproject.component.citizen.CitizenBasic
|
||||
import fr.dcproject.component.citizen.CitizenI
|
||||
import fr.dcproject.component.citizen.CitizenVoter
|
||||
import fr.dcproject.entity.User
|
||||
import fr.dcproject.entity.UserI
|
||||
import fr.dcproject.user
|
||||
import fr.ktorVoter.*
|
||||
import io.ktor.application.*
|
||||
import fr.dcproject.voter.Vote.DENIED
|
||||
import fr.dcproject.voter.Vote.GRANTED
|
||||
import io.ktor.locations.*
|
||||
import io.mockk.every
|
||||
import io.mockk.mockk
|
||||
import io.mockk.mockkStatic
|
||||
import org.amshove.kluent.`should be`
|
||||
import org.joda.time.DateTime
|
||||
import org.junit.jupiter.api.Tag
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.junit.jupiter.api.TestInstance
|
||||
import org.junit.jupiter.api.assertThrows
|
||||
|
||||
@KtorExperimentalLocationsAPI
|
||||
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
|
||||
@@ -57,78 +54,51 @@ class CitizenVoterTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `support citizen`(): Unit = CitizenVoter().run {
|
||||
val p = object : ActionI {}
|
||||
mockk<ApplicationCall> {
|
||||
every { user } returns tesla.user
|
||||
}.let {
|
||||
this(CitizenVoter.Action.VIEW, it, einstein).vote `should be` Vote.GRANTED
|
||||
this(p, it, einstein).vote `should be` Vote.ABSTAIN
|
||||
}
|
||||
fun `can be view the citizen`() {
|
||||
CitizenVoter()
|
||||
.canView(subject = einstein, connectedCitizen = tesla)
|
||||
.vote `should be` GRANTED
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `can be view the citizen`(): Unit = listOf(CitizenVoter()).run {
|
||||
mockk<ApplicationCall> {
|
||||
every { user } returns tesla.user
|
||||
}.let {
|
||||
can(CitizenVoter.Action.VIEW, it, einstein) `should be` true
|
||||
}
|
||||
fun `can be view the citizen list`() {
|
||||
CitizenVoter()
|
||||
.canView(subjects = listOf(tesla, einstein), connectedCitizen = einstein)
|
||||
.vote `should be` GRANTED
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `can be view the citizen list`(): Unit = listOf(CitizenVoter()).run {
|
||||
mockk<ApplicationCall> {
|
||||
every { user } returns einstein.user
|
||||
}.let {
|
||||
canAll(CitizenVoter.Action.VIEW, it, listOf(einstein, tesla)) `should be` true
|
||||
}
|
||||
fun `can not view deleted citizen`() {
|
||||
CitizenVoter()
|
||||
.canView(subject = curie, connectedCitizen = tesla)
|
||||
.vote `should be` DENIED
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `can not view deleted citizen`(): Unit = listOf(CitizenVoter()).run {
|
||||
mockk<ApplicationCall> {
|
||||
every { user } returns tesla.user
|
||||
}.let {
|
||||
can(CitizenVoter.Action.VIEW, it, curie) `should be` false
|
||||
}
|
||||
fun `can be update itself`() {
|
||||
CitizenVoter()
|
||||
.canUpdate(subject = einstein, connectedCitizen = einstein)
|
||||
.vote `should be` GRANTED
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `can be update itself`(): Unit = listOf(CitizenVoter()).run {
|
||||
mockk<ApplicationCall> {
|
||||
every { user } returns einstein.user
|
||||
}.let {
|
||||
can(CitizenVoter.Action.UPDATE, it, einstein) `should be` true
|
||||
}
|
||||
fun `can not be update other citizen`() {
|
||||
CitizenVoter()
|
||||
.canUpdate(subject = tesla, connectedCitizen = einstein)
|
||||
.vote `should be` DENIED
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `can not be update other citizen`(): Unit = listOf(CitizenVoter()).run {
|
||||
mockk<ApplicationCall> {
|
||||
every { user } returns einstein.user
|
||||
}.let {
|
||||
assertThrows<OneOrMoreVoterDeniedException> {
|
||||
assertCan(CitizenVoter.Action.UPDATE, it, tesla)
|
||||
}
|
||||
}
|
||||
fun `can be change password of itself`() {
|
||||
CitizenVoter()
|
||||
.canChangePassword(subject = einstein, connectedCitizen = einstein)
|
||||
.vote `should be` GRANTED
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `can be change password of itself`(): Unit = listOf(CitizenVoter()).run {
|
||||
mockk<ApplicationCall> {
|
||||
every { user } returns einstein.user
|
||||
}.let {
|
||||
can(CitizenVoter.Action.CHANGE_PASSWORD, it, einstein) `should be` true
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `can not be change password of other citizen`(): Unit = listOf(CitizenVoter()).run {
|
||||
mockk<ApplicationCall> {
|
||||
every { user } returns einstein.user
|
||||
}.let {
|
||||
can(CitizenVoter.Action.CHANGE_PASSWORD, it, tesla) `should be` false
|
||||
}
|
||||
fun `can not be change password of other citizen`() {
|
||||
CitizenVoter()
|
||||
.canChangePassword(subject = tesla, connectedCitizen = einstein)
|
||||
.vote `should be` DENIED
|
||||
}
|
||||
}
|
||||
@@ -3,10 +3,15 @@ package fr.dcproject.security.voter
|
||||
import fr.dcproject.citizenOrNull
|
||||
import fr.dcproject.component.article.ArticleForView
|
||||
import fr.dcproject.component.article.ArticleRef
|
||||
import fr.dcproject.entity.*
|
||||
import fr.dcproject.component.citizen.Citizen
|
||||
import fr.dcproject.component.citizen.CitizenCart
|
||||
import fr.dcproject.component.citizen.CitizenI
|
||||
import fr.dcproject.entity.CommentForUpdate
|
||||
import fr.dcproject.entity.CommentForView
|
||||
import fr.dcproject.entity.User
|
||||
import fr.dcproject.entity.UserI
|
||||
import fr.dcproject.voter.NoSubjectDefinedException
|
||||
import fr.ktorVoter.*
|
||||
import fr.ktorVoter.Vote
|
||||
import fr.postgresjson.connexion.Paginated
|
||||
import io.ktor.application.*
|
||||
import io.ktor.locations.*
|
||||
|
||||
@@ -2,7 +2,13 @@ package fr.dcproject.security.voter
|
||||
|
||||
import fr.dcproject.citizenOrNull
|
||||
import fr.dcproject.component.article.ArticleForView
|
||||
import fr.dcproject.entity.*
|
||||
import fr.dcproject.component.citizen.Citizen
|
||||
import fr.dcproject.component.citizen.CitizenBasic
|
||||
import fr.dcproject.component.citizen.CitizenCart
|
||||
import fr.dcproject.component.citizen.CitizenI
|
||||
import fr.dcproject.entity.Follow
|
||||
import fr.dcproject.entity.User
|
||||
import fr.dcproject.entity.UserI
|
||||
import fr.dcproject.voter.NoSubjectDefinedException
|
||||
import fr.ktorVoter.ActionI
|
||||
import fr.ktorVoter.Vote
|
||||
|
||||
@@ -1,7 +1,12 @@
|
||||
package fr.dcproject.security.voter
|
||||
|
||||
import fr.dcproject.component.article.ArticleForView
|
||||
import fr.dcproject.entity.*
|
||||
import fr.dcproject.component.citizen.CitizenBasic
|
||||
import fr.dcproject.component.citizen.CitizenCart
|
||||
import fr.dcproject.component.citizen.CitizenI
|
||||
import fr.dcproject.entity.OpinionChoice
|
||||
import fr.dcproject.entity.User
|
||||
import fr.dcproject.entity.UserI
|
||||
import fr.dcproject.user
|
||||
import fr.ktorVoter.ActionI
|
||||
import fr.ktorVoter.Vote
|
||||
|
||||
@@ -1,11 +1,16 @@
|
||||
package fr.dcproject.security.voter
|
||||
|
||||
import fr.dcproject.component.article.ArticleForView
|
||||
import fr.dcproject.entity.*
|
||||
import fr.dcproject.component.citizen.CitizenBasic
|
||||
import fr.dcproject.component.citizen.CitizenCart
|
||||
import fr.dcproject.component.citizen.CitizenI
|
||||
import fr.dcproject.entity.Opinion
|
||||
import fr.dcproject.entity.OpinionChoice
|
||||
import fr.dcproject.entity.User
|
||||
import fr.dcproject.entity.UserI
|
||||
import fr.dcproject.user
|
||||
import fr.dcproject.voter.NoSubjectDefinedException
|
||||
import fr.ktorVoter.*
|
||||
import fr.ktorVoter.Vote
|
||||
import io.ktor.application.*
|
||||
import io.ktor.locations.*
|
||||
import io.mockk.every
|
||||
|
||||
@@ -3,7 +3,13 @@ package fr.dcproject.security.voter
|
||||
import fr.dcproject.citizenOrNull
|
||||
import fr.dcproject.component.article.ArticleForView
|
||||
import fr.dcproject.component.article.ArticleRef
|
||||
import fr.dcproject.entity.*
|
||||
import fr.dcproject.component.citizen.Citizen
|
||||
import fr.dcproject.component.citizen.CitizenBasic
|
||||
import fr.dcproject.component.citizen.CitizenCart
|
||||
import fr.dcproject.component.citizen.CitizenI
|
||||
import fr.dcproject.entity.User
|
||||
import fr.dcproject.entity.UserI
|
||||
import fr.dcproject.entity.VoteForUpdate
|
||||
import fr.dcproject.voter.NoSubjectDefinedException
|
||||
import fr.ktorVoter.ActionI
|
||||
import fr.ktorVoter.Vote
|
||||
|
||||
@@ -1,7 +1,13 @@
|
||||
package fr.dcproject.security.voter
|
||||
|
||||
import fr.dcproject.component.article.ArticleForView
|
||||
import fr.dcproject.entity.*
|
||||
import fr.dcproject.component.citizen.CitizenBasic
|
||||
import fr.dcproject.component.citizen.CitizenCart
|
||||
import fr.dcproject.component.citizen.CitizenI
|
||||
import fr.dcproject.entity.User
|
||||
import fr.dcproject.entity.UserI
|
||||
import fr.dcproject.entity.WorkgroupRef
|
||||
import fr.dcproject.entity.WorkgroupWithMembersI
|
||||
import fr.dcproject.user
|
||||
import fr.dcproject.voter.NoSubjectDefinedException
|
||||
import fr.ktorVoter.ActionI
|
||||
|
||||
Reference in New Issue
Block a user