126 lines
4.2 KiB
Kotlin
126 lines
4.2 KiB
Kotlin
package com.securityc4po.api.project
|
|
|
|
import com.github.tomakehurst.wiremock.common.Json
|
|
import com.securityc4po.api.BaseIntTest
|
|
import com.securityc4po.api.configuration.SIC_INNER_SHOULD_BE_STATIC
|
|
import com.securityc4po.api.configuration.URF_UNREAD_FIELD
|
|
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings
|
|
import io.netty.handler.ssl.SslContextBuilder
|
|
import org.junit.jupiter.api.BeforeEach
|
|
import org.junit.jupiter.api.Nested
|
|
import org.junit.jupiter.api.Test
|
|
import org.springframework.beans.factory.annotation.Autowired
|
|
import org.springframework.boot.web.server.LocalServerPort
|
|
import org.springframework.cloud.contract.wiremock.AutoConfigureWireMock
|
|
import org.springframework.data.mongodb.core.MongoTemplate
|
|
import org.springframework.data.mongodb.core.query.Query
|
|
import org.springframework.test.context.TestPropertySource
|
|
import org.springframework.test.web.reactive.server.WebTestClient
|
|
import org.springframework.util.ResourceUtils
|
|
import reactor.netty.http.client.HttpClient
|
|
import java.time.Duration
|
|
|
|
@AutoConfigureWireMock(port = 0)
|
|
/*@TestPropertySource(
|
|
properties = [
|
|
"keycloak.client.url=http://localhost:${'$'}{wiremock.server.port}"
|
|
]
|
|
)*/
|
|
@SuppressFBWarnings(
|
|
SIC_INNER_SHOULD_BE_STATIC,
|
|
URF_UNREAD_FIELD,
|
|
"Unread field will become used after database implementation"
|
|
)
|
|
class ProjectControllerIntTest : BaseIntTest() {
|
|
|
|
@LocalServerPort
|
|
private var port = 0
|
|
|
|
@Autowired
|
|
lateinit var mongoTemplate: MongoTemplate
|
|
|
|
private lateinit var webTestClient: WebTestClient
|
|
|
|
@BeforeEach
|
|
fun setupWebClient() {
|
|
webTestClient = WebTestClient.bindToServer()
|
|
.baseUrl("http://localhost:$port")
|
|
.responseTimeout(Duration.ofMillis(10000))
|
|
.build()
|
|
}
|
|
|
|
@BeforeEach
|
|
fun init() {
|
|
cleanUp()
|
|
configureAdminToken()
|
|
persistBasicTestScenario()
|
|
}
|
|
|
|
@Nested
|
|
inner class GetProjects {
|
|
@Test
|
|
fun `requesting projects successfully`() {
|
|
webTestClient.get().uri("/v1/projects")
|
|
.header("Authorization", "Bearer $tokenAdmin")
|
|
.exchange()
|
|
.expectStatus().isOk
|
|
.expectHeader().valueEquals("Application-Name", "security-c4po-api")
|
|
.expectBody().json(Json.write(getProjects()))
|
|
}
|
|
|
|
val projectOne = Project(
|
|
id = "4f6567a8-76fd-487b-8602-f82d0ca4d1f9",
|
|
client = "E Corp",
|
|
title = "Some Mock API (v1.0) Scanning",
|
|
createdAt = "2021-01-10T18:05:00Z",
|
|
tester = "Novatester",
|
|
createdBy = "f8aab31f-4925-4242-a6fa-f98135b4b032"
|
|
)
|
|
val projectTwo = Project(
|
|
id = "61360a47-796b-4b3f-abf9-c46c668596c5",
|
|
client = "Allsafe",
|
|
title = "CashMyData (iOS)",
|
|
createdAt = "2021-01-10T18:05:00Z",
|
|
tester = "Elliot",
|
|
createdBy = "f8aab31f-4925-4242-a6fa-f98135b4b032"
|
|
)
|
|
|
|
private fun getProjects() = listOf(
|
|
projectOne.toProjectResponseBody(),
|
|
projectTwo.toProjectResponseBody()
|
|
)
|
|
}
|
|
|
|
private fun cleanUp() {
|
|
mongoTemplate.findAllAndRemove(Query(), Project::class.java)
|
|
|
|
tokenAdmin = "n/a"
|
|
}
|
|
|
|
private fun persistBasicTestScenario() {
|
|
// setup test data
|
|
val projectOne = Project(
|
|
id = "4f6567a8-76fd-487b-8602-f82d0ca4d1f9",
|
|
client = "E Corp",
|
|
title = "Some Mock API (v1.0) Scanning",
|
|
createdAt = "2021-01-10T18:05:00Z",
|
|
tester = "Novatester",
|
|
createdBy = "f8aab31f-4925-4242-a6fa-f98135b4b032"
|
|
)
|
|
val projectTwo = Project(
|
|
id = "61360a47-796b-4b3f-abf9-c46c668596c5",
|
|
client = "Allsafe",
|
|
title = "CashMyData (iOS)",
|
|
createdAt = "2021-01-10T18:05:00Z",
|
|
tester = "Elliot",
|
|
createdBy = "f8aab31f-4925-4242-a6fa-f98135b4b032"
|
|
)
|
|
cleanUp()
|
|
mongoTemplate.save(ProjectEntity(projectOne))
|
|
mongoTemplate.save(ProjectEntity(projectTwo))
|
|
}
|
|
|
|
private fun configureAdminToken() {
|
|
tokenAdmin = getAccessToken("test_admin", "test", "c4po_local", "c4po_realm_local")
|
|
}
|
|
} |