mirror of https://github.com/usbharu/Hideout.git
test: apps apiのテストを追加
This commit is contained in:
parent
9c24c736ec
commit
fcb3d39881
|
@ -13,7 +13,7 @@ plugins {
|
||||||
kotlin("jvm") version "1.8.21"
|
kotlin("jvm") version "1.8.21"
|
||||||
id("org.graalvm.buildtools.native") version "0.9.21"
|
id("org.graalvm.buildtools.native") version "0.9.21"
|
||||||
id("io.gitlab.arturbosch.detekt") version "1.23.1"
|
id("io.gitlab.arturbosch.detekt") version "1.23.1"
|
||||||
id("org.springframework.boot") version "3.1.3"
|
id("org.springframework.boot") version "3.2.0"
|
||||||
kotlin("plugin.spring") version "1.8.21"
|
kotlin("plugin.spring") version "1.8.21"
|
||||||
id("org.openapi.generator") version "7.0.1"
|
id("org.openapi.generator") version "7.0.1"
|
||||||
id("org.jetbrains.kotlinx.kover") version "0.7.4"
|
id("org.jetbrains.kotlinx.kover") version "0.7.4"
|
||||||
|
@ -206,6 +206,8 @@ dependencies {
|
||||||
|
|
||||||
intTestImplementation("org.springframework.boot:spring-boot-starter-test")
|
intTestImplementation("org.springframework.boot:spring-boot-starter-test")
|
||||||
intTestImplementation("org.springframework.security:spring-security-test")
|
intTestImplementation("org.springframework.security:spring-security-test")
|
||||||
|
intTestImplementation("org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version")
|
||||||
|
intTestImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.6.4")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
ktor_version=2.3.0
|
ktor_version=2.3.0
|
||||||
kotlin_version=1.8.21
|
kotlin_version=1.9.21
|
||||||
logback_version=1.4.6
|
logback_version=1.4.6
|
||||||
kotlin.code.style=official
|
kotlin.code.style=official
|
||||||
exposed_version=0.44.0
|
exposed_version=0.44.0
|
||||||
|
|
|
@ -0,0 +1,88 @@
|
||||||
|
package mastodon.apps
|
||||||
|
|
||||||
|
import dev.usbharu.hideout.SpringApplication
|
||||||
|
import dev.usbharu.hideout.core.infrastructure.springframework.oauth2.RegisteredClient
|
||||||
|
import org.assertj.core.api.Assertions.assertThat
|
||||||
|
import org.jetbrains.exposed.sql.select
|
||||||
|
import org.junit.jupiter.api.BeforeEach
|
||||||
|
import org.junit.jupiter.api.Test
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired
|
||||||
|
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest
|
||||||
|
import org.springframework.http.MediaType
|
||||||
|
import org.springframework.security.test.context.support.WithAnonymousUser
|
||||||
|
import org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers
|
||||||
|
import org.springframework.test.web.servlet.MockMvc
|
||||||
|
import org.springframework.test.web.servlet.post
|
||||||
|
import org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder
|
||||||
|
import org.springframework.test.web.servlet.setup.MockMvcBuilders
|
||||||
|
import org.springframework.transaction.annotation.Transactional
|
||||||
|
import org.springframework.web.context.WebApplicationContext
|
||||||
|
|
||||||
|
@SpringBootTest(classes = [SpringApplication::class])
|
||||||
|
@AutoConfigureMockMvc
|
||||||
|
@Transactional
|
||||||
|
class AppTest {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private lateinit var context: WebApplicationContext
|
||||||
|
|
||||||
|
private lateinit var mockMvc: MockMvc
|
||||||
|
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
fun setUp() {
|
||||||
|
mockMvc = MockMvcBuilders.webAppContextSetup(context)
|
||||||
|
.apply<DefaultMockMvcBuilder>(SecurityMockMvcConfigurers.springSecurity())
|
||||||
|
.build()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@WithAnonymousUser
|
||||||
|
fun apiV1AppsPostにformで匿名でappを作成できる() {
|
||||||
|
mockMvc
|
||||||
|
.post("/api/v1/apps") {
|
||||||
|
contentType = MediaType.APPLICATION_FORM_URLENCODED
|
||||||
|
param("client_name", "test-client")
|
||||||
|
param("redirect_uris", "https://example.com")
|
||||||
|
param("scopes", "write read")
|
||||||
|
param("website", "https://example.com")
|
||||||
|
}
|
||||||
|
.asyncDispatch()
|
||||||
|
.andExpect { status { isOk() } }
|
||||||
|
|
||||||
|
|
||||||
|
val app = RegisteredClient
|
||||||
|
.select { RegisteredClient.clientName eq "test-client" }
|
||||||
|
.single()
|
||||||
|
|
||||||
|
assertThat(app[RegisteredClient.clientName]).isEqualTo("test-client")
|
||||||
|
assertThat(app[RegisteredClient.redirectUris]).isEqualTo("https://example.com")
|
||||||
|
assertThat(app[RegisteredClient.scopes]).isEqualTo("read,write")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@WithAnonymousUser
|
||||||
|
fun apiV1AppsPostにjsonで匿名でappを作成できる() {
|
||||||
|
mockMvc
|
||||||
|
.post("/api/v1/apps") {
|
||||||
|
contentType = MediaType.APPLICATION_JSON
|
||||||
|
content = """{
|
||||||
|
"client_name": "test-client-2",
|
||||||
|
"redirect_uris": "https://example.com",
|
||||||
|
"scopes": "write read",
|
||||||
|
"website": "https;//example.com"
|
||||||
|
}"""
|
||||||
|
}
|
||||||
|
.asyncDispatch()
|
||||||
|
.andExpect { status { isOk() } }
|
||||||
|
|
||||||
|
val app = RegisteredClient
|
||||||
|
.select { RegisteredClient.clientName eq "test-client-2" }
|
||||||
|
.single()
|
||||||
|
|
||||||
|
assertThat(app[RegisteredClient.clientName]).isEqualTo("test-client-2")
|
||||||
|
assertThat(app[RegisteredClient.redirectUris]).isEqualTo("https://example.com")
|
||||||
|
assertThat(app[RegisteredClient.scopes]).isEqualTo("read,write")
|
||||||
|
}
|
||||||
|
}
|
|
@ -18,10 +18,10 @@ hideout:
|
||||||
|
|
||||||
spring:
|
spring:
|
||||||
flyway:
|
flyway:
|
||||||
enabled: false
|
enabled: true
|
||||||
datasource:
|
datasource:
|
||||||
driver-class-name: org.h2.Driver
|
driver-class-name: org.h2.Driver
|
||||||
url: "jdbc:h2:mem:test;MODE=POSTGRESQL;DB_CLOSE_DELAY=-1"
|
url: "jdbc:h2:mem:test;MODE=POSTGRESQL;DB_CLOSE_DELAY=-1;CASE_INSENSITIVE_IDENTIFIERS=true;TRACE_LEVEL_FILE=4;"
|
||||||
username: ""
|
username: ""
|
||||||
password:
|
password:
|
||||||
data:
|
data:
|
||||||
|
@ -34,8 +34,8 @@ spring:
|
||||||
console:
|
console:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|
||||||
exposed:
|
# exposed:
|
||||||
generate-ddl: true
|
# generate-ddl: true
|
||||||
excluded-packages: dev.usbharu.hideout.core.infrastructure.kjobexposed
|
# excluded-packages: dev.usbharu.hideout.core.infrastructure.kjobexposed
|
||||||
server:
|
server:
|
||||||
port: 8080
|
port: 8080
|
||||||
|
|
Loading…
Reference in New Issue