@@ -32,13 +32,12 @@ class Citizen(
|
|||||||
override val id: UUID = UUID.randomUUID(),
|
override val id: UUID = UUID.randomUUID(),
|
||||||
override val name: Name,
|
override val name: Name,
|
||||||
override val email: String,
|
override val email: String,
|
||||||
override val birthday: DateTime,
|
val birthday: DateTime,
|
||||||
override val voteAnonymous: Boolean = true,
|
override val voteAnonymous: Boolean = true,
|
||||||
override val followAnonymous: Boolean = true,
|
override val followAnonymous: Boolean = true,
|
||||||
override val user: User,
|
override val user: User,
|
||||||
deletedAt: DateTime? = null
|
deletedAt: DateTime? = null
|
||||||
) : CitizenFull,
|
) : CitizenWithEmail,
|
||||||
CitizenBasicI,
|
|
||||||
CitizenCreatorI,
|
CitizenCreatorI,
|
||||||
CitizenWithUserI,
|
CitizenWithUserI,
|
||||||
CitizenRef(id),
|
CitizenRef(id),
|
||||||
@@ -75,33 +74,14 @@ interface CitizenCreatorI : CitizenWithUserI, CitizenWithEmail, CitizenCartI, De
|
|||||||
override val deletedAt: DateTime?
|
override val deletedAt: DateTime?
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated("")
|
|
||||||
data class CitizenBasic(
|
|
||||||
override var id: UUID = UUID.randomUUID(),
|
|
||||||
override var name: Name,
|
|
||||||
override var email: String,
|
|
||||||
override var birthday: DateTime,
|
|
||||||
override var voteAnonymous: Boolean = true,
|
|
||||||
override var followAnonymous: Boolean = true,
|
|
||||||
override val user: User,
|
|
||||||
override val deletedAt: DateTime? = null
|
|
||||||
) : CitizenBasicI,
|
|
||||||
CitizenRefWithUser(id, user),
|
|
||||||
DeletedAt by DeletedAt.Imp(deletedAt)
|
|
||||||
|
|
||||||
@Deprecated("")
|
|
||||||
open class CitizenSimple(
|
|
||||||
id: UUID = UUID.randomUUID(),
|
|
||||||
var name: Name,
|
|
||||||
user: UserRef
|
|
||||||
) : CitizenRefWithUser(id, user)
|
|
||||||
|
|
||||||
class CitizenCart(
|
class CitizenCart(
|
||||||
id: UUID = UUID.randomUUID(),
|
id: UUID = UUID.randomUUID(),
|
||||||
override val name: Name,
|
override val name: Name,
|
||||||
override val user: UserRef
|
override val user: UserRef,
|
||||||
|
override val deletedAt: DateTime? = null,
|
||||||
) : CitizenRef(id),
|
) : CitizenRef(id),
|
||||||
CitizenCartI
|
CitizenCartI,
|
||||||
|
DeletedAt by DeletedAt.Imp(deletedAt)
|
||||||
|
|
||||||
interface CitizenCartI : CitizenI, CitizenWithUserI {
|
interface CitizenCartI : CitizenI, CitizenWithUserI {
|
||||||
val name: Name
|
val name: Name
|
||||||
@@ -133,19 +113,6 @@ interface CitizenI : EntityI {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated("")
|
|
||||||
interface CitizenBasicI : CitizenWithUserI, CitizenWithEmail, DeletedAt {
|
|
||||||
val name: Name
|
|
||||||
val birthday: DateTime
|
|
||||||
val voteAnonymous: Boolean
|
|
||||||
val followAnonymous: Boolean
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated("")
|
|
||||||
interface CitizenFull : CitizenBasicI {
|
|
||||||
override val user: User
|
|
||||||
}
|
|
||||||
|
|
||||||
interface CitizenWithUserI : CitizenI {
|
interface CitizenWithUserI : CitizenI {
|
||||||
val user: UserI
|
val user: UserI
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ class CitizenRepository(override var requester: Requester) : RepositoryI {
|
|||||||
sort: String? = null,
|
sort: String? = null,
|
||||||
direction: RepositoryI.Direction? = null,
|
direction: RepositoryI.Direction? = null,
|
||||||
search: String? = null
|
search: String? = null
|
||||||
): Paginated<CitizenBasic> = requester
|
): Paginated<CitizenCart> = requester
|
||||||
.getFunction("find_citizens")
|
.getFunction("find_citizens")
|
||||||
.select(
|
.select(
|
||||||
page,
|
page,
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import fr.dcproject.common.entity.TargetRef
|
|||||||
import fr.dcproject.common.entity.VersionableId
|
import fr.dcproject.common.entity.VersionableId
|
||||||
import fr.dcproject.component.article.ArticleForListing
|
import fr.dcproject.component.article.ArticleForListing
|
||||||
import fr.dcproject.component.article.ArticleI
|
import fr.dcproject.component.article.ArticleI
|
||||||
import fr.dcproject.component.citizen.CitizenSimple
|
import fr.dcproject.component.citizen.CitizenCreator
|
||||||
import fr.dcproject.component.citizen.CitizenWithUserI
|
import fr.dcproject.component.citizen.CitizenWithUserI
|
||||||
import fr.dcproject.component.constitution.ConstitutionSimple.TitleSimple
|
import fr.dcproject.component.constitution.ConstitutionSimple.TitleSimple
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
@@ -21,8 +21,8 @@ class Constitution(
|
|||||||
titles: MutableList<TitleSimple<ArticleForListing>> = mutableListOf(),
|
titles: MutableList<TitleSimple<ArticleForListing>> = mutableListOf(),
|
||||||
draft: Boolean = false,
|
draft: Boolean = false,
|
||||||
lastVersion: Boolean = false,
|
lastVersion: Boolean = false,
|
||||||
override val createdBy: CitizenSimple
|
override val createdBy: CitizenCreator
|
||||||
) : ConstitutionSimple<CitizenSimple, TitleSimple<ArticleForListing>>(
|
) : ConstitutionSimple<CitizenCreator, TitleSimple<ArticleForListing>>(
|
||||||
id,
|
id,
|
||||||
title = title,
|
title = title,
|
||||||
anonymous = anonymous,
|
anonymous = anonymous,
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import fr.dcproject.common.entity.EntityI
|
|||||||
import fr.dcproject.common.entity.TargetRef
|
import fr.dcproject.common.entity.TargetRef
|
||||||
import fr.dcproject.component.article.ArticleRepository
|
import fr.dcproject.component.article.ArticleRepository
|
||||||
import fr.dcproject.component.article.ArticleWithTitleI
|
import fr.dcproject.component.article.ArticleWithTitleI
|
||||||
import fr.dcproject.component.citizen.CitizenBasicI
|
import fr.dcproject.component.citizen.CitizenCreatorI
|
||||||
import fr.dcproject.component.citizen.CitizenRepository
|
import fr.dcproject.component.citizen.CitizenRepository
|
||||||
import fr.dcproject.component.follow.FollowForView
|
import fr.dcproject.component.follow.FollowForView
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
@@ -42,7 +42,7 @@ class NotificationEmailSender(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun generateHtmlContent(citizen: CitizenBasicI, target: EntityI): String? {
|
private fun generateHtmlContent(citizen: CitizenCreatorI, target: EntityI): String? {
|
||||||
return when (target) {
|
return when (target) {
|
||||||
is ArticleWithTitleI -> """
|
is ArticleWithTitleI -> """
|
||||||
Hello ${citizen.name.getFullName()},<br/>
|
Hello ${citizen.name.getFullName()},<br/>
|
||||||
@@ -52,7 +52,7 @@ class NotificationEmailSender(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun generateContent(citizen: CitizenBasicI, target: EntityI): String {
|
private fun generateContent(citizen: CitizenCreatorI, target: EntityI): String {
|
||||||
return when (target) {
|
return when (target) {
|
||||||
is ArticleWithTitleI -> """
|
is ArticleWithTitleI -> """
|
||||||
Hello ${citizen.name.getFullName()},
|
Hello ${citizen.name.getFullName()},
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import fr.dcproject.common.security.AccessControl
|
|||||||
import fr.dcproject.common.security.AccessResponse
|
import fr.dcproject.common.security.AccessResponse
|
||||||
import fr.dcproject.component.citizen.CitizenI
|
import fr.dcproject.component.citizen.CitizenI
|
||||||
import fr.dcproject.component.vote.entity.VoteForUpdateI
|
import fr.dcproject.component.vote.entity.VoteForUpdateI
|
||||||
import fr.dcproject.component.vote.entity.Vote as VoteEntity
|
import fr.dcproject.component.vote.entity.VoteForView as VoteEntity
|
||||||
|
|
||||||
class VoteAccessControl : AccessControl() {
|
class VoteAccessControl : AccessControl() {
|
||||||
fun <S> canCreate(subject: VoteForUpdateI<S, *>, citizen: CitizenI?): AccessResponse where S : DeletedAt, S : TargetI = when {
|
fun <S> canCreate(subject: VoteForUpdateI<S, *>, citizen: CitizenI?): AccessResponse where S : DeletedAt, S : TargetI = when {
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import fr.postgresjson.connexion.Requester
|
|||||||
import fr.postgresjson.repository.RepositoryI
|
import fr.postgresjson.repository.RepositoryI
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
import fr.dcproject.component.citizen.Citizen as CitizenEntity
|
import fr.dcproject.component.citizen.Citizen as CitizenEntity
|
||||||
import fr.dcproject.component.vote.entity.Vote as VoteEntity
|
import fr.dcproject.component.vote.entity.VoteForView as VoteEntity
|
||||||
|
|
||||||
abstract class VoteRepositoryAbs<T : TargetI>(override var requester: Requester) : RepositoryI {
|
abstract class VoteRepositoryAbs<T : TargetI>(override var requester: Requester) : RepositoryI {
|
||||||
fun vote(vote: VoteForUpdateI<T, *>, anonymous: Boolean? = null): VoteAggregation {
|
fun vote(vote: VoteForUpdateI<T, *>, anonymous: Boolean? = null): VoteAggregation {
|
||||||
|
|||||||
@@ -7,22 +7,21 @@ import fr.dcproject.common.entity.ExtraI
|
|||||||
import fr.dcproject.common.entity.HasTarget
|
import fr.dcproject.common.entity.HasTarget
|
||||||
import fr.dcproject.common.entity.TargetI
|
import fr.dcproject.common.entity.TargetI
|
||||||
import fr.dcproject.common.entity.UpdatedAt
|
import fr.dcproject.common.entity.UpdatedAt
|
||||||
import fr.dcproject.component.citizen.CitizenBasic
|
import fr.dcproject.component.citizen.CitizenCreator
|
||||||
import fr.dcproject.component.citizen.CitizenBasicI
|
import fr.dcproject.component.citizen.CitizenCreatorI
|
||||||
import fr.dcproject.component.citizen.CitizenI
|
import fr.dcproject.component.citizen.CitizenI
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
@Deprecated("")
|
class VoteForView<T : TargetI>(
|
||||||
class Vote<T : TargetI>(
|
|
||||||
id: UUID = UUID.randomUUID(),
|
id: UUID = UUID.randomUUID(),
|
||||||
override val createdBy: CitizenBasic,
|
override val createdBy: CitizenCreator,
|
||||||
override val target: T,
|
override val target: T,
|
||||||
var note: Int,
|
var note: Int,
|
||||||
var anonymous: Boolean = true
|
var anonymous: Boolean = true
|
||||||
) : ExtraI<T, CitizenBasicI>,
|
) : ExtraI<T, CitizenCreatorI>,
|
||||||
VoteRef(id),
|
VoteRef(id),
|
||||||
CreatedAt by CreatedAt.Imp(),
|
CreatedAt by CreatedAt.Imp(),
|
||||||
CreatedBy<CitizenBasicI> by CreatedBy.Imp(createdBy),
|
CreatedBy<CitizenCreatorI> by CreatedBy.Imp(createdBy),
|
||||||
UpdatedAt by UpdatedAt.Imp() {
|
UpdatedAt by UpdatedAt.Imp() {
|
||||||
init {
|
init {
|
||||||
if (note > 1 && note < -1) {
|
if (note > 1 && note < -1) {
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
package fr.dcproject.component.workgroup
|
package fr.dcproject.component.workgroup
|
||||||
|
|
||||||
import fr.dcproject.component.citizen.CitizenBasic
|
|
||||||
import fr.dcproject.component.citizen.CitizenCreator
|
import fr.dcproject.component.citizen.CitizenCreator
|
||||||
import fr.dcproject.component.citizen.CitizenI
|
import fr.dcproject.component.citizen.CitizenI
|
||||||
import fr.dcproject.component.citizen.CitizenRef
|
import fr.dcproject.component.citizen.CitizenRef
|
||||||
@@ -59,24 +58,24 @@ class WorkgroupRepository(override var requester: Requester) : RepositoryI {
|
|||||||
"members" to Member(citizen, roles).serialize()
|
"members" to Member(citizen, roles).serialize()
|
||||||
)
|
)
|
||||||
|
|
||||||
fun <Z : CitizenI> addMembers(workgroup: WorkgroupI, members: List<Member<Z>>): List<Member<CitizenBasic>> = requester
|
fun <Z : CitizenI> addMembers(workgroup: WorkgroupI, members: List<Member<Z>>): List<Member<CitizenCreator>> = requester
|
||||||
.getFunction("add_workgroup_members")
|
.getFunction("add_workgroup_members")
|
||||||
.select(
|
.select(
|
||||||
"id" to workgroup.id,
|
"id" to workgroup.id,
|
||||||
"members" to members.serialize()
|
"members" to members.serialize()
|
||||||
)
|
)
|
||||||
|
|
||||||
fun <Z : CitizenI> removeMember(workgroup: WorkgroupI, memberToDelete: Member<Z>): List<Member<CitizenBasic>> =
|
fun <Z : CitizenI> removeMember(workgroup: WorkgroupI, memberToDelete: Member<Z>): List<Member<CitizenCreator>> =
|
||||||
removeMembers(workgroup, listOf(memberToDelete))
|
removeMembers(workgroup, listOf(memberToDelete))
|
||||||
|
|
||||||
fun <Z : CitizenI> removeMembers(workgroup: WorkgroupI, membersToDelete: List<Member<Z>>): List<Member<CitizenBasic>> = requester
|
fun <Z : CitizenI> removeMembers(workgroup: WorkgroupI, membersToDelete: List<Member<Z>>): List<Member<CitizenCreator>> = requester
|
||||||
.getFunction("remove_workgroup_members")
|
.getFunction("remove_workgroup_members")
|
||||||
.select(
|
.select(
|
||||||
"id" to workgroup.id,
|
"id" to workgroup.id,
|
||||||
"members" to membersToDelete
|
"members" to membersToDelete
|
||||||
)
|
)
|
||||||
|
|
||||||
fun <Z : CitizenI> updateMembers(workgroup: WorkgroupI, members: List<Member<Z>>): List<Member<CitizenBasic>> = requester
|
fun <Z : CitizenI> updateMembers(workgroup: WorkgroupI, members: List<Member<Z>>): List<Member<CitizenCreator>> = requester
|
||||||
.getFunction("update_workgroup_members")
|
.getFunction("update_workgroup_members")
|
||||||
.select(
|
.select(
|
||||||
"id" to workgroup.id,
|
"id" to workgroup.id,
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import fr.dcproject.common.email.Mailer
|
|||||||
import io.ktor.locations.KtorExperimentalLocationsAPI
|
import io.ktor.locations.KtorExperimentalLocationsAPI
|
||||||
import io.ktor.server.testing.withTestApplication
|
import io.ktor.server.testing.withTestApplication
|
||||||
import io.ktor.util.KtorExperimentalAPI
|
import io.ktor.util.KtorExperimentalAPI
|
||||||
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
import kotlinx.coroutines.InternalCoroutinesApi
|
import kotlinx.coroutines.InternalCoroutinesApi
|
||||||
import org.junit.jupiter.api.Tag
|
import org.junit.jupiter.api.Tag
|
||||||
import org.junit.jupiter.api.Tags
|
import org.junit.jupiter.api.Tags
|
||||||
@@ -24,6 +25,7 @@ import org.koin.test.get
|
|||||||
@Tags(Tag("functional"))
|
@Tags(Tag("functional"))
|
||||||
class MailerTest : KoinTest, AutoCloseKoinTest() {
|
class MailerTest : KoinTest, AutoCloseKoinTest() {
|
||||||
@InternalCoroutinesApi
|
@InternalCoroutinesApi
|
||||||
|
@ExperimentalCoroutinesApi
|
||||||
@Test
|
@Test
|
||||||
@Tags(Tag("online"))
|
@Tags(Tag("online"))
|
||||||
fun `can be send an email`() {
|
fun `can be send an email`() {
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import fr.dcproject.component.citizen.CitizenRef
|
|||||||
import io.ktor.locations.KtorExperimentalLocationsAPI
|
import io.ktor.locations.KtorExperimentalLocationsAPI
|
||||||
import io.ktor.server.testing.withTestApplication
|
import io.ktor.server.testing.withTestApplication
|
||||||
import io.ktor.util.KtorExperimentalAPI
|
import io.ktor.util.KtorExperimentalAPI
|
||||||
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
import org.amshove.kluent.`should be equal to`
|
import org.amshove.kluent.`should be equal to`
|
||||||
import org.junit.jupiter.api.Tag
|
import org.junit.jupiter.api.Tag
|
||||||
import org.junit.jupiter.api.Tags
|
import org.junit.jupiter.api.Tags
|
||||||
@@ -19,6 +20,7 @@ import java.util.UUID
|
|||||||
|
|
||||||
@KtorExperimentalLocationsAPI
|
@KtorExperimentalLocationsAPI
|
||||||
@KtorExperimentalAPI
|
@KtorExperimentalAPI
|
||||||
|
@ExperimentalCoroutinesApi
|
||||||
@TestInstance(PER_CLASS)
|
@TestInstance(PER_CLASS)
|
||||||
@Tags(Tag("functional"))
|
@Tags(Tag("functional"))
|
||||||
class ViewTest {
|
class ViewTest {
|
||||||
|
|||||||
@@ -46,13 +46,13 @@ fun createConstitution(
|
|||||||
): Constitution {
|
): Constitution {
|
||||||
val constitutionRepository: ConstitutionRepository by lazy { GlobalContext.get().koin.get() }
|
val constitutionRepository: ConstitutionRepository by lazy { GlobalContext.get().koin.get() }
|
||||||
|
|
||||||
val createdBy: CitizenWithUserI = createCitizen(createdBy)
|
val creator: CitizenWithUserI = createCitizen(createdBy)
|
||||||
|
|
||||||
val constitution = ConstitutionSimple(
|
val constitution = ConstitutionSimple(
|
||||||
id = id ?: UUID.randomUUID(),
|
id = id ?: UUID.randomUUID(),
|
||||||
title = LoremIpsum().getTitle(3),
|
title = LoremIpsum().getTitle(3),
|
||||||
titles = titles ?: createTitles(5),
|
titles = titles ?: createTitles(5),
|
||||||
createdBy = createdBy,
|
createdBy = creator,
|
||||||
versionId = UUID.randomUUID()
|
versionId = UUID.randomUUID()
|
||||||
)
|
)
|
||||||
return constitutionRepository.upsert(constitution) ?: error("Cannot create constitution")
|
return constitutionRepository.upsert(constitution) ?: error("Cannot create constitution")
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ fun WorkgroupForView<CitizenCreator>.`With members`(
|
|||||||
addMemberToWorkgroup(this, *member)
|
addMemberToWorkgroup(this, *member)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
fun addMemberToWorkgroup(workgroup: WorkgroupForView<CitizenCreator>, vararg membersNames: CitizenI.Name) {
|
fun addMemberToWorkgroup(workgroup: WorkgroupForView<CitizenCreator>, vararg membersNames: CitizenI.Name) {
|
||||||
val citizenRepository: CitizenRepository by lazy { GlobalContext.get().koin.get() }
|
val citizenRepository: CitizenRepository by lazy { GlobalContext.get().koin.get() }
|
||||||
val workgroupRepository: WorkgroupRepository by lazy { GlobalContext.get().koin.get() }
|
val workgroupRepository: WorkgroupRepository by lazy { GlobalContext.get().koin.get() }
|
||||||
@@ -58,8 +59,8 @@ private fun createWorkgroup(
|
|||||||
val citizenRepository: CitizenRepository by lazy { GlobalContext.get().koin.get() }
|
val citizenRepository: CitizenRepository by lazy { GlobalContext.get().koin.get() }
|
||||||
val workgroupRepository: WorkgroupRepository by lazy { GlobalContext.get().koin.get() }
|
val workgroupRepository: WorkgroupRepository by lazy { GlobalContext.get().koin.get() }
|
||||||
|
|
||||||
val createdBy = createdBy ?: CitizenI.Name("Paul", "Langevin")
|
val creatorName = createdBy ?: CitizenI.Name("Paul", "Langevin")
|
||||||
val creator = citizenRepository.findByName(createdBy) ?: run {
|
val creator = citizenRepository.findByName(creatorName) ?: run {
|
||||||
val username = ("username" + UUID.randomUUID().toString())
|
val username = ("username" + UUID.randomUUID().toString())
|
||||||
.toLowerCase().replace(' ', '-')
|
.toLowerCase().replace(' ', '-')
|
||||||
val user = UserForCreate(
|
val user = UserForCreate(
|
||||||
@@ -67,7 +68,7 @@ private fun createWorkgroup(
|
|||||||
password = "azerty",
|
password = "azerty",
|
||||||
)
|
)
|
||||||
CitizenForCreate(
|
CitizenForCreate(
|
||||||
name = createdBy,
|
name = creatorName,
|
||||||
email = "$username@dc-project.fr",
|
email = "$username@dc-project.fr",
|
||||||
birthday = DateTime.now(),
|
birthday = DateTime.now(),
|
||||||
user = user
|
user = user
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import fr.dcproject.common.security.AccessDecision.GRANTED
|
|||||||
import fr.dcproject.component.auth.User
|
import fr.dcproject.component.auth.User
|
||||||
import fr.dcproject.component.auth.UserI
|
import fr.dcproject.component.auth.UserI
|
||||||
import fr.dcproject.component.citizen.CitizenAccessControl
|
import fr.dcproject.component.citizen.CitizenAccessControl
|
||||||
import fr.dcproject.component.citizen.CitizenBasic
|
import fr.dcproject.component.citizen.CitizenCart
|
||||||
import fr.dcproject.component.citizen.CitizenI
|
import fr.dcproject.component.citizen.CitizenI
|
||||||
import org.amshove.kluent.`should be`
|
import org.amshove.kluent.`should be`
|
||||||
import org.joda.time.DateTime
|
import org.joda.time.DateTime
|
||||||
@@ -20,32 +20,26 @@ import org.junit.jupiter.api.parallel.ExecutionMode.CONCURRENT
|
|||||||
@Execution(CONCURRENT)
|
@Execution(CONCURRENT)
|
||||||
@Tags(Tag("security"), Tag("unit"))
|
@Tags(Tag("security"), Tag("unit"))
|
||||||
internal class `Citizen Access Control` {
|
internal class `Citizen Access Control` {
|
||||||
private val tesla = CitizenBasic(
|
private val tesla = CitizenCart(
|
||||||
user = User(
|
user = User(
|
||||||
username = "nicolas-tesla",
|
username = "nicolas-tesla",
|
||||||
roles = listOf(UserI.Roles.ROLE_USER)
|
roles = listOf(UserI.Roles.ROLE_USER)
|
||||||
),
|
),
|
||||||
birthday = DateTime.now(),
|
|
||||||
email = "tesla@best.com",
|
|
||||||
name = CitizenI.Name("Nicolas", "Tesla")
|
name = CitizenI.Name("Nicolas", "Tesla")
|
||||||
)
|
)
|
||||||
private val einstein = CitizenBasic(
|
private val einstein = CitizenCart(
|
||||||
user = User(
|
user = User(
|
||||||
username = "albert-einstein",
|
username = "albert-einstein",
|
||||||
roles = listOf(UserI.Roles.ROLE_USER)
|
roles = listOf(UserI.Roles.ROLE_USER)
|
||||||
),
|
),
|
||||||
birthday = DateTime.now(),
|
|
||||||
email = "einstein@best.com",
|
|
||||||
name = CitizenI.Name("Albert", "Einstein")
|
name = CitizenI.Name("Albert", "Einstein")
|
||||||
)
|
)
|
||||||
|
|
||||||
private val curie = CitizenBasic(
|
private val curie = CitizenCart(
|
||||||
user = User(
|
user = User(
|
||||||
username = "marie-curie",
|
username = "marie-curie",
|
||||||
roles = listOf(UserI.Roles.ROLE_USER)
|
roles = listOf(UserI.Roles.ROLE_USER)
|
||||||
),
|
),
|
||||||
birthday = DateTime.now(),
|
|
||||||
email = "curie@best.com",
|
|
||||||
name = CitizenI.Name("Marie", "Curie"),
|
name = CitizenI.Name("Marie", "Curie"),
|
||||||
deletedAt = DateTime.now()
|
deletedAt = DateTime.now()
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -6,15 +6,14 @@ import fr.dcproject.component.article.ArticleForView
|
|||||||
import fr.dcproject.component.auth.User
|
import fr.dcproject.component.auth.User
|
||||||
import fr.dcproject.component.auth.UserCreator
|
import fr.dcproject.component.auth.UserCreator
|
||||||
import fr.dcproject.component.auth.UserI
|
import fr.dcproject.component.auth.UserI
|
||||||
import fr.dcproject.component.citizen.CitizenBasic
|
|
||||||
import fr.dcproject.component.citizen.CitizenCart
|
import fr.dcproject.component.citizen.CitizenCart
|
||||||
import fr.dcproject.component.citizen.CitizenCreator
|
import fr.dcproject.component.citizen.CitizenCreator
|
||||||
import fr.dcproject.component.citizen.CitizenI
|
import fr.dcproject.component.citizen.CitizenI
|
||||||
|
import fr.dcproject.component.citizen.CitizenRef
|
||||||
import fr.dcproject.component.opinion.OpinionAccessControl
|
import fr.dcproject.component.opinion.OpinionAccessControl
|
||||||
import fr.dcproject.component.opinion.entity.Opinion
|
import fr.dcproject.component.opinion.entity.Opinion
|
||||||
import fr.dcproject.component.opinion.entity.OpinionChoice
|
import fr.dcproject.component.opinion.entity.OpinionChoice
|
||||||
import org.amshove.kluent.`should be`
|
import org.amshove.kluent.`should be`
|
||||||
import org.joda.time.DateTime
|
|
||||||
import org.junit.jupiter.api.Tag
|
import org.junit.jupiter.api.Tag
|
||||||
import org.junit.jupiter.api.Tags
|
import org.junit.jupiter.api.Tags
|
||||||
import org.junit.jupiter.api.Test
|
import org.junit.jupiter.api.Test
|
||||||
@@ -36,16 +35,8 @@ internal class `Opinion Access Control` {
|
|||||||
followAnonymous = false
|
followAnonymous = false
|
||||||
)
|
)
|
||||||
|
|
||||||
private val einstein = CitizenBasic(
|
private val einstein = CitizenRef(
|
||||||
id = UUID.fromString("319f1226-8f47-4df3-babd-2c7671ad0fbc"),
|
id = UUID.fromString("319f1226-8f47-4df3-babd-2c7671ad0fbc"),
|
||||||
user = User(
|
|
||||||
username = "albert-einstein",
|
|
||||||
roles = listOf(UserI.Roles.ROLE_USER)
|
|
||||||
),
|
|
||||||
birthday = DateTime.now(),
|
|
||||||
email = "einstein@best.com",
|
|
||||||
name = CitizenI.Name("Albert", "Einstein"),
|
|
||||||
followAnonymous = true
|
|
||||||
)
|
)
|
||||||
|
|
||||||
private val einstein2 = CitizenCart(
|
private val einstein2 = CitizenCart(
|
||||||
|
|||||||
@@ -1,16 +1,10 @@
|
|||||||
package unit.security
|
package unit.security
|
||||||
|
|
||||||
import fr.dcproject.common.security.AccessDecision.GRANTED
|
import fr.dcproject.common.security.AccessDecision.GRANTED
|
||||||
import fr.dcproject.component.article.ArticleForView
|
import fr.dcproject.component.citizen.CitizenRef
|
||||||
import fr.dcproject.component.auth.User
|
|
||||||
import fr.dcproject.component.auth.UserI
|
|
||||||
import fr.dcproject.component.citizen.CitizenBasic
|
|
||||||
import fr.dcproject.component.citizen.CitizenCart
|
|
||||||
import fr.dcproject.component.citizen.CitizenI
|
|
||||||
import fr.dcproject.component.opinion.OpinionChoiceAccessControl
|
import fr.dcproject.component.opinion.OpinionChoiceAccessControl
|
||||||
import fr.dcproject.component.opinion.entity.OpinionChoice
|
import fr.dcproject.component.opinion.entity.OpinionChoice
|
||||||
import org.amshove.kluent.`should be`
|
import org.amshove.kluent.`should be`
|
||||||
import org.joda.time.DateTime
|
|
||||||
import org.junit.jupiter.api.Tag
|
import org.junit.jupiter.api.Tag
|
||||||
import org.junit.jupiter.api.Tags
|
import org.junit.jupiter.api.Tags
|
||||||
import org.junit.jupiter.api.Test
|
import org.junit.jupiter.api.Test
|
||||||
@@ -23,32 +17,12 @@ import java.util.UUID
|
|||||||
@Execution(CONCURRENT)
|
@Execution(CONCURRENT)
|
||||||
@Tags(Tag("security"), Tag("unit"))
|
@Tags(Tag("security"), Tag("unit"))
|
||||||
internal class `OpinionChoice Access Control` {
|
internal class `OpinionChoice Access Control` {
|
||||||
private val tesla = CitizenBasic(
|
private val tesla = CitizenRef(
|
||||||
id = UUID.fromString("e6efc288-4283-4729-a268-6debb18de1a0"),
|
id = UUID.fromString("e6efc288-4283-4729-a268-6debb18de1a0"),
|
||||||
user = User(
|
|
||||||
username = "nicolas-tesla",
|
|
||||||
roles = listOf(UserI.Roles.ROLE_USER)
|
|
||||||
),
|
|
||||||
birthday = DateTime.now(),
|
|
||||||
email = "tesla@best.com",
|
|
||||||
name = CitizenI.Name("Nicolas", "Tesla"),
|
|
||||||
followAnonymous = false
|
|
||||||
)
|
)
|
||||||
|
|
||||||
private val tesla2 = CitizenCart(
|
private val tesla2 = CitizenRef(
|
||||||
id = UUID.fromString("e6efc288-4283-4729-a268-6debb18de1a0"),
|
id = UUID.fromString("e6efc288-4283-4729-a268-6debb18de1a0"),
|
||||||
user = User(
|
|
||||||
username = "nicolas-tesla",
|
|
||||||
roles = listOf(UserI.Roles.ROLE_USER)
|
|
||||||
),
|
|
||||||
name = CitizenI.Name("Nicolas", "Tesla")
|
|
||||||
)
|
|
||||||
|
|
||||||
private val article1 = ArticleForView(
|
|
||||||
content = "Hi",
|
|
||||||
createdBy = tesla2,
|
|
||||||
description = "blablabla",
|
|
||||||
title = "Super article"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
private val choice1 = OpinionChoice(
|
private val choice1 = OpinionChoice(
|
||||||
|
|||||||
@@ -4,10 +4,11 @@ import fr.dcproject.common.security.AccessDecision.DENIED
|
|||||||
import fr.dcproject.common.security.AccessDecision.GRANTED
|
import fr.dcproject.common.security.AccessDecision.GRANTED
|
||||||
import fr.dcproject.component.article.ArticleForView
|
import fr.dcproject.component.article.ArticleForView
|
||||||
import fr.dcproject.component.auth.User
|
import fr.dcproject.component.auth.User
|
||||||
|
import fr.dcproject.component.auth.UserCreator
|
||||||
import fr.dcproject.component.auth.UserI
|
import fr.dcproject.component.auth.UserI
|
||||||
import fr.dcproject.component.citizen.Citizen
|
import fr.dcproject.component.citizen.Citizen
|
||||||
import fr.dcproject.component.citizen.CitizenBasic
|
|
||||||
import fr.dcproject.component.citizen.CitizenCart
|
import fr.dcproject.component.citizen.CitizenCart
|
||||||
|
import fr.dcproject.component.citizen.CitizenCreator
|
||||||
import fr.dcproject.component.citizen.CitizenI
|
import fr.dcproject.component.citizen.CitizenI
|
||||||
import fr.dcproject.component.vote.VoteAccessControl
|
import fr.dcproject.component.vote.VoteAccessControl
|
||||||
import fr.dcproject.component.vote.entity.VoteForUpdate
|
import fr.dcproject.component.vote.entity.VoteForUpdate
|
||||||
@@ -20,7 +21,7 @@ import org.junit.jupiter.api.TestInstance
|
|||||||
import org.junit.jupiter.api.parallel.Execution
|
import org.junit.jupiter.api.parallel.Execution
|
||||||
import org.junit.jupiter.api.parallel.ExecutionMode.CONCURRENT
|
import org.junit.jupiter.api.parallel.ExecutionMode.CONCURRENT
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
import fr.dcproject.component.vote.entity.Vote as VoteEntity
|
import fr.dcproject.component.vote.entity.VoteForView
|
||||||
|
|
||||||
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
|
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
|
||||||
@Execution(CONCURRENT)
|
@Execution(CONCURRENT)
|
||||||
@@ -37,13 +38,11 @@ internal class `Vote Access Control` {
|
|||||||
name = CitizenI.Name("Nicolas", "Tesla"),
|
name = CitizenI.Name("Nicolas", "Tesla"),
|
||||||
followAnonymous = false
|
followAnonymous = false
|
||||||
)
|
)
|
||||||
private val tesla3 = CitizenBasic(
|
private val tesla3 = CitizenCreator(
|
||||||
id = UUID.fromString("a1e35c99-9d33-4fb4-9201-58d7071243bb"),
|
id = UUID.fromString("a1e35c99-9d33-4fb4-9201-58d7071243bb"),
|
||||||
user = User(
|
user = UserCreator(
|
||||||
username = "nicolas-tesla",
|
username = "nicolas-tesla",
|
||||||
roles = listOf(UserI.Roles.ROLE_USER)
|
|
||||||
),
|
),
|
||||||
birthday = DateTime.now(),
|
|
||||||
email = "tesla@best.com",
|
email = "tesla@best.com",
|
||||||
name = CitizenI.Name("Nicolas", "Tesla"),
|
name = CitizenI.Name("Nicolas", "Tesla"),
|
||||||
followAnonymous = false
|
followAnonymous = false
|
||||||
@@ -77,7 +76,7 @@ internal class `Vote Access Control` {
|
|||||||
title = "Super article"
|
title = "Super article"
|
||||||
)
|
)
|
||||||
|
|
||||||
private val vote1 = VoteEntity(
|
private val vote1 = VoteForView(
|
||||||
createdBy = tesla3,
|
createdBy = tesla3,
|
||||||
target = article1,
|
target = article1,
|
||||||
note = 1
|
note = 1
|
||||||
|
|||||||
@@ -5,14 +5,13 @@ import fr.dcproject.common.security.AccessDecision.GRANTED
|
|||||||
import fr.dcproject.component.auth.User
|
import fr.dcproject.component.auth.User
|
||||||
import fr.dcproject.component.auth.UserCreator
|
import fr.dcproject.component.auth.UserCreator
|
||||||
import fr.dcproject.component.auth.UserI
|
import fr.dcproject.component.auth.UserI
|
||||||
import fr.dcproject.component.citizen.CitizenBasic
|
|
||||||
import fr.dcproject.component.citizen.CitizenCart
|
import fr.dcproject.component.citizen.CitizenCart
|
||||||
import fr.dcproject.component.citizen.CitizenCreator
|
import fr.dcproject.component.citizen.CitizenCreator
|
||||||
import fr.dcproject.component.citizen.CitizenI
|
import fr.dcproject.component.citizen.CitizenI
|
||||||
|
import fr.dcproject.component.citizen.CitizenRef
|
||||||
import fr.dcproject.component.workgroup.WorkgroupAccessControl
|
import fr.dcproject.component.workgroup.WorkgroupAccessControl
|
||||||
import fr.dcproject.component.workgroup.WorkgroupWithMembersI
|
import fr.dcproject.component.workgroup.WorkgroupWithMembersI
|
||||||
import org.amshove.kluent.`should be`
|
import org.amshove.kluent.`should be`
|
||||||
import org.joda.time.DateTime
|
|
||||||
import org.junit.jupiter.api.Tag
|
import org.junit.jupiter.api.Tag
|
||||||
import org.junit.jupiter.api.Tags
|
import org.junit.jupiter.api.Tags
|
||||||
import org.junit.jupiter.api.Test
|
import org.junit.jupiter.api.Test
|
||||||
@@ -35,25 +34,8 @@ internal class `Workgroup Access Control` {
|
|||||||
followAnonymous = false
|
followAnonymous = false
|
||||||
)
|
)
|
||||||
|
|
||||||
private val einstein = CitizenBasic(
|
private val einstein = CitizenRef(
|
||||||
id = UUID.fromString("319f1226-8f47-4df3-babd-2c7671ad0fbc"),
|
id = UUID.fromString("319f1226-8f47-4df3-babd-2c7671ad0fbc"),
|
||||||
user = User(
|
|
||||||
username = "albert-einstein",
|
|
||||||
roles = listOf(UserI.Roles.ROLE_USER)
|
|
||||||
),
|
|
||||||
birthday = DateTime.now(),
|
|
||||||
email = "einstein@best.com",
|
|
||||||
name = CitizenI.Name("Albert", "Einstein"),
|
|
||||||
followAnonymous = true
|
|
||||||
)
|
|
||||||
|
|
||||||
private val einstein2 = CitizenCart(
|
|
||||||
id = UUID.fromString("319f1226-8f47-4df3-babd-2c7671ad0fbc"),
|
|
||||||
user = User(
|
|
||||||
username = "albert-einstein",
|
|
||||||
roles = listOf(UserI.Roles.ROLE_USER)
|
|
||||||
),
|
|
||||||
name = CitizenI.Name("Albert", "Einstein")
|
|
||||||
)
|
)
|
||||||
|
|
||||||
private val workgroupPublic = WorkgroupEntity(
|
private val workgroupPublic = WorkgroupEntity(
|
||||||
|
|||||||
Reference in New Issue
Block a user