Избегание дублирования сценариев @sql @sqlJAVA

Программисты JAVA общаются здесь
Anonymous
Избегание дублирования сценариев @sql @sql

Сообщение Anonymous »

Могу ли я каким-то образом избежать дублирования кода очистки до каждого метода тестирования интеграции? Моя проблема связана с самой аннотацией, а не с длиной заявления.package com.example.pixel_money_transfer_api.controller;

import com.example.pixel_money_transfer_api.data.dto.request.TransferRequestDto;
import com.fasterxml.jackson.databind.ObjectMapper;
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.boot.testcontainers.service.connection.ServiceConnection;
import org.springframework.http.MediaType;
import org.springframework.test.context.jdbc.Sql;
import org.springframework.test.web.servlet.MockMvc;
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;

import java.math.BigDecimal;

import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.jwt;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@Testcontainers
@AutoConfigureMockMvc
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class TransferControllerIntegrationTest {

@Container
@ServiceConnection
static PostgreSQLContainer postgres = new PostgreSQLContainer("postgres:16.0");
@Autowired
MockMvc mockMvc;
@Autowired
ObjectMapper objectMapper;

@Test
@Sql(statements = "TRUNCATE \"user\" CASCADE;")
@Sql(statements = """
INSERT INTO "user" (id, name) VALUES (15, 'Sasha');
INSERT INTO account (id, user_id, balance) VALUES (1, 15, 5);
""")
void performTransfer_ifUserHasInsufficientBalance_returns422() throws Exception {
TransferRequestDto transferDto = new TransferRequestDto();
transferDto.setAmount(BigDecimal.valueOf(10L));

mockMvc.perform(patch("/api/money-transfer")
.with(jwt().jwt(jwt -> jwt
.claim("userid", 15L)))
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(transferDto)))
.andExpect(status().isUnprocessableEntity());
}

@Test
@Sql(statements = "TRUNCATE \"user\" CASCADE;")
@Sql(statements = """
INSERT INTO "user" (id, name) VALUES (15, 'Sasha');
INSERT INTO "user" (id, name) VALUES (16, 'Alex');
INSERT INTO account (id, user_id, balance) VALUES (1, 15, 10);
""")
void performTransfer_ifUserHasSufficientBalance_butRecipientHasNoAccount_returns422() throws Exception {
TransferRequestDto transferDto = new TransferRequestDto();
transferDto.setRecipientId(16L);
transferDto.setAmount(BigDecimal.valueOf(10L));

mockMvc.perform(patch("/api/money-transfer")
.with(jwt().jwt(jwt -> jwt
.claim("userid", 15L)))
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(transferDto)))
.andExpect(status().isUnprocessableEntity());
}

@Test
@Sql(statements = "TRUNCATE \"user\" CASCADE;")
@Sql(statements = """
INSERT INTO "user" (id, name) VALUES (15, 'Sasha');
INSERT INTO "user" (id, name) VALUES (16, 'Alex');
INSERT INTO account (id, user_id, balance) VALUES (1, 15, 10);
INSERT INTO account (id, user_id, balance) VALUES (2, 16, 0);
""")
void performTransfer_ifUserHasSufficientBalance_recipientHasAccount_returns200() throws Exception {
TransferRequestDto transferDto = new TransferRequestDto();
transferDto.setRecipientId(16L);
transferDto.setAmount(BigDecimal.valueOf(10L));

mockMvc.perform(patch("/api/money-transfer")
.with(jwt().jwt(jwt -> jwt
.claim("userid", 15L)))
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(transferDto)))
.andExpect(status().isOk());
}
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... ql-scripts

Вернуться в «JAVA»