Files
dc-project/src/test/kotlin/integration/Follow constitutions routes.kt

89 lines
3.9 KiB
Kotlin

package integration
import integration.steps.then.`And the response should be null`
import integration.steps.then.`And the response should contain`
import integration.steps.then.`And the response should not be null`
import integration.steps.then.`Then the response should be`
import integration.steps.`when`.`When I send a DELETE request`
import integration.steps.`when`.`When I send a GET request`
import integration.steps.`when`.`When I send a POST request`
import integration.steps.then.and
import integration.steps.given.`And follow constitution`
import integration.steps.given.`Given I have citizen`
import integration.steps.given.`Given I have constitution`
import integration.steps.given.`authenticated as`
import integration.steps.given.`with no content`
import io.ktor.http.HttpStatusCode.Companion.Created
import io.ktor.http.HttpStatusCode.Companion.NoContent
import io.ktor.http.HttpStatusCode.Companion.OK
import org.junit.jupiter.api.Tag
import org.junit.jupiter.api.Tags
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestInstance
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@Tags(Tag("integration"), Tag("constitution"), Tag("follow"))
class `Follow constitutions routes` : BaseTest() {
@Test
fun `I can follow constitution`() {
withIntegrationApplication {
`Given I have citizen`("Dmitri", "Mendeleïev")
`Given I have constitution`(id = "f6553f5e-0cf5-476a-b84e-15e52ec9d8f9")
`When I send a POST request`("/constitutions/f6553f5e-0cf5-476a-b84e-15e52ec9d8f9/follows") {
`authenticated as`("Dmitri", "Mendeleïev")
`with no content`()
} `Then the response should be` Created
}
}
@Test
fun `I can get follow constitution`() {
withIntegrationApplication {
`Given I have constitution`(id = "7f642078-8e74-47fc-9712-0c37531674a0")
`Given I have citizen`("André-Marie", "Ampère", id = "877b45b0-302d-487d-8944-6d03ccdbd0f8") {
`And follow constitution`("7f642078-8e74-47fc-9712-0c37531674a0")
}
`When I send a GET request`("/citizens/877b45b0-302d-487d-8944-6d03ccdbd0f8/follows/constitutions") {
`authenticated as`("André-Marie", "Ampère")
} `Then the response should be` OK and {
`And the response should not be null`()
`And the response should contain`("$.current_page", 1)
`And the response should contain`("$.limit", 50)
}
}
}
@Test
fun `I can unfollow constitution`() {
withIntegrationApplication {
`Given I have constitution`(id = "4ea03776-a28c-4202-9b90-db1b942946c1")
`Given I have citizen`("Claude", "Ptolémée") {
`And follow constitution`("4ea03776-a28c-4202-9b90-db1b942946c1")
}
`When I send a DELETE request`("/constitutions/4ea03776-a28c-4202-9b90-db1b942946c1/follows") {
`authenticated as`("Claude", "Ptolémée")
`with no content`()
} `Then the response should be` NoContent and {
`And the response should be null`()
}
}
}
@Test
fun `I can know if I follow an constitution`() {
withIntegrationApplication {
`Given I have constitution`(id = "5141e781-ebcd-4de0-8c2b-7d23d4cd58b5")
`Given I have citizen`("Denis", "Papin") {
`And follow constitution`("5141e781-ebcd-4de0-8c2b-7d23d4cd58b5")
}
`When I send a GET request`("/constitutions/5141e781-ebcd-4de0-8c2b-7d23d4cd58b5/follows") {
`authenticated as`("Denis", "Papin")
`with no content`()
} `Then the response should be` OK and {
`And the response should not be null`()
`And the response should contain`("$.target.id", "5141e781-ebcd-4de0-8c2b-7d23d4cd58b5")
}
}
}
}