diff --git a/.idea/runConfigurations/All_Tests.xml b/.idea/runConfigurations/All_Tests.xml
new file mode 100644
index 0000000..49576fe
--- /dev/null
+++ b/.idea/runConfigurations/All_Tests.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/Article_Tests.xml b/.idea/runConfigurations/Article_Tests.xml
index c3bf9d4..a5e337b 100644
--- a/.idea/runConfigurations/Article_Tests.xml
+++ b/.idea/runConfigurations/Article_Tests.xml
@@ -4,7 +4,7 @@
-
+
diff --git a/.idea/runConfigurations/Auth_Tests.xml b/.idea/runConfigurations/Auth_Tests.xml
index 3b6663b..7778a6e 100644
--- a/.idea/runConfigurations/Auth_Tests.xml
+++ b/.idea/runConfigurations/Auth_Tests.xml
@@ -4,7 +4,7 @@
-
+
diff --git a/.idea/runConfigurations/Citizen_Tests.xml b/.idea/runConfigurations/Citizen_Tests.xml
index fbe19ae..94e6a10 100644
--- a/.idea/runConfigurations/Citizen_Tests.xml
+++ b/.idea/runConfigurations/Citizen_Tests.xml
@@ -4,7 +4,7 @@
-
+
diff --git a/.idea/runConfigurations/Comment_Tests.xml b/.idea/runConfigurations/Comment_Tests.xml
index a682e5f..0f3f764 100644
--- a/.idea/runConfigurations/Comment_Tests.xml
+++ b/.idea/runConfigurations/Comment_Tests.xml
@@ -4,7 +4,7 @@
-
+
diff --git a/.idea/runConfigurations/Constitution_Tests.xml b/.idea/runConfigurations/Constitution_Tests.xml
index 89e53aa..bdfcb54 100644
--- a/.idea/runConfigurations/Constitution_Tests.xml
+++ b/.idea/runConfigurations/Constitution_Tests.xml
@@ -4,7 +4,7 @@
-
+
diff --git a/.idea/runConfigurations/Cucumber_Tests.xml b/.idea/runConfigurations/Cucumber_Tests.xml
index f04a1ea..899bb0d 100644
--- a/.idea/runConfigurations/Cucumber_Tests.xml
+++ b/.idea/runConfigurations/Cucumber_Tests.xml
@@ -1,10 +1,10 @@
-
+
-
+
diff --git a/.idea/runConfigurations/Cucumber_Tests__offline_.xml b/.idea/runConfigurations/Cucumber_Tests__offline_.xml
index ddc96b6..6416bda 100644
--- a/.idea/runConfigurations/Cucumber_Tests__offline_.xml
+++ b/.idea/runConfigurations/Cucumber_Tests__offline_.xml
@@ -4,7 +4,7 @@
-
+
diff --git a/.idea/runConfigurations/Cucumber_with_tag__now.xml b/.idea/runConfigurations/Cucumber_with_tag__now.xml
new file mode 100644
index 0000000..5575b37
--- /dev/null
+++ b/.idea/runConfigurations/Cucumber_with_tag__now.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/Follow_Tests.xml b/.idea/runConfigurations/Follow_Tests.xml
index 9e62c70..e5bfa6a 100644
--- a/.idea/runConfigurations/Follow_Tests.xml
+++ b/.idea/runConfigurations/Follow_Tests.xml
@@ -4,7 +4,7 @@
-
+
diff --git a/.idea/runConfigurations/Functional_Tests.xml b/.idea/runConfigurations/Functional_Tests.xml
new file mode 100644
index 0000000..511a555
--- /dev/null
+++ b/.idea/runConfigurations/Functional_Tests.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/Mark_as__error.xml b/.idea/runConfigurations/Mark_as__error.xml
index b04cef0..058ea46 100644
--- a/.idea/runConfigurations/Mark_as__error.xml
+++ b/.idea/runConfigurations/Mark_as__error.xml
@@ -4,7 +4,7 @@
-
+
diff --git a/.idea/runConfigurations/Opinion_Tests.xml b/.idea/runConfigurations/Opinion_Tests.xml
index 2930b4e..b794991 100644
--- a/.idea/runConfigurations/Opinion_Tests.xml
+++ b/.idea/runConfigurations/Opinion_Tests.xml
@@ -4,7 +4,7 @@
-
+
diff --git a/.idea/runConfigurations/Unit_Tests.xml b/.idea/runConfigurations/Unit_Tests.xml
index 300e5de..a8e76aa 100644
--- a/.idea/runConfigurations/Unit_Tests.xml
+++ b/.idea/runConfigurations/Unit_Tests.xml
@@ -5,7 +5,7 @@
-
+
-
+
diff --git a/.idea/runConfigurations/Workgroup_test.xml b/.idea/runConfigurations/Workgroup_test.xml
index f2ba85b..bccfa7a 100644
--- a/.idea/runConfigurations/Workgroup_test.xml
+++ b/.idea/runConfigurations/Workgroup_test.xml
@@ -10,7 +10,7 @@
-
+
diff --git a/build.gradle.kts b/build.gradle.kts
index de1ec8d..72f7046 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -68,6 +68,7 @@ val sourcesJar by tasks.creating(Jar::class) {
tasks.test {
useJUnit()
useJUnitPlatform()
+ systemProperty("junit.jupiter.execution.parallel.enabled", true)
// maxHeapSize = "1G"
}
diff --git a/src/test/kotlin/RunCucumberTest.kt b/src/test/kotlin/CucumberTest.kt
similarity index 90%
rename from src/test/kotlin/RunCucumberTest.kt
rename to src/test/kotlin/CucumberTest.kt
index 75578c5..c442e6c 100644
--- a/src/test/kotlin/RunCucumberTest.kt
+++ b/src/test/kotlin/CucumberTest.kt
@@ -1,4 +1,3 @@
-import feature.KtorServerContext
import fr.dcproject.Config
import fr.dcproject.Env.CUCUMBER
import fr.dcproject.module
@@ -10,23 +9,20 @@ import io.cucumber.java8.En
import io.cucumber.java8.Scenario
import io.cucumber.junit.Cucumber
import io.cucumber.junit.CucumberOptions
-import io.ktor.locations.KtorExperimentalLocationsAPI
-import io.ktor.server.testing.withTestApplication
-import io.ktor.util.KtorExperimentalAPI
+import io.ktor.server.testing.*
import kotlinx.coroutines.InternalCoroutinesApi
import org.junit.runner.RunWith
import org.koin.test.KoinTest
import org.koin.test.get
import org.slf4j.Logger
+import steps.KtorServerContext
var unitialized: Boolean = false
@InternalCoroutinesApi
-@KtorExperimentalAPI
-@KtorExperimentalLocationsAPI
@RunWith(Cucumber::class)
@CucumberOptions(plugin = ["pretty"], strict = true)
-class RunCucumberTest : En, KoinTest {
+class CucumberTest : En, KoinTest {
private val logger: Logger? by LoggerDelegate()
@InternalCoroutinesApi
diff --git a/src/test/kotlin/MailerTest.kt b/src/test/kotlin/functional/MailerTest.kt
similarity index 87%
rename from src/test/kotlin/MailerTest.kt
rename to src/test/kotlin/functional/MailerTest.kt
index 8118293..7aba8ea 100644
--- a/src/test/kotlin/MailerTest.kt
+++ b/src/test/kotlin/functional/MailerTest.kt
@@ -1,12 +1,14 @@
+package functional
+
import com.sendgrid.helpers.mail.Mail
import com.sendgrid.helpers.mail.objects.Content
import com.sendgrid.helpers.mail.objects.Email
import fr.dcproject.Env
import fr.dcproject.messages.Mailer
import fr.dcproject.module
-import io.ktor.locations.KtorExperimentalLocationsAPI
-import io.ktor.server.testing.withTestApplication
-import io.ktor.util.KtorExperimentalAPI
+import io.ktor.locations.*
+import io.ktor.server.testing.*
+import io.ktor.util.*
import kotlinx.coroutines.InternalCoroutinesApi
import org.junit.jupiter.api.Tag
import org.junit.jupiter.api.Test
@@ -21,7 +23,7 @@ import org.koin.test.get
class MailerTest : KoinTest, AutoCloseKoinTest() {
@InternalCoroutinesApi
@Test
- @Tag("online")
+ @Tag("online, functional")
fun `can be send an email`() {
withTestApplication({ module(Env.TEST) }) {
get().sendEmail {
diff --git a/src/test/kotlin/utils/ResourcesKtTest.kt b/src/test/kotlin/functional/ResourcesKtTest.kt
similarity index 89%
rename from src/test/kotlin/utils/ResourcesKtTest.kt
rename to src/test/kotlin/functional/ResourcesKtTest.kt
index 5e44dae..a857e03 100644
--- a/src/test/kotlin/utils/ResourcesKtTest.kt
+++ b/src/test/kotlin/functional/ResourcesKtTest.kt
@@ -1,5 +1,6 @@
-package fr.dcproject.utils
+package functional
+import fr.dcproject.utils.readResource
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
import kotlin.test.assertEquals
diff --git a/src/test/kotlin/ViewTest.kt b/src/test/kotlin/functional/ViewTest.kt
similarity index 96%
rename from src/test/kotlin/ViewTest.kt
rename to src/test/kotlin/functional/ViewTest.kt
index 88c2437..0095e56 100644
--- a/src/test/kotlin/ViewTest.kt
+++ b/src/test/kotlin/functional/ViewTest.kt
@@ -1,3 +1,5 @@
+package functional
+
import fr.dcproject.Env
import fr.dcproject.component.article.ArticleRefVersioning
import fr.dcproject.component.article.ArticleViewManager
@@ -7,6 +9,7 @@ import io.ktor.locations.*
import io.ktor.server.testing.*
import io.ktor.util.*
import org.amshove.kluent.`should be equal to`
+import org.junit.jupiter.api.Tag
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
import org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS
@@ -16,6 +19,7 @@ import java.util.*
@KtorExperimentalLocationsAPI
@KtorExperimentalAPI
@TestInstance(PER_CLASS)
+@Tag("functional")
class ViewTest {
@Test
fun `test View Article`() {
diff --git a/src/test/kotlin/feature/ArticleSteps.kt b/src/test/kotlin/steps/ArticleSteps.kt
similarity index 99%
rename from src/test/kotlin/feature/ArticleSteps.kt
rename to src/test/kotlin/steps/ArticleSteps.kt
index cb8b417..f6bfa80 100644
--- a/src/test/kotlin/feature/ArticleSteps.kt
+++ b/src/test/kotlin/steps/ArticleSteps.kt
@@ -1,4 +1,4 @@
-package feature
+package steps
import fr.dcproject.component.article.ArticleForUpdate
import fr.dcproject.component.article.ArticleForView
diff --git a/src/test/kotlin/feature/CitizenSteps.kt b/src/test/kotlin/steps/CitizenSteps.kt
similarity index 99%
rename from src/test/kotlin/feature/CitizenSteps.kt
rename to src/test/kotlin/steps/CitizenSteps.kt
index fbe62a6..7eda6a8 100644
--- a/src/test/kotlin/feature/CitizenSteps.kt
+++ b/src/test/kotlin/steps/CitizenSteps.kt
@@ -1,4 +1,4 @@
-package feature
+package steps
import fr.dcproject.component.citizen.Citizen
import fr.dcproject.component.citizen.CitizenI
diff --git a/src/test/kotlin/feature/ConstitutionSteps.kt b/src/test/kotlin/steps/ConstitutionSteps.kt
similarity index 99%
rename from src/test/kotlin/feature/ConstitutionSteps.kt
rename to src/test/kotlin/steps/ConstitutionSteps.kt
index 655573c..9bd7df4 100644
--- a/src/test/kotlin/feature/ConstitutionSteps.kt
+++ b/src/test/kotlin/steps/ConstitutionSteps.kt
@@ -1,4 +1,4 @@
-package feature
+package steps
import fr.dcproject.component.article.ArticleRef
import fr.dcproject.component.citizen.Citizen
diff --git a/src/test/kotlin/feature/FollowSteps.kt b/src/test/kotlin/steps/FollowSteps.kt
similarity index 98%
rename from src/test/kotlin/feature/FollowSteps.kt
rename to src/test/kotlin/steps/FollowSteps.kt
index eade2cf..269da75 100644
--- a/src/test/kotlin/feature/FollowSteps.kt
+++ b/src/test/kotlin/steps/FollowSteps.kt
@@ -1,4 +1,4 @@
-package feature
+package steps
import fr.dcproject.component.article.ArticleRef
import fr.dcproject.component.citizen.CitizenRepository
diff --git a/src/test/kotlin/feature/KtorServerAuthSteps.kt b/src/test/kotlin/steps/KtorServerAuthSteps.kt
similarity index 98%
rename from src/test/kotlin/feature/KtorServerAuthSteps.kt
rename to src/test/kotlin/steps/KtorServerAuthSteps.kt
index a02d422..b0613a6 100644
--- a/src/test/kotlin/feature/KtorServerAuthSteps.kt
+++ b/src/test/kotlin/steps/KtorServerAuthSteps.kt
@@ -1,4 +1,4 @@
-package feature
+package steps
import com.auth0.jwt.JWT
import fr.dcproject.JwtConfig
diff --git a/src/test/kotlin/feature/KtorServerContext.kt b/src/test/kotlin/steps/KtorServerContext.kt
similarity index 83%
rename from src/test/kotlin/feature/KtorServerContext.kt
rename to src/test/kotlin/steps/KtorServerContext.kt
index 49751cf..296ff00 100644
--- a/src/test/kotlin/feature/KtorServerContext.kt
+++ b/src/test/kotlin/steps/KtorServerContext.kt
@@ -1,10 +1,7 @@
-package feature
+package steps
-import io.ktor.application.Application
-import io.ktor.server.testing.TestApplicationCall
-import io.ktor.server.testing.TestApplicationEngine
-import io.ktor.server.testing.TestApplicationRequest
-import io.ktor.server.testing.createTestEnvironment
+import io.ktor.application.*
+import io.ktor.server.testing.*
import java.util.concurrent.TimeUnit
import kotlin.test.fail
diff --git a/src/test/kotlin/feature/KtorServerRequestSteps.kt b/src/test/kotlin/steps/KtorServerRequestSteps.kt
similarity index 99%
rename from src/test/kotlin/feature/KtorServerRequestSteps.kt
rename to src/test/kotlin/steps/KtorServerRequestSteps.kt
index 36dfe46..dedb138 100644
--- a/src/test/kotlin/feature/KtorServerRequestSteps.kt
+++ b/src/test/kotlin/steps/KtorServerRequestSteps.kt
@@ -1,4 +1,4 @@
-package feature
+package steps
import com.jayway.jsonpath.JsonPath
import io.cucumber.datatable.DataTable
diff --git a/src/test/kotlin/feature/KtorServerRestSteps.kt b/src/test/kotlin/steps/KtorServerRestSteps.kt
similarity index 99%
rename from src/test/kotlin/feature/KtorServerRestSteps.kt
rename to src/test/kotlin/steps/KtorServerRestSteps.kt
index 89bb931..a2b2ee6 100644
--- a/src/test/kotlin/feature/KtorServerRestSteps.kt
+++ b/src/test/kotlin/steps/KtorServerRestSteps.kt
@@ -1,4 +1,4 @@
-package feature
+package steps
import io.cucumber.datatable.DataTable
import io.cucumber.java8.En
diff --git a/src/test/kotlin/feature/OpinionSteps.kt b/src/test/kotlin/steps/OpinionSteps.kt
similarity index 99%
rename from src/test/kotlin/feature/OpinionSteps.kt
rename to src/test/kotlin/steps/OpinionSteps.kt
index 1a22833..e219b3b 100644
--- a/src/test/kotlin/feature/OpinionSteps.kt
+++ b/src/test/kotlin/steps/OpinionSteps.kt
@@ -1,4 +1,4 @@
-package feature
+package steps
import fr.dcproject.component.article.ArticleRef
import fr.dcproject.component.article.ArticleRepository
diff --git a/src/test/kotlin/feature/VoteSteps.kt b/src/test/kotlin/steps/VoteSteps.kt
similarity index 98%
rename from src/test/kotlin/feature/VoteSteps.kt
rename to src/test/kotlin/steps/VoteSteps.kt
index c93ac2c..74051c8 100644
--- a/src/test/kotlin/feature/VoteSteps.kt
+++ b/src/test/kotlin/steps/VoteSteps.kt
@@ -1,4 +1,4 @@
-package feature
+package steps
import fr.dcproject.component.article.ArticleRepository
import fr.dcproject.component.citizen.CitizenRepository
diff --git a/src/test/kotlin/feature/WorkgroupSteps.kt b/src/test/kotlin/steps/WorkgroupSteps.kt
similarity index 99%
rename from src/test/kotlin/feature/WorkgroupSteps.kt
rename to src/test/kotlin/steps/WorkgroupSteps.kt
index b87282c..d91207b 100644
--- a/src/test/kotlin/feature/WorkgroupSteps.kt
+++ b/src/test/kotlin/steps/WorkgroupSteps.kt
@@ -1,4 +1,4 @@
-package feature
+package steps
import fr.dcproject.component.citizen.Citizen
import fr.dcproject.component.citizen.CitizenI
diff --git a/src/test/kotlin/security/voter/ArticleVoterTest.kt b/src/test/kotlin/unit/voter/ArticleVoterTest.kt
similarity index 96%
rename from src/test/kotlin/security/voter/ArticleVoterTest.kt
rename to src/test/kotlin/unit/voter/ArticleVoterTest.kt
index b876f06..1ed1e8f 100644
--- a/src/test/kotlin/security/voter/ArticleVoterTest.kt
+++ b/src/test/kotlin/unit/voter/ArticleVoterTest.kt
@@ -1,4 +1,4 @@
-package fr.dcproject.security.voter
+package unit.voter
import fr.dcproject.component.article.ArticleForView
import fr.dcproject.component.article.ArticleVoter
@@ -17,12 +17,15 @@ 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.parallel.Execution
+import org.junit.jupiter.api.parallel.ExecutionMode.CONCURRENT
import java.util.*
import fr.dcproject.component.article.ArticleRepository as ArticleRepo
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
+@Execution(CONCURRENT)
@Tag("voter")
-class ArticleVoterTest {
+internal class ArticleVoterTest {
private val tesla = CitizenCart(
id = UUID.fromString("e6efc288-4283-4729-a268-6debb18de1a0"),
user = User(
diff --git a/src/test/kotlin/security/voter/CitizenVoterTest.kt b/src/test/kotlin/unit/voter/CitizenVoterTest.kt
similarity index 93%
rename from src/test/kotlin/security/voter/CitizenVoterTest.kt
rename to src/test/kotlin/unit/voter/CitizenVoterTest.kt
index 990f24e..e20837d 100644
--- a/src/test/kotlin/security/voter/CitizenVoterTest.kt
+++ b/src/test/kotlin/unit/voter/CitizenVoterTest.kt
@@ -1,4 +1,4 @@
-package fr.dcproject.security.voter
+package unit.voter
import fr.dcproject.component.citizen.CitizenBasic
import fr.dcproject.component.citizen.CitizenI
@@ -7,18 +7,19 @@ import fr.dcproject.entity.User
import fr.dcproject.entity.UserI
import fr.dcproject.voter.Vote.DENIED
import fr.dcproject.voter.Vote.GRANTED
-import io.ktor.locations.*
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.parallel.Execution
+import org.junit.jupiter.api.parallel.ExecutionMode.CONCURRENT
-@KtorExperimentalLocationsAPI
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
+@Execution(CONCURRENT)
@Tag("voter")
-class CitizenVoterTest {
+internal class CitizenVoterTest {
private val tesla = CitizenBasic(
user = User(
username = "nicolas-tesla",
diff --git a/src/test/kotlin/security/voter/CommentVoterTest.kt b/src/test/kotlin/unit/voter/CommentVoterTest.kt
similarity index 96%
rename from src/test/kotlin/security/voter/CommentVoterTest.kt
rename to src/test/kotlin/unit/voter/CommentVoterTest.kt
index d04da12..494bd81 100644
--- a/src/test/kotlin/security/voter/CommentVoterTest.kt
+++ b/src/test/kotlin/unit/voter/CommentVoterTest.kt
@@ -1,4 +1,4 @@
-package fr.dcproject.security.voter
+package unit.voter
import fr.dcproject.component.article.ArticleForView
import fr.dcproject.component.article.ArticleRef
@@ -13,7 +13,6 @@ import fr.dcproject.entity.UserI
import fr.dcproject.voter.Vote.DENIED
import fr.dcproject.voter.Vote.GRANTED
import fr.postgresjson.connexion.Paginated
-import io.ktor.locations.*
import io.mockk.every
import io.mockk.mockk
import io.mockk.mockkStatic
@@ -22,11 +21,13 @@ 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.parallel.Execution
+import org.junit.jupiter.api.parallel.ExecutionMode.CONCURRENT
import java.util.*
import fr.dcproject.component.article.ArticleRepository as ArticleRepo
-@KtorExperimentalLocationsAPI
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
+@Execution(CONCURRENT)
@Tag("voter")
internal class CommentVoterTest {
private val tesla = Citizen(
diff --git a/src/test/kotlin/security/voter/FollowVoterTest.kt b/src/test/kotlin/unit/voter/FollowVoterTest.kt
similarity index 96%
rename from src/test/kotlin/security/voter/FollowVoterTest.kt
rename to src/test/kotlin/unit/voter/FollowVoterTest.kt
index 836da2a..fedbcec 100644
--- a/src/test/kotlin/security/voter/FollowVoterTest.kt
+++ b/src/test/kotlin/unit/voter/FollowVoterTest.kt
@@ -1,4 +1,4 @@
-package fr.dcproject.security.voter
+package unit.voter
import fr.dcproject.citizenOrNull
import fr.dcproject.component.article.ArticleForView
@@ -9,13 +9,13 @@ import fr.dcproject.component.citizen.CitizenI
import fr.dcproject.entity.Follow
import fr.dcproject.entity.User
import fr.dcproject.entity.UserI
+import fr.dcproject.security.voter.FollowVoter
import fr.dcproject.voter.NoSubjectDefinedException
import fr.ktorVoter.ActionI
import fr.ktorVoter.Vote
import fr.ktorVoter.can
import fr.ktorVoter.canAll
import io.ktor.application.*
-import io.ktor.locations.*
import io.mockk.every
import io.mockk.mockk
import io.mockk.mockkStatic
@@ -25,10 +25,12 @@ import org.junit.jupiter.api.Tag
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
import org.junit.jupiter.api.assertThrows
+import org.junit.jupiter.api.parallel.Execution
+import org.junit.jupiter.api.parallel.ExecutionMode.CONCURRENT
import java.util.*
-@KtorExperimentalLocationsAPI
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
+@Execution(CONCURRENT)
@Tag("voter")
internal class FollowVoterTest {
private val tesla = CitizenBasic(
diff --git a/src/test/kotlin/security/voter/OpinionChoiceVoterTest.kt b/src/test/kotlin/unit/voter/OpinionChoiceVoterTest.kt
similarity index 93%
rename from src/test/kotlin/security/voter/OpinionChoiceVoterTest.kt
rename to src/test/kotlin/unit/voter/OpinionChoiceVoterTest.kt
index 3f5fad6..9dfe863 100644
--- a/src/test/kotlin/security/voter/OpinionChoiceVoterTest.kt
+++ b/src/test/kotlin/unit/voter/OpinionChoiceVoterTest.kt
@@ -1,4 +1,4 @@
-package fr.dcproject.security.voter
+package unit.voter
import fr.dcproject.component.article.ArticleForView
import fr.dcproject.component.citizen.CitizenBasic
@@ -7,13 +7,13 @@ import fr.dcproject.component.citizen.CitizenI
import fr.dcproject.entity.OpinionChoice
import fr.dcproject.entity.User
import fr.dcproject.entity.UserI
+import fr.dcproject.security.voter.OpinionChoiceVoter
import fr.dcproject.user
import fr.ktorVoter.ActionI
import fr.ktorVoter.Vote
import fr.ktorVoter.can
import fr.ktorVoter.canAll
import io.ktor.application.*
-import io.ktor.locations.*
import io.mockk.every
import io.mockk.mockk
import io.mockk.mockkStatic
@@ -22,10 +22,12 @@ 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.parallel.Execution
+import org.junit.jupiter.api.parallel.ExecutionMode.CONCURRENT
import java.util.*
-@KtorExperimentalLocationsAPI
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
+@Execution(CONCURRENT)
@Tag("voter")
internal class OpinionChoiceVoterTest {
private val tesla = CitizenBasic(
diff --git a/src/test/kotlin/security/voter/OpinionVoterTest.kt b/src/test/kotlin/unit/voter/OpinionVoterTest.kt
similarity index 96%
rename from src/test/kotlin/security/voter/OpinionVoterTest.kt
rename to src/test/kotlin/unit/voter/OpinionVoterTest.kt
index 42494eb..461a96a 100644
--- a/src/test/kotlin/security/voter/OpinionVoterTest.kt
+++ b/src/test/kotlin/unit/voter/OpinionVoterTest.kt
@@ -1,4 +1,4 @@
-package fr.dcproject.security.voter
+package unit.voter
import fr.dcproject.component.article.ArticleForView
import fr.dcproject.component.citizen.CitizenBasic
@@ -8,11 +8,11 @@ import fr.dcproject.entity.Opinion
import fr.dcproject.entity.OpinionChoice
import fr.dcproject.entity.User
import fr.dcproject.entity.UserI
+import fr.dcproject.security.voter.OpinionVoter
import fr.dcproject.user
import fr.dcproject.voter.NoSubjectDefinedException
import fr.ktorVoter.*
import io.ktor.application.*
-import io.ktor.locations.*
import io.mockk.every
import io.mockk.mockk
import io.mockk.mockkStatic
@@ -22,10 +22,12 @@ import org.junit.jupiter.api.Tag
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
import org.junit.jupiter.api.assertThrows
+import org.junit.jupiter.api.parallel.Execution
+import org.junit.jupiter.api.parallel.ExecutionMode.CONCURRENT
import java.util.*
-@KtorExperimentalLocationsAPI
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
+@Execution(CONCURRENT)
@Tag("voter")
internal class OpinionVoterTest {
private val tesla = CitizenBasic(
diff --git a/src/test/kotlin/security/voter/VoteVoterTest.kt b/src/test/kotlin/unit/voter/VoteVoterTest.kt
similarity index 97%
rename from src/test/kotlin/security/voter/VoteVoterTest.kt
rename to src/test/kotlin/unit/voter/VoteVoterTest.kt
index e91f632..43b70e3 100644
--- a/src/test/kotlin/security/voter/VoteVoterTest.kt
+++ b/src/test/kotlin/unit/voter/VoteVoterTest.kt
@@ -1,4 +1,4 @@
-package fr.dcproject.security.voter
+package unit.voter
import fr.dcproject.citizenOrNull
import fr.dcproject.component.article.ArticleForView
@@ -10,13 +10,13 @@ import fr.dcproject.component.citizen.CitizenI
import fr.dcproject.entity.User
import fr.dcproject.entity.UserI
import fr.dcproject.entity.VoteForUpdate
+import fr.dcproject.security.voter.VoteVoter
import fr.dcproject.voter.NoSubjectDefinedException
import fr.ktorVoter.ActionI
import fr.ktorVoter.Vote
import fr.ktorVoter.can
import fr.ktorVoter.canAll
import io.ktor.application.*
-import io.ktor.locations.*
import io.mockk.every
import io.mockk.mockk
import io.mockk.mockkStatic
@@ -26,11 +26,13 @@ import org.junit.jupiter.api.Tag
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
import org.junit.jupiter.api.assertThrows
+import org.junit.jupiter.api.parallel.Execution
+import org.junit.jupiter.api.parallel.ExecutionMode.CONCURRENT
import java.util.*
import fr.dcproject.entity.Vote as VoteEntity
-@KtorExperimentalLocationsAPI
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
+@Execution(CONCURRENT)
@Tag("voter")
internal class VoteVoterTest {
private val tesla = Citizen(
diff --git a/src/test/kotlin/security/voter/WorkgroupVoterTest.kt b/src/test/kotlin/unit/voter/WorkgroupVoterTest.kt
similarity index 97%
rename from src/test/kotlin/security/voter/WorkgroupVoterTest.kt
rename to src/test/kotlin/unit/voter/WorkgroupVoterTest.kt
index ec32ad3..e6de395 100644
--- a/src/test/kotlin/security/voter/WorkgroupVoterTest.kt
+++ b/src/test/kotlin/unit/voter/WorkgroupVoterTest.kt
@@ -1,4 +1,4 @@
-package fr.dcproject.security.voter
+package unit.voter
import fr.dcproject.component.article.ArticleForView
import fr.dcproject.component.citizen.CitizenBasic
@@ -8,6 +8,7 @@ import fr.dcproject.entity.User
import fr.dcproject.entity.UserI
import fr.dcproject.entity.WorkgroupRef
import fr.dcproject.entity.WorkgroupWithMembersI
+import fr.dcproject.security.voter.WorkgroupVoter
import fr.dcproject.user
import fr.dcproject.voter.NoSubjectDefinedException
import fr.ktorVoter.ActionI
@@ -15,18 +16,19 @@ import fr.ktorVoter.Vote
import fr.ktorVoter.VoterException
import fr.ktorVoter.can
import io.ktor.application.*
-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.*
+import org.junit.jupiter.api.parallel.Execution
+import org.junit.jupiter.api.parallel.ExecutionMode.CONCURRENT
import java.util.*
import fr.dcproject.entity.Workgroup as WorkgroupEntity
-@KtorExperimentalLocationsAPI
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
+@Execution(CONCURRENT)
@Tag("voter")
internal class WorkgroupVoterTest {
private val tesla = CitizenBasic(