Files
dc-project/src/test/kotlin/feature/KtorServerAuthSteps.kt

126 lines
4.6 KiB
Kotlin

package feature
import com.auth0.jwt.JWT
import fr.dcproject.JwtConfig
import fr.dcproject.entity.Citizen
import fr.dcproject.entity.CitizenI
import fr.dcproject.entity.User
import fr.postgresjson.connexion.Requester
import io.cucumber.datatable.DataTable
import io.cucumber.java8.En
import io.ktor.http.HttpHeaders
import org.joda.time.DateTime
import org.koin.test.KoinTest
import org.koin.test.get
import org.koin.test.inject
import java.util.*
import java.util.concurrent.CompletionException
import fr.dcproject.repository.Citizen as CitizenRepository
class KtorServerAuthSteps : En, KoinTest {
private val requester: Requester by inject()
init {
When("I have citizen:") { body: DataTable ->
val data = body.asMap<String, String>(String::class.java, String::class.java)
val username = (data["firstName"] + "-" + data["lastName"]).toLowerCase()
val user = User(
username = username,
plainPassword = "azerty"
)
val citizen = Citizen(
id = UUID.fromString(data["id"]),
name = CitizenI.Name(data["firstName"]!!, data["lastName"]!!),
email = data["email"] ?: "$username@dc-project.com",
birthday = DateTime.now(),
user = user
)
get<CitizenRepository>().insertWithUser(citizen)
}
Given("I am authenticated as {word} {word} with id {string}") { firstName: String, lastName: String, id: String ->
val jwtAsString: String = JWT.create()
.withIssuer("dc-project.fr")
.withClaim("id", id)
.sign(JwtConfig.algorithm)
val user = User(
id = UUID.fromString(id),
username = "$firstName-$lastName".toLowerCase(),
plainPassword = "azerty"
)
val citizen = Citizen(
id = UUID.fromString(id),
name = CitizenI.Name(firstName, lastName),
email = ("$firstName-$lastName".toLowerCase()) + "@dc-project.fr",
birthday = DateTime.now(),
user = user
)
try {
get<CitizenRepository>().insertWithUser(citizen)
} catch (e: CompletionException) {
// Nothing
}
KtorServerContext.defaultServer.addPreRequestSetup {
addHeader(HttpHeaders.Authorization, "Bearer $jwtAsString")
}
}
Given("I have citizen {word} {word}") { firstName: String, lastName: String ->
val id: UUID = UUID.randomUUID()
val user = User(
id = id,
username = "$firstName-$lastName".toLowerCase(),
plainPassword = "azerty"
)
val citizen = Citizen(
id = id,
name = CitizenI.Name(firstName, lastName),
email = ("$firstName-$lastName".toLowerCase()) + "@dc-project.fr",
birthday = DateTime.now(),
user = user
)
get<CitizenRepository>().insertWithUser(citizen)
}
Given("I am authenticated as {word} {word}") { firstName: String, lastName: String ->
val username = "$firstName-$lastName".toLowerCase()
val citizen = get<CitizenRepository>().findByUsername(username) ?: error("Cititzen not exist with username $username")
val jwtAsString: String = JWT.create()
.withIssuer("dc-project.fr")
.withClaim("id", citizen.user.id.toString())
.sign(JwtConfig.algorithm)
KtorServerContext.defaultServer.addPreRequestSetup {
addHeader(HttpHeaders.Authorization, "Bearer $jwtAsString")
}
}
Given("I have citizen {word} {word} with id {string}") { firstName: String, lastName: String, id: String ->
val user = User(
id = UUID.randomUUID(),
username = "$firstName-$lastName".toLowerCase(),
plainPassword = "azerty"
)
val citizen = Citizen(
id = UUID.fromString(id),
name = CitizenI.Name(firstName, lastName),
email = "$firstName-$lastName".toLowerCase() + "@gmail.com",
birthday = DateTime.now(),
user = user,
followAnonymous = false,
voteAnonymous = false
)
try {
get<CitizenRepository>().insertWithUser(citizen)
} catch (e: CompletionException) {
// Nothing
}
}
}
}