Big refactoring #77

Merged
flecomte merged 166 commits from refactoring-component-and-immutable into master 2021-03-24 19:06:07 +01:00
55 changed files with 159 additions and 150 deletions
Showing only changes of commit b028ff05b9 - Show all commits

View File

@@ -1,4 +1,4 @@
package fr.dcproject package fr.dcproject.application
import com.fasterxml.jackson.core.util.DefaultIndenter import com.fasterxml.jackson.core.util.DefaultIndenter
import com.fasterxml.jackson.core.util.DefaultPrettyPrinter import com.fasterxml.jackson.core.util.DefaultPrettyPrinter
@@ -7,16 +7,19 @@ import com.fasterxml.jackson.databind.PropertyNamingStrategy
import com.fasterxml.jackson.databind.SerializationFeature import com.fasterxml.jackson.databind.SerializationFeature
import com.fasterxml.jackson.datatype.joda.JodaModule import com.fasterxml.jackson.datatype.joda.JodaModule
import com.github.jasync.sql.db.postgresql.exceptions.GenericDatabaseException import com.github.jasync.sql.db.postgresql.exceptions.GenericDatabaseException
import fr.dcproject.Env.PROD import fr.dcproject.application.Env.PROD
import fr.dcproject.component.article.routes.findArticleVersions import fr.dcproject.component.article.routes.findArticleVersions
import fr.dcproject.component.article.routes.findArticles import fr.dcproject.component.article.routes.findArticles
import fr.dcproject.component.article.routes.getOneArticle import fr.dcproject.component.article.routes.getOneArticle
import fr.dcproject.component.article.routes.upsertArticle import fr.dcproject.component.article.routes.upsertArticle
import fr.dcproject.component.auth.ForbiddenException
import fr.dcproject.component.auth.User import fr.dcproject.component.auth.User
import fr.dcproject.component.auth.UserRepository import fr.dcproject.component.auth.UserRepository
import fr.dcproject.component.auth.jwt.JwtConfig
import fr.dcproject.component.auth.routes.authLogin import fr.dcproject.component.auth.routes.authLogin
import fr.dcproject.component.auth.routes.authRegister import fr.dcproject.component.auth.routes.authRegister
import fr.dcproject.component.auth.routes.authSso import fr.dcproject.component.auth.routes.authSso
import fr.dcproject.component.auth.user
import fr.dcproject.component.citizen.routes.changeMyPassword import fr.dcproject.component.citizen.routes.changeMyPassword
import fr.dcproject.component.citizen.routes.findCitizen import fr.dcproject.component.citizen.routes.findCitizen
import fr.dcproject.component.citizen.routes.getCurrentCitizen import fr.dcproject.component.citizen.routes.getCurrentCitizen
@@ -48,7 +51,7 @@ import io.ktor.application.*
import io.ktor.auth.* import io.ktor.auth.*
import io.ktor.auth.jwt.* import io.ktor.auth.jwt.*
import io.ktor.client.* import io.ktor.client.*
import io.ktor.client.engine.jetty.* import io.ktor.client.engine.jetty.Jetty
import io.ktor.features.* import io.ktor.features.*
import io.ktor.http.* import io.ktor.http.*
import io.ktor.http.auth.* import io.ktor.http.auth.*
@@ -56,6 +59,7 @@ import io.ktor.jackson.*
import io.ktor.locations.* import io.ktor.locations.*
import io.ktor.response.* import io.ktor.response.*
import io.ktor.routing.* import io.ktor.routing.*
import io.ktor.server.jetty.*
import io.ktor.util.* import io.ktor.util.*
import io.ktor.websocket.* import io.ktor.websocket.*
import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -68,7 +72,7 @@ import java.time.Duration
import java.util.* import java.util.*
import java.util.concurrent.CompletionException import java.util.concurrent.CompletionException
fun main(args: Array<String>): Unit = io.ktor.server.jetty.EngineMain.main(args) fun main(args: Array<String>): Unit = EngineMain.main(args)
enum class Env { PROD, TEST, CUCUMBER } enum class Env { PROD, TEST, CUCUMBER }

View File

@@ -1,14 +1,9 @@
package fr.dcproject package fr.dcproject.application
import com.auth0.jwt.JWT
import com.auth0.jwt.JWTVerifier
import com.auth0.jwt.algorithms.Algorithm
import com.typesafe.config.ConfigFactory import com.typesafe.config.ConfigFactory
import fr.dcproject.component.auth.UserI
import java.net.URI import java.net.URI
import java.util.*
object Config { object Configuration {
private var config = ConfigFactory.load() private var config = ConfigFactory.load()
object Sql { object Sql {
@@ -31,33 +26,3 @@ object Config {
val exchangeNotificationName = "notification" val exchangeNotificationName = "notification"
val sendGridKey: String = config.getString("mail.sendGrid.key") val sendGridKey: String = config.getString("mail.sendGrid.key")
} }
object JwtConfig {
private const val secret = "zAP5MBA4B4Ijz0MZaS48"
const val issuer = "dc-project.fr"
private const val validityInMs = 3_600_000 * 10 // 10 hours
// TODO change to RSA512
val algorithm = Algorithm.HMAC512(secret)
val verifier: JWTVerifier = JWT
.require(algorithm)
.withIssuer(issuer)
.build()
/**
* Produce a token for this combination of User and Account
* TODO move token creator in other place
*/
fun makeToken(user: UserI): String = JWT.create()
.withSubject("Authentication")
.withIssuer(issuer)
.withClaim("id", user.id.toString())
.withExpiresAt(getExpiration())
.sign(algorithm)
/**
* Calculate the expiration Date based on current time + the given validity
*/
private fun getExpiration() = Date(System.currentTimeMillis() + validityInMs)
}

View File

@@ -1,4 +1,4 @@
package fr.dcproject package fr.dcproject.application
import fr.dcproject.component.article.ArticleForView import fr.dcproject.component.article.ArticleForView
import fr.dcproject.component.article.ArticleRef import fr.dcproject.component.article.ArticleRef
@@ -6,12 +6,14 @@ import fr.dcproject.component.article.ArticleRepository
import fr.dcproject.component.citizen.Citizen import fr.dcproject.component.citizen.Citizen
import fr.dcproject.component.citizen.CitizenBasic import fr.dcproject.component.citizen.CitizenBasic
import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.CitizenRef
import fr.dcproject.component.citizen.CitizenRepository
import fr.dcproject.component.comment.generic.CommentRef import fr.dcproject.component.comment.generic.CommentRef
import fr.dcproject.component.workgroup.Workgroup
import fr.dcproject.component.workgroup.WorkgroupRef
import fr.dcproject.component.workgroup.WorkgroupRepository
import fr.dcproject.entity.Constitution import fr.dcproject.entity.Constitution
import fr.dcproject.entity.ConstitutionRef import fr.dcproject.entity.ConstitutionRef
import fr.dcproject.component.workgroup.WorkgroupRef
import fr.dcproject.repository.OpinionChoice import fr.dcproject.repository.OpinionChoice
import fr.dcproject.component.workgroup.WorkgroupRepository
import io.ktor.features.* import io.ktor.features.*
import io.ktor.util.* import io.ktor.util.*
import org.koin.core.context.GlobalContext import org.koin.core.context.GlobalContext
@@ -84,7 +86,7 @@ val converters: ConverterDeclaration = {
decode { values, _ -> decode { values, _ ->
val id = values.singleOrNull()?.let { UUID.fromString(it) } val id = values.singleOrNull()?.let { UUID.fromString(it) }
?: throw InternalError("Cannot convert $values to UUID") ?: throw InternalError("Cannot convert $values to UUID")
get<fr.dcproject.component.citizen.CitizenRepository>().findById(id) ?: throw NotFoundException("Citizen $values not found") get<CitizenRepository>().findById(id) ?: throw NotFoundException("Citizen $values not found")
} }
} }
@@ -113,7 +115,7 @@ val converters: ConverterDeclaration = {
} }
} }
convert<fr.dcproject.component.workgroup.Workgroup<CitizenBasic>> { convert<Workgroup<CitizenBasic>> {
decode { values, _ -> decode { values, _ ->
val id = values.singleOrNull()?.let { UUID.fromString(it) } val id = values.singleOrNull()?.let { UUID.fromString(it) }
?: throw InternalError("Cannot convert $values to UUID") ?: throw InternalError("Cannot convert $values to UUID")

View File

@@ -1,4 +1,4 @@
package fr.dcproject package fr.dcproject.application
import com.fasterxml.jackson.databind.DeserializationFeature import com.fasterxml.jackson.databind.DeserializationFeature
import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.ObjectMapper
@@ -48,30 +48,30 @@ import fr.dcproject.repository.VoteConstitution as VoteConstitutionRepository
@KtorExperimentalAPI @KtorExperimentalAPI
val KoinModule = module { val KoinModule = module {
single { Config } single { Configuration }
// SQL connection // SQL connection
single { single {
Connection( Connection(
host = Config.host, host = Configuration.host,
port = Config.port, port = Configuration.port,
database = Config.database, database = Configuration.database,
username = Config.username, username = Configuration.username,
password = Config.password password = Configuration.password
) )
} }
// Launch Database migration // Launch Database migration
single { Migrations(get(), Config.Sql.migrationFiles, Config.Sql.functionFiles) } single { Migrations(get(), Configuration.Sql.migrationFiles, Configuration.Sql.functionFiles) }
// Redis client // Redis client
single<RedisAsyncCommands<String, String>> { single<RedisAsyncCommands<String, String>> {
RedisClient.create(Config.redis).connect()?.async() ?: error("Unable to connect to redis") RedisClient.create(Configuration.redis).connect()?.async() ?: error("Unable to connect to redis")
} }
// RabbitMQ // RabbitMQ
single<ConnectionFactory> { single<ConnectionFactory> {
ConnectionFactory().apply { setUri(Config.rabbitmq) } ConnectionFactory().apply { setUri(Configuration.rabbitmq) }
} }
// JsonSerializer // JsonSerializer
@@ -97,7 +97,7 @@ val KoinModule = module {
single { single {
Requester.RequesterFactory( Requester.RequesterFactory(
connection = get(), connection = get(),
functionsDirectory = Config.Sql.functionFiles functionsDirectory = Configuration.Sql.functionFiles
).createRequester() ).createRequester()
} }
@@ -127,19 +127,19 @@ val KoinModule = module {
// Elasticsearch Client // Elasticsearch Client
single<RestClient> { single<RestClient> {
RestClient.builder( RestClient.builder(
HttpHost.create(Config.elasticsearch) HttpHost.create(Configuration.elasticsearch)
).build() ).build()
} }
single { ArticleViewManager(get()) } single { ArticleViewManager(get()) }
// Mailer // Mailer
single { Mailer(Config.sendGridKey) } single { Mailer(Configuration.sendGridKey) }
// SSO Manager for connection // SSO Manager for connection
single { SsoManager(get<Mailer>(), Config.domain, get()) } single { SsoManager(get<Mailer>(), Configuration.domain, get()) }
single { Publisher(get(), get()) } single { Publisher(get(), get()) }
single { NotificationEmailSender(get<Mailer>(), Config.domain, get(), get()) } single { NotificationEmailSender(get<Mailer>(), Configuration.domain, get(), get()) }
} }

View File

@@ -1,9 +1,9 @@
package fr.dcproject.component.article.routes package fr.dcproject.component.article.routes
import fr.dcproject.citizenOrNull
import fr.dcproject.component.article.ArticleForView import fr.dcproject.component.article.ArticleForView
import fr.dcproject.component.article.ArticleRepository import fr.dcproject.component.article.ArticleRepository
import fr.dcproject.component.article.ArticleVoter import fr.dcproject.component.article.ArticleVoter
import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.voter.assert import fr.dcproject.voter.assert
import fr.postgresjson.repository.RepositoryI import fr.postgresjson.repository.RepositoryI
import io.ktor.application.* import io.ktor.application.*

View File

@@ -1,9 +1,9 @@
package fr.dcproject.component.article.routes package fr.dcproject.component.article.routes
import fr.dcproject.citizenOrNull
import fr.dcproject.component.article.ArticleForListing import fr.dcproject.component.article.ArticleForListing
import fr.dcproject.component.article.ArticleRepository import fr.dcproject.component.article.ArticleRepository
import fr.dcproject.component.article.ArticleVoter import fr.dcproject.component.article.ArticleVoter
import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.voter.assert import fr.dcproject.voter.assert
import fr.postgresjson.connexion.Paginated import fr.postgresjson.connexion.Paginated
import fr.postgresjson.repository.RepositoryI import fr.postgresjson.repository.RepositoryI

View File

@@ -1,11 +1,11 @@
package fr.dcproject.component.article.routes package fr.dcproject.component.article.routes
import fr.dcproject.citizenOrNull
import fr.dcproject.component.article.ArticleForView import fr.dcproject.component.article.ArticleForView
import fr.dcproject.component.article.ArticleRepository import fr.dcproject.component.article.ArticleRepository
import fr.dcproject.component.article.ArticleViewManager import fr.dcproject.component.article.ArticleViewManager
import fr.dcproject.component.article.ArticleVoter import fr.dcproject.component.article.ArticleVoter
import fr.dcproject.component.article.routes.ArticleRequest.Output import fr.dcproject.component.article.routes.ArticleRequest.Output
import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.dto.* import fr.dcproject.dto.*
import fr.dcproject.voter.assert import fr.dcproject.voter.assert
import io.ktor.application.* import io.ktor.application.*

View File

@@ -1,16 +1,16 @@
package fr.dcproject.component.article.routes package fr.dcproject.component.article.routes
import fr.dcproject.citizen
import fr.dcproject.citizenOrNull
import fr.dcproject.component.article.ArticleForUpdate import fr.dcproject.component.article.ArticleForUpdate
import fr.dcproject.component.article.ArticleForView import fr.dcproject.component.article.ArticleForView
import fr.dcproject.component.article.ArticleRepository import fr.dcproject.component.article.ArticleRepository
import fr.dcproject.component.article.ArticleVoter import fr.dcproject.component.article.ArticleVoter
import fr.dcproject.component.article.routes.PostArticleRequest.Input import fr.dcproject.component.article.routes.PostArticleRequest.Input
import fr.dcproject.component.auth.citizen
import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.workgroup.WorkgroupRef import fr.dcproject.component.workgroup.WorkgroupRef
import fr.dcproject.component.workgroup.WorkgroupRepository
import fr.dcproject.event.ArticleUpdate import fr.dcproject.event.ArticleUpdate
import fr.dcproject.event.raiseEvent import fr.dcproject.event.raiseEvent
import fr.dcproject.component.workgroup.WorkgroupRepository
import fr.dcproject.voter.assert import fr.dcproject.voter.assert
import io.ktor.application.* import io.ktor.application.*
import io.ktor.locations.* import io.ktor.locations.*

View File

@@ -1,7 +1,5 @@
package fr.dcproject package fr.dcproject.component.auth
import fr.dcproject.component.auth.User
import fr.dcproject.component.auth.UserI
import fr.dcproject.component.citizen.CitizenRepository import fr.dcproject.component.citizen.CitizenRepository
import io.ktor.application.* import io.ktor.application.*
import io.ktor.auth.* import io.ktor.auth.*

View File

@@ -3,10 +3,10 @@ package fr.dcproject.component.auth
import com.sendgrid.helpers.mail.Mail import com.sendgrid.helpers.mail.Mail
import com.sendgrid.helpers.mail.objects.Content import com.sendgrid.helpers.mail.objects.Content
import com.sendgrid.helpers.mail.objects.Email import com.sendgrid.helpers.mail.objects.Email
import fr.dcproject.JwtConfig
import fr.dcproject.component.citizen.CitizenRepository import fr.dcproject.component.citizen.CitizenRepository
import fr.dcproject.component.citizen.CitizenWithEmail import fr.dcproject.component.citizen.CitizenWithEmail
import fr.dcproject.component.citizen.CitizenWithUserI import fr.dcproject.component.citizen.CitizenWithUserI
import fr.dcproject.makeToken
import fr.dcproject.messages.Mailer import fr.dcproject.messages.Mailer
import io.ktor.http.* import io.ktor.http.*
@@ -25,7 +25,7 @@ class SsoManager(
fun <C> sendEmail(citizen: C, url: String) where C : CitizenWithEmail, C : CitizenWithUserI { fun <C> sendEmail(citizen: C, url: String) where C : CitizenWithEmail, C : CitizenWithUserI {
mailer.sendEmail { mailer.sendEmail {
val token = JwtConfig.makeToken(citizen.user) val token = citizen.user.makeToken()
Mail( Mail(
Email("sso@$domain"), Email("sso@$domain"),
"Connection", "Connection",

View File

@@ -0,0 +1,15 @@
package fr.dcproject
import com.auth0.jwt.JWT
import fr.dcproject.component.auth.UserI
import fr.dcproject.component.auth.jwt.JwtConfig
/**
* Produce a token for this combination of User and Account
*/
fun UserI.makeToken(): String = JWT.create()
.withSubject("Authentication")
.withIssuer(JwtConfig.issuer)
.withClaim("id", id.toString())
.withExpiresAt(JwtConfig.getExpiration())
.sign(JwtConfig.algorithm)

View File

@@ -0,0 +1,25 @@
package fr.dcproject.component.auth.jwt
import com.auth0.jwt.JWT
import com.auth0.jwt.JWTVerifier
import com.auth0.jwt.algorithms.Algorithm
import java.util.*
object JwtConfig {
private const val secret = "zAP5MBA4B4Ijz0MZaS48"
const val issuer = "dc-project.fr"
private const val validityInMs = 3_600_000 * 10 // 10 hours
// TODO change to RSA512
val algorithm: Algorithm = Algorithm.HMAC512(secret)
val verifier: JWTVerifier = JWT
.require(algorithm)
.withIssuer(issuer)
.build()
/**
* Calculate the expiration Date based on current time + the given validity
*/
fun getExpiration() = Date(System.currentTimeMillis() + validityInMs)
}

View File

@@ -1,8 +1,8 @@
package fr.dcproject.component.auth.routes package fr.dcproject.component.auth.routes
import com.fasterxml.jackson.databind.exc.MismatchedInputException import com.fasterxml.jackson.databind.exc.MismatchedInputException
import fr.dcproject.JwtConfig
import fr.dcproject.component.auth.UserRepository import fr.dcproject.component.auth.UserRepository
import fr.dcproject.makeToken
import io.ktor.application.* import io.ktor.application.*
import io.ktor.auth.* import io.ktor.auth.*
import io.ktor.http.* import io.ktor.http.*
@@ -23,7 +23,7 @@ fun Route.authLogin(userRepo: UserRepository) {
try { try {
val credentials = call.receive<UserPasswordCredential>() val credentials = call.receive<UserPasswordCredential>()
userRepo.findByCredentials(credentials)?.let { user -> userRepo.findByCredentials(credentials)?.let { user ->
call.respondText(JwtConfig.makeToken(user)) call.respondText(user.makeToken())
} ?: call.respond(HttpStatusCode.BadRequest, "Username not exist or password is wrong") } ?: call.respond(HttpStatusCode.BadRequest, "Username not exist or password is wrong")
} catch (e: MismatchedInputException) { } catch (e: MismatchedInputException) {
call.respond(HttpStatusCode.BadRequest, "You must be send name and password to the request") call.respond(HttpStatusCode.BadRequest, "You must be send name and password to the request")

View File

@@ -1,13 +1,13 @@
package fr.dcproject.component.auth.routes package fr.dcproject.component.auth.routes
import com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException import com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException
import fr.dcproject.JwtConfig
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.auth.routes.RegisterRequest.Input import fr.dcproject.component.auth.routes.RegisterRequest.Input
import fr.dcproject.component.citizen.Citizen import fr.dcproject.component.citizen.Citizen
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.CitizenI
import fr.dcproject.component.citizen.CitizenRepository import fr.dcproject.component.citizen.CitizenRepository
import fr.dcproject.makeToken
import io.ktor.application.* import io.ktor.application.*
import io.ktor.features.* import io.ktor.features.*
import io.ktor.http.* import io.ktor.http.*
@@ -61,7 +61,7 @@ fun Route.authRegister(citizenRepo: CitizenRepository) {
try { try {
val citizen = call.receive<Input>().toCitizen() val citizen = call.receive<Input>().toCitizen()
val createdCitizen = citizenRepo.insertWithUser(citizen)?.user ?: throw BadRequestException("Bad request") val createdCitizen = citizenRepo.insertWithUser(citizen)?.user ?: throw BadRequestException("Bad request")
call.respondText(JwtConfig.makeToken(createdCitizen)) call.respondText(createdCitizen.makeToken())
} catch (e: MissingKotlinParameterException) { } catch (e: MissingKotlinParameterException) {
call.respond(HttpStatusCode.BadRequest) call.respond(HttpStatusCode.BadRequest)
} }

View File

@@ -1,9 +1,9 @@
package fr.dcproject.component.citizen.routes package fr.dcproject.component.citizen.routes
import com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException import com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException
import fr.dcproject.citizen
import fr.dcproject.citizenOrNull
import fr.dcproject.component.auth.UserRepository import fr.dcproject.component.auth.UserRepository
import fr.dcproject.component.auth.citizen
import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.citizen.Citizen import fr.dcproject.component.citizen.Citizen
import fr.dcproject.component.citizen.CitizenVoter import fr.dcproject.component.citizen.CitizenVoter
import fr.dcproject.voter.assert import fr.dcproject.voter.assert

View File

@@ -1,6 +1,6 @@
package fr.dcproject.component.citizen.routes package fr.dcproject.component.citizen.routes
import fr.dcproject.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.citizen.CitizenRepository import fr.dcproject.component.citizen.CitizenRepository
import fr.dcproject.component.citizen.CitizenVoter import fr.dcproject.component.citizen.CitizenVoter
import fr.dcproject.voter.assert import fr.dcproject.voter.assert

View File

@@ -1,7 +1,7 @@
package fr.dcproject.component.citizen.routes package fr.dcproject.component.citizen.routes
import fr.dcproject.citizen import fr.dcproject.component.auth.citizen
import fr.dcproject.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.citizen.CitizenVoter import fr.dcproject.component.citizen.CitizenVoter
import fr.dcproject.voter.assert import fr.dcproject.voter.assert
import io.ktor.application.* import io.ktor.application.*

View File

@@ -1,6 +1,6 @@
package fr.dcproject.component.citizen.routes package fr.dcproject.component.citizen.routes
import fr.dcproject.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.citizen.Citizen import fr.dcproject.component.citizen.Citizen
import fr.dcproject.component.citizen.CitizenVoter import fr.dcproject.component.citizen.CitizenVoter
import fr.dcproject.voter.assert import fr.dcproject.voter.assert

View File

@@ -1,8 +1,8 @@
package fr.dcproject.component.comment.article.routes package fr.dcproject.component.comment.article.routes
import fr.dcproject.citizen
import fr.dcproject.citizenOrNull
import fr.dcproject.component.article.ArticleForView import fr.dcproject.component.article.ArticleForView
import fr.dcproject.component.auth.citizen
import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.comment.article.CommentArticleRepository import fr.dcproject.component.comment.article.CommentArticleRepository
import fr.dcproject.component.comment.generic.CommentForUpdate import fr.dcproject.component.comment.generic.CommentForUpdate
import fr.dcproject.component.comment.generic.CommentVoter import fr.dcproject.component.comment.generic.CommentVoter

View File

@@ -1,7 +1,7 @@
package fr.dcproject.component.comment.article.routes package fr.dcproject.component.comment.article.routes
import fr.dcproject.citizenOrNull
import fr.dcproject.component.article.ArticleRef import fr.dcproject.component.article.ArticleRef
import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.comment.article.CommentArticleRepository import fr.dcproject.component.comment.article.CommentArticleRepository
import fr.dcproject.component.comment.generic.CommentVoter import fr.dcproject.component.comment.generic.CommentVoter
import fr.dcproject.voter.assert import fr.dcproject.voter.assert

View File

@@ -1,6 +1,6 @@
package fr.dcproject.component.comment.article.routes package fr.dcproject.component.comment.article.routes
import fr.dcproject.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.citizen.Citizen import fr.dcproject.component.citizen.Citizen
import fr.dcproject.component.comment.article.CommentArticleRepository import fr.dcproject.component.comment.article.CommentArticleRepository
import fr.dcproject.component.comment.generic.CommentVoter import fr.dcproject.component.comment.generic.CommentVoter

View File

@@ -1,7 +1,7 @@
package fr.dcproject.component.comment.generic.routes package fr.dcproject.component.comment.generic.routes
import fr.dcproject.citizen import fr.dcproject.component.auth.citizen
import fr.dcproject.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.comment.generic.CommentForUpdate import fr.dcproject.component.comment.generic.CommentForUpdate
import fr.dcproject.component.comment.generic.CommentRef import fr.dcproject.component.comment.generic.CommentRef
import fr.dcproject.component.comment.generic.CommentRepository import fr.dcproject.component.comment.generic.CommentRepository

View File

@@ -1,6 +1,6 @@
package fr.dcproject.component.comment.generic.routes package fr.dcproject.component.comment.generic.routes
import fr.dcproject.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.comment.generic.CommentRef import fr.dcproject.component.comment.generic.CommentRef
import fr.dcproject.component.comment.generic.CommentRepository import fr.dcproject.component.comment.generic.CommentRepository
import fr.dcproject.component.comment.generic.CommentVoter import fr.dcproject.component.comment.generic.CommentVoter

View File

@@ -1,6 +1,6 @@
package fr.dcproject.component.comment.generic.routes package fr.dcproject.component.comment.generic.routes
import fr.dcproject.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.comment.generic.CommentRepository import fr.dcproject.component.comment.generic.CommentRepository
import fr.dcproject.component.comment.generic.CommentVoter import fr.dcproject.component.comment.generic.CommentVoter
import fr.dcproject.voter.assert import fr.dcproject.voter.assert

View File

@@ -1,6 +1,6 @@
package fr.dcproject.component.comment.generic.routes package fr.dcproject.component.comment.generic.routes
import fr.dcproject.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.comment.generic.CommentRef import fr.dcproject.component.comment.generic.CommentRef
import fr.dcproject.component.comment.generic.CommentRepository import fr.dcproject.component.comment.generic.CommentRepository
import fr.dcproject.component.comment.generic.CommentVoter import fr.dcproject.component.comment.generic.CommentVoter

View File

@@ -1,11 +1,11 @@
package fr.dcproject.component.workgroup.routes package fr.dcproject.component.workgroup.routes
import fr.dcproject.citizen import fr.dcproject.component.auth.citizen
import fr.dcproject.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.workgroup.WorkgroupRepository import fr.dcproject.component.workgroup.WorkgroupRepository
import fr.dcproject.component.workgroup.WorkgroupSimple import fr.dcproject.component.workgroup.WorkgroupSimple
import fr.dcproject.component.workgroup.routes.CreateWorkgroup.PostWorkgroupRequest.Input
import fr.dcproject.component.workgroup.WorkgroupVoter import fr.dcproject.component.workgroup.WorkgroupVoter
import fr.dcproject.component.workgroup.routes.CreateWorkgroup.PostWorkgroupRequest.Input
import fr.dcproject.voter.assert import fr.dcproject.voter.assert
import io.ktor.application.* import io.ktor.application.*
import io.ktor.http.* import io.ktor.http.*

View File

@@ -1,6 +1,6 @@
package fr.dcproject.component.workgroup.routes package fr.dcproject.component.workgroup.routes
import fr.dcproject.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.workgroup.WorkgroupRepository import fr.dcproject.component.workgroup.WorkgroupRepository
import fr.dcproject.component.workgroup.WorkgroupVoter import fr.dcproject.component.workgroup.WorkgroupVoter
import fr.dcproject.voter.assert import fr.dcproject.voter.assert

View File

@@ -1,9 +1,9 @@
package fr.dcproject.component.workgroup.routes package fr.dcproject.component.workgroup.routes
import fr.dcproject.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.workgroup.WorkgroupRepository import fr.dcproject.component.workgroup.WorkgroupRepository
import fr.dcproject.component.workgroup.routes.EditWorkgroup.PutWorkgroupRequest.Input
import fr.dcproject.component.workgroup.WorkgroupVoter import fr.dcproject.component.workgroup.WorkgroupVoter
import fr.dcproject.component.workgroup.routes.EditWorkgroup.PutWorkgroupRequest.Input
import fr.dcproject.voter.assert import fr.dcproject.voter.assert
import io.ktor.application.* import io.ktor.application.*
import io.ktor.http.* import io.ktor.http.*

View File

@@ -1,6 +1,6 @@
package fr.dcproject.component.workgroup.routes package fr.dcproject.component.workgroup.routes
import fr.dcproject.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.workgroup.WorkgroupRepository import fr.dcproject.component.workgroup.WorkgroupRepository
import fr.dcproject.component.workgroup.WorkgroupVoter import fr.dcproject.component.workgroup.WorkgroupVoter
import fr.dcproject.voter.assert import fr.dcproject.voter.assert

View File

@@ -1,6 +1,6 @@
package fr.dcproject.component.workgroup.routes package fr.dcproject.component.workgroup.routes
import fr.dcproject.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.workgroup.WorkgroupRepository import fr.dcproject.component.workgroup.WorkgroupRepository
import fr.dcproject.component.workgroup.WorkgroupVoter import fr.dcproject.component.workgroup.WorkgroupVoter
import fr.dcproject.utils.toUUID import fr.dcproject.utils.toUUID

View File

@@ -1,10 +1,10 @@
package fr.dcproject.component.workgroup.routes.members package fr.dcproject.component.workgroup.routes.members
import fr.dcproject.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.CitizenRef
import fr.dcproject.component.workgroup.WorkgroupRepository import fr.dcproject.component.workgroup.WorkgroupRepository
import fr.dcproject.component.workgroup.WorkgroupWithMembersI
import fr.dcproject.component.workgroup.WorkgroupVoter import fr.dcproject.component.workgroup.WorkgroupVoter
import fr.dcproject.component.workgroup.WorkgroupWithMembersI
import fr.dcproject.voter.assert import fr.dcproject.voter.assert
import io.ktor.application.* import io.ktor.application.*
import io.ktor.http.* import io.ktor.http.*

View File

@@ -1,10 +1,10 @@
package fr.dcproject.component.workgroup.routes.members package fr.dcproject.component.workgroup.routes.members
import fr.dcproject.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.CitizenRef
import fr.dcproject.component.workgroup.WorkgroupRepository import fr.dcproject.component.workgroup.WorkgroupRepository
import fr.dcproject.component.workgroup.WorkgroupWithMembersI
import fr.dcproject.component.workgroup.WorkgroupVoter import fr.dcproject.component.workgroup.WorkgroupVoter
import fr.dcproject.component.workgroup.WorkgroupWithMembersI
import fr.dcproject.voter.assert import fr.dcproject.voter.assert
import io.ktor.application.* import io.ktor.application.*
import io.ktor.http.* import io.ktor.http.*

View File

@@ -1,10 +1,10 @@
package fr.dcproject.component.workgroup.routes.members package fr.dcproject.component.workgroup.routes.members
import fr.dcproject.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.CitizenRef
import fr.dcproject.component.workgroup.WorkgroupRepository import fr.dcproject.component.workgroup.WorkgroupRepository
import fr.dcproject.component.workgroup.WorkgroupWithMembersI
import fr.dcproject.component.workgroup.WorkgroupVoter import fr.dcproject.component.workgroup.WorkgroupVoter
import fr.dcproject.component.workgroup.WorkgroupWithMembersI
import fr.dcproject.voter.assert import fr.dcproject.voter.assert
import io.ktor.application.* import io.ktor.application.*
import io.ktor.http.* import io.ktor.http.*

View File

@@ -2,7 +2,7 @@ package fr.dcproject.event
import com.rabbitmq.client.* import com.rabbitmq.client.*
import com.rabbitmq.client.BuiltinExchangeType.DIRECT import com.rabbitmq.client.BuiltinExchangeType.DIRECT
import fr.dcproject.Config import fr.dcproject.application.Configuration
import fr.dcproject.component.article.ArticleForView import fr.dcproject.component.article.ArticleForView
import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.CitizenRef
import fr.dcproject.entity.FollowSimple import fr.dcproject.entity.FollowSimple
@@ -46,7 +46,7 @@ class EventNotification(
fun config() { fun config() {
/* Config Rabbit */ /* Config Rabbit */
val exchangeName = Config.exchangeNotificationName val exchangeName = Configuration.exchangeNotificationName
rabbitFactory.newConnection().use { connection -> rabbitFactory.newConnection().use { connection ->
connection.createChannel().use { channel -> connection.createChannel().use { channel ->
channel.queueDeclare("push", true, false, false, null) channel.queueDeclare("push", true, false, false, null)

View File

@@ -2,7 +2,7 @@ package fr.dcproject.event.publisher
import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.ObjectMapper
import com.rabbitmq.client.ConnectionFactory import com.rabbitmq.client.ConnectionFactory
import fr.dcproject.Config import fr.dcproject.application.Configuration
import fr.dcproject.event.EntityEvent import fr.dcproject.event.EntityEvent
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
@@ -19,7 +19,7 @@ class Publisher(
return GlobalScope.launch { return GlobalScope.launch {
factory.newConnection().use { connection -> factory.newConnection().use { connection ->
connection.createChannel().use { channel -> connection.createChannel().use { channel ->
channel.basicPublish(Config.exchangeNotificationName, "", null, it.serialize().toByteArray()) channel.basicPublish(Configuration.exchangeNotificationName, "", null, it.serialize().toByteArray())
logger.debug("Publish message ${it.target.id}") logger.debug("Publish message ${it.target.id}")
} }
} }

View File

@@ -1,7 +1,7 @@
package fr.dcproject.routes package fr.dcproject.routes
import fr.dcproject.citizen import fr.dcproject.component.auth.citizen
import fr.dcproject.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.citizen.Citizen import fr.dcproject.component.citizen.Citizen
import fr.dcproject.component.comment.generic.CommentForUpdate import fr.dcproject.component.comment.generic.CommentForUpdate
import fr.dcproject.component.comment.generic.CommentVoter import fr.dcproject.component.comment.generic.CommentVoter

View File

@@ -1,7 +1,7 @@
package fr.dcproject.routes package fr.dcproject.routes
import fr.dcproject.citizen
import fr.dcproject.component.article.ArticleRef import fr.dcproject.component.article.ArticleRef
import fr.dcproject.component.auth.citizen
import fr.dcproject.component.citizen.CitizenWithUserI import fr.dcproject.component.citizen.CitizenWithUserI
import fr.dcproject.entity.ConstitutionSimple import fr.dcproject.entity.ConstitutionSimple
import fr.dcproject.entity.ConstitutionSimple.TitleSimple import fr.dcproject.entity.ConstitutionSimple.TitleSimple

View File

@@ -1,7 +1,7 @@
package fr.dcproject.routes package fr.dcproject.routes
import fr.dcproject.citizen
import fr.dcproject.component.article.ArticleRef import fr.dcproject.component.article.ArticleRef
import fr.dcproject.component.auth.citizen
import fr.dcproject.component.citizen.Citizen import fr.dcproject.component.citizen.Citizen
import fr.dcproject.entity.FollowForUpdate import fr.dcproject.entity.FollowForUpdate
import fr.dcproject.security.voter.FollowVoter.Action.* import fr.dcproject.security.voter.FollowVoter.Action.*

View File

@@ -1,6 +1,6 @@
package fr.dcproject.routes package fr.dcproject.routes
import fr.dcproject.citizen import fr.dcproject.component.auth.citizen
import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.CitizenRef
import fr.dcproject.entity.ConstitutionRef import fr.dcproject.entity.ConstitutionRef
import fr.dcproject.entity.FollowForUpdate import fr.dcproject.entity.FollowForUpdate

View File

@@ -1,6 +1,6 @@
package fr.dcproject.routes package fr.dcproject.routes
import fr.dcproject.citizen import fr.dcproject.component.auth.citizen
import fr.dcproject.event.Event import fr.dcproject.event.Event
import fr.postgresjson.serializer.deserialize import fr.postgresjson.serializer.deserialize
import io.ktor.client.* import io.ktor.client.*

View File

@@ -1,7 +1,7 @@
package fr.dcproject.routes package fr.dcproject.routes
import fr.dcproject.citizen
import fr.dcproject.component.article.ArticleForView import fr.dcproject.component.article.ArticleForView
import fr.dcproject.component.auth.citizen
import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.CitizenRef
import fr.dcproject.entity.OpinionChoiceRef import fr.dcproject.entity.OpinionChoiceRef
import fr.dcproject.security.voter.OpinionVoter.Action.CREATE import fr.dcproject.security.voter.OpinionVoter.Action.CREATE

View File

@@ -1,7 +1,7 @@
package fr.dcproject.routes package fr.dcproject.routes
import fr.dcproject.citizen
import fr.dcproject.component.article.ArticleForView import fr.dcproject.component.article.ArticleForView
import fr.dcproject.component.auth.citizen
import fr.dcproject.component.citizen.Citizen import fr.dcproject.component.citizen.Citizen
import fr.dcproject.component.comment.generic.CommentRepository import fr.dcproject.component.comment.generic.CommentRepository
import fr.dcproject.entity.VoteForUpdate import fr.dcproject.entity.VoteForUpdate

View File

@@ -1,6 +1,6 @@
package fr.dcproject.routes package fr.dcproject.routes
import fr.dcproject.citizen import fr.dcproject.component.auth.citizen
import fr.dcproject.component.citizen.Citizen import fr.dcproject.component.citizen.Citizen
import fr.dcproject.entity.VoteForUpdate import fr.dcproject.entity.VoteForUpdate
import fr.dcproject.routes.VoteConstitutionPaths.ConstitutionVoteRequest.Content import fr.dcproject.routes.VoteConstitutionPaths.ConstitutionVoteRequest.Content

View File

@@ -1,9 +1,9 @@
package fr.dcproject.security.voter package fr.dcproject.security.voter
import fr.dcproject.component.auth.UserI import fr.dcproject.component.auth.UserI
import fr.dcproject.component.auth.user
import fr.dcproject.component.comment.generic.CommentForView import fr.dcproject.component.comment.generic.CommentForView
import fr.dcproject.entity.ConstitutionSimple import fr.dcproject.entity.ConstitutionSimple
import fr.dcproject.user
import fr.dcproject.voter.NoRuleDefinedException import fr.dcproject.voter.NoRuleDefinedException
import fr.dcproject.voter.NoSubjectDefinedException import fr.dcproject.voter.NoSubjectDefinedException
import fr.ktorVoter.* import fr.ktorVoter.*

View File

@@ -1,6 +1,6 @@
package fr.dcproject.security.voter package fr.dcproject.security.voter
import fr.dcproject.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.CitizenI
import fr.dcproject.entity.FollowI import fr.dcproject.entity.FollowI
import fr.dcproject.voter.NoSubjectDefinedException import fr.dcproject.voter.NoSubjectDefinedException

View File

@@ -2,8 +2,8 @@ package fr.dcproject.security.voter
import fr.dcproject.component.article.ArticleAuthI import fr.dcproject.component.article.ArticleAuthI
import fr.dcproject.component.article.ArticleForView import fr.dcproject.component.article.ArticleForView
import fr.dcproject.component.auth.user
import fr.dcproject.entity.Opinion import fr.dcproject.entity.Opinion
import fr.dcproject.user
import fr.dcproject.voter.NoRuleDefinedException import fr.dcproject.voter.NoRuleDefinedException
import fr.dcproject.voter.NoSubjectDefinedException import fr.dcproject.voter.NoSubjectDefinedException
import fr.ktorVoter.* import fr.ktorVoter.*

View File

@@ -1,6 +1,6 @@
package fr.dcproject.security.voter package fr.dcproject.security.voter
import fr.dcproject.citizenOrNull import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.entity.VoteForUpdateI import fr.dcproject.entity.VoteForUpdateI
import fr.dcproject.entity.VoteI import fr.dcproject.entity.VoteI
import fr.dcproject.voter.NoSubjectDefinedException import fr.dcproject.voter.NoSubjectDefinedException

View File

@@ -1,6 +1,6 @@
import fr.dcproject.Config import fr.dcproject.application.Configuration
import fr.dcproject.Env.CUCUMBER import fr.dcproject.application.Env.CUCUMBER
import fr.dcproject.module import fr.dcproject.application.module
import fr.dcproject.utils.LoggerDelegate import fr.dcproject.utils.LoggerDelegate
import fr.postgresjson.connexion.Connection import fr.postgresjson.connexion.Connection
import fr.postgresjson.connexion.Requester import fr.postgresjson.connexion.Requester
@@ -32,9 +32,9 @@ class CucumberTest : En, KoinTest {
init { init {
if (!unitialized) { if (!unitialized) {
Config.database = "test" Configuration.database = "test"
Config.username = "test" Configuration.username = "test"
Config.password = "test" Configuration.password = "test"
withTestApplication({ module(CUCUMBER) }) { withTestApplication({ module(CUCUMBER) }) {
migrations() migrations()
@@ -43,9 +43,9 @@ class CucumberTest : En, KoinTest {
} }
Before(-1) { _: Scenario -> Before(-1) { _: Scenario ->
Config.database = "test" Configuration.database = "test"
Config.username = "test" Configuration.username = "test"
Config.password = "test" Configuration.password = "test"
ktorContext.start() ktorContext.start()
//language=PostgreSQL //language=PostgreSQL
get<Connection>().sendQuery("start transaction;", listOf()) get<Connection>().sendQuery("start transaction;", listOf())
@@ -59,9 +59,9 @@ class CucumberTest : En, KoinTest {
} }
private fun migrations() { private fun migrations() {
Config.database = "test" Configuration.database = "test"
Config.username = "test" Configuration.username = "test"
Config.password = "test" Configuration.password = "test"
val migrations: Migrations = get() val migrations: Migrations = get()
migrations.forceAllDown() migrations.forceAllDown()
migrations.run() migrations.run()
@@ -85,7 +85,7 @@ class CucumberTest : En, KoinTest {
private fun getFixturesRequester(): Requester { private fun getFixturesRequester(): Requester {
return Requester.RequesterFactory( return Requester.RequesterFactory(
connection = get(), connection = get(),
queriesDirectory = Config.Sql.fixtureFiles queriesDirectory = Configuration.Sql.fixtureFiles
).createRequester() ).createRequester()
} }
} }

View File

@@ -3,9 +3,9 @@ package functional
import com.sendgrid.helpers.mail.Mail import com.sendgrid.helpers.mail.Mail
import com.sendgrid.helpers.mail.objects.Content import com.sendgrid.helpers.mail.objects.Content
import com.sendgrid.helpers.mail.objects.Email import com.sendgrid.helpers.mail.objects.Email
import fr.dcproject.Env import fr.dcproject.application.Env.TEST
import fr.dcproject.application.module
import fr.dcproject.messages.Mailer import fr.dcproject.messages.Mailer
import fr.dcproject.module
import io.ktor.locations.* import io.ktor.locations.*
import io.ktor.server.testing.* import io.ktor.server.testing.*
import io.ktor.util.* import io.ktor.util.*
@@ -25,7 +25,7 @@ class MailerTest : KoinTest, AutoCloseKoinTest() {
@Test @Test
@Tag("online, functional") @Tag("online, functional")
fun `can be send an email`() { fun `can be send an email`() {
withTestApplication({ module(Env.TEST) }) { withTestApplication({ module(TEST) }) {
get<Mailer>().sendEmail { get<Mailer>().sendEmail {
Mail( Mail(
Email("sso@dc-project.fr"), Email("sso@dc-project.fr"),

View File

@@ -1,10 +1,10 @@
package functional package functional
import fr.dcproject.Env import fr.dcproject.application.Env.TEST
import fr.dcproject.application.module
import fr.dcproject.component.article.ArticleRefVersioning import fr.dcproject.component.article.ArticleRefVersioning
import fr.dcproject.component.article.ArticleViewManager import fr.dcproject.component.article.ArticleViewManager
import fr.dcproject.component.citizen.CitizenRef import fr.dcproject.component.citizen.CitizenRef
import fr.dcproject.module
import io.ktor.locations.* import io.ktor.locations.*
import io.ktor.server.testing.* import io.ktor.server.testing.*
import io.ktor.util.* import io.ktor.util.*
@@ -26,7 +26,7 @@ class ViewTest {
val article = ArticleRefVersioning(id = UUID.randomUUID(), versionId = UUID.randomUUID()) val article = ArticleRefVersioning(id = UUID.randomUUID(), versionId = UUID.randomUUID())
val citizenRef = CitizenRef() val citizenRef = CitizenRef()
withTestApplication({ module(Env.TEST) }) { withTestApplication({ module(TEST) }) {
val viewManager: ArticleViewManager = application.get() val viewManager: ArticleViewManager = application.get()
/* Get view before */ /* Get view before */

View File

@@ -1,7 +1,7 @@
package steps package steps
import com.auth0.jwt.JWT import com.auth0.jwt.JWT
import fr.dcproject.JwtConfig import fr.dcproject.component.auth.jwt.JwtConfig
import fr.dcproject.component.citizen.CitizenRepository import fr.dcproject.component.citizen.CitizenRepository
import io.cucumber.java8.En import io.cucumber.java8.En
import io.ktor.http.* import io.ktor.http.*

View File

@@ -1,9 +1,9 @@
package unit.voter package unit.voter
import fr.dcproject.citizenOrNull
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.UserI import fr.dcproject.component.auth.UserI
import fr.dcproject.component.auth.citizenOrNull
import fr.dcproject.component.citizen.Citizen import fr.dcproject.component.citizen.Citizen
import fr.dcproject.component.citizen.CitizenBasic import fr.dcproject.component.citizen.CitizenBasic
import fr.dcproject.component.citizen.CitizenCart import fr.dcproject.component.citizen.CitizenCart
@@ -105,7 +105,7 @@ internal class FollowVoterTest {
) )
init { init {
mockkStatic("fr.dcproject.ApplicationContextKt") mockkStatic("fr.dcproject.component.auth.CitizenContextKt")
} }
@Test @Test

View File

@@ -3,12 +3,12 @@ package unit.voter
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.UserI import fr.dcproject.component.auth.UserI
import fr.dcproject.component.auth.user
import fr.dcproject.component.citizen.CitizenBasic import fr.dcproject.component.citizen.CitizenBasic
import fr.dcproject.component.citizen.CitizenCart import fr.dcproject.component.citizen.CitizenCart
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.CitizenI
import fr.dcproject.entity.OpinionChoice import fr.dcproject.entity.OpinionChoice
import fr.dcproject.security.voter.OpinionChoiceVoter import fr.dcproject.security.voter.OpinionChoiceVoter
import fr.dcproject.user
import fr.ktorVoter.ActionI import fr.ktorVoter.ActionI
import fr.ktorVoter.Vote import fr.ktorVoter.Vote
import fr.ktorVoter.can import fr.ktorVoter.can
@@ -64,7 +64,7 @@ internal class OpinionChoiceVoterTest {
) )
init { init {
mockkStatic("fr.dcproject.ApplicationContextKt") mockkStatic("fr.dcproject.component.auth.CitizenContextKt")
} }
@Test @Test

View File

@@ -3,13 +3,13 @@ package unit.voter
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.UserI import fr.dcproject.component.auth.UserI
import fr.dcproject.component.auth.user
import fr.dcproject.component.citizen.CitizenBasic import fr.dcproject.component.citizen.CitizenBasic
import fr.dcproject.component.citizen.CitizenCart import fr.dcproject.component.citizen.CitizenCart
import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.CitizenI
import fr.dcproject.entity.Opinion import fr.dcproject.entity.Opinion
import fr.dcproject.entity.OpinionChoice import fr.dcproject.entity.OpinionChoice
import fr.dcproject.security.voter.OpinionVoter import fr.dcproject.security.voter.OpinionVoter
import fr.dcproject.user
import fr.dcproject.voter.NoSubjectDefinedException import fr.dcproject.voter.NoSubjectDefinedException
import fr.ktorVoter.* import fr.ktorVoter.*
import io.ktor.application.* import io.ktor.application.*
@@ -79,7 +79,7 @@ internal class OpinionVoterTest {
) )
init { init {
mockkStatic("fr.dcproject.ApplicationContextKt") mockkStatic("fr.dcproject.component.auth.CitizenContextKt")
} }
@Test @Test

View File

@@ -1,10 +1,10 @@
package unit.voter package unit.voter
import fr.dcproject.citizenOrNull
import fr.dcproject.component.article.ArticleForView import fr.dcproject.component.article.ArticleForView
import fr.dcproject.component.article.ArticleRef import fr.dcproject.component.article.ArticleRef
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.auth.citizenOrNull
import fr.dcproject.component.citizen.Citizen import fr.dcproject.component.citizen.Citizen
import fr.dcproject.component.citizen.CitizenBasic import fr.dcproject.component.citizen.CitizenBasic
import fr.dcproject.component.citizen.CitizenCart import fr.dcproject.component.citizen.CitizenCart
@@ -116,7 +116,7 @@ internal class VoteVoterTest {
) )
init { init {
mockkStatic("fr.dcproject.ApplicationContextKt") mockkStatic("fr.dcproject.component.auth.CitizenContextKt")
} }
@Test @Test