update AccountController with balance

This commit is contained in:
2025-09-11 14:26:40 +02:00
parent 7ce1b15bca
commit c96604ae79
4 changed files with 109 additions and 47 deletions

View File

@@ -8,12 +8,13 @@ import ltd.lulz.model.Account
import ltd.lulz.model.AccountEntity
import ltd.lulz.service.AccountService
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Nested
import org.junit.jupiter.api.Test
import org.springframework.http.MediaType.APPLICATION_JSON
import org.springframework.test.web.reactive.server.WebTestClient
import reactor.core.publisher.Mono
@Suppress("MayBeConstant")
@Suppress("MayBeConstant", "ReactiveStreamsUnusedPublisher")
class AccountControllerTest {
companion object {
@@ -30,59 +31,101 @@ class AccountControllerTest {
webTestClient = WebTestClient.bindToController(AccountController(accountService)).build()
}
@Test
fun `create account success`() {
// given
val request = Account.Request(name, amount)
@Nested
inner class CreateAccount {
every { accountService.create(any()) } returns Mono.just(
AccountEntity(id = uuid, name = name, amount = amount),
)
@Test
fun `create account success`() {
// given
val request = Account.Request(name, amount)
// when
val result = webTestClient.post()
.uri("/account")
.contentType(APPLICATION_JSON)
.bodyValue(request)
.exchange()
every { accountService.create(any()) } returns Mono.just(
AccountEntity(id = uuid, name = name, amount = amount),
)
// then
result.expectStatus().isCreated
.expectBody()
.jsonPath("$.id").isEqualTo(uuid.toString())
.jsonPath("$.name").isEqualTo(name)
.jsonPath("$.amount").isEqualTo(amount.toString())
// when
val result = webTestClient.post()
.uri("/account")
.contentType(APPLICATION_JSON)
.bodyValue(request)
.exchange()
// then
result.expectStatus().isCreated
.expectBody()
.jsonPath("$.id").isEqualTo(uuid.toString())
.jsonPath("$.name").isEqualTo(name)
.jsonPath("$.amount").isEqualTo(amount.toString())
}
@Test
fun `create account fail no name`() {
// given
val request = Account.Request("", amount)
// when
val result = webTestClient.post()
.uri("/account")
.contentType(APPLICATION_JSON)
.bodyValue(request)
.exchange()
// then
result.expectStatus().isBadRequest
}
@Test
fun `create account fail zero or less amount`() {
// given
val request = Account.Request("name", BigDecimal.valueOf(0))
// when
val result = webTestClient.post()
.uri("/account")
.contentType(APPLICATION_JSON)
.bodyValue(request)
.exchange()
// then
result.expectStatus().isBadRequest
}
}
@Test
fun `create account fail no name`() {
// given
val request = Account.Request("", amount)
@Nested
inner class AccountBalance {
// when
val result = webTestClient.post()
.uri("/account")
.contentType(APPLICATION_JSON)
.bodyValue(request)
.exchange()
@Test
fun `account balance success`() {
// given
every { accountService.getById(any()) } returns Mono.just(
AccountEntity(id = uuid, name = name, amount = amount),
)
// then
result.expectStatus().isBadRequest
}
// when
val result = webTestClient.get()
.uri("/balance/account-$uuid")
.exchange()
@Test
fun `create account fail zero or less amount`() {
// given
val request = Account.Request("name", BigDecimal.valueOf(0))
// then
result.expectStatus().isOk
.expectBody()
.jsonPath("$.id").isEqualTo(uuid.toString())
.jsonPath("$.name").isEqualTo(name)
.jsonPath("$.amount").isEqualTo(amount.toString())
}
// when
val result = webTestClient.post()
.uri("/account")
.contentType(APPLICATION_JSON)
.bodyValue(request)
.exchange()
@Test
fun `account balance fail`() {
// given
every { accountService.getById(any()) } returns Mono.empty()
// then
result.expectStatus().isBadRequest
// when
val result = webTestClient.get()
.uri("/balance/account-$uuid")
.exchange()
// then
result.expectStatus().isNotFound
}
}
}