From 9f5f38575a8e50efb84818f0b8e2a4be32991d85 Mon Sep 17 00:00:00 2001 From: weicw <594098497@qq.com> Date: Fri, 30 Oct 2026 17:50:20 +0800 Subject: [PATCH] =?UTF-8?q?test:=20=E6=90=AD=E5=BB=BA=E5=AE=A1=E6=89=B9?= =?UTF-8?q?=E6=B5=81=E5=BC=80=E5=8F=91=E6=B5=8B=E8=AF=95=E5=BA=95=E5=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 17 +++++++ .../common/core/config/SwaggerConfig.java | 2 + .../controller/SchedulingController.java | 3 +- .../think/task/ThinkFaceAccessTask.java | 2 + .../java/com/gxwebsoft/ContextLoadsIT.java | 28 ++++++++++ src/test/java/com/gxwebsoft/TestMain.java | 51 ------------------- .../gxwebsoft/WebSoftApplicationTests.java | 13 ----- .../gxwebsoft/support/TestAuthentication.java | 43 ++++++++++++++++ .../support/TestAuthenticationTest.java | 24 +++++++++ src/test/resources/application-test.yml | 14 +++++ 10 files changed, 132 insertions(+), 65 deletions(-) create mode 100644 src/test/java/com/gxwebsoft/ContextLoadsIT.java delete mode 100644 src/test/java/com/gxwebsoft/TestMain.java delete mode 100644 src/test/java/com/gxwebsoft/WebSoftApplicationTests.java create mode 100644 src/test/java/com/gxwebsoft/support/TestAuthentication.java create mode 100644 src/test/java/com/gxwebsoft/support/TestAuthenticationTest.java create mode 100644 src/test/resources/application-test.yml diff --git a/pom.xml b/pom.xml index 94956ea..37a83ae 100644 --- a/pom.xml +++ b/pom.xml @@ -21,6 +21,7 @@ 1.8 UTF-8 UTF-8 + true @@ -382,11 +383,27 @@ true + + org.apache.maven.plugins + maven-failsafe-plugin + + ${skipITs} + + + + + approval-it + + false + + + + aliYunMaven diff --git a/src/main/java/com/gxwebsoft/common/core/config/SwaggerConfig.java b/src/main/java/com/gxwebsoft/common/core/config/SwaggerConfig.java index 32c56c8..5f2023d 100644 --- a/src/main/java/com/gxwebsoft/common/core/config/SwaggerConfig.java +++ b/src/main/java/com/gxwebsoft/common/core/config/SwaggerConfig.java @@ -3,6 +3,7 @@ package com.gxwebsoft.common.core.config; import cn.hutool.core.util.StrUtil; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; @@ -24,6 +25,7 @@ import java.util.List; */ @EnableOpenApi @Configuration +@Profile("!test") public class SwaggerConfig { @Resource private ConfigProperties config; diff --git a/src/main/java/com/gxwebsoft/think/controller/SchedulingController.java b/src/main/java/com/gxwebsoft/think/controller/SchedulingController.java index 2b908a3..bd45ea6 100644 --- a/src/main/java/com/gxwebsoft/think/controller/SchedulingController.java +++ b/src/main/java/com/gxwebsoft/think/controller/SchedulingController.java @@ -17,6 +17,7 @@ import com.gxwebsoft.think.service.ThinkOrderService; import com.gxwebsoft.think.service.ThinkSiteService; import io.swagger.annotations.Api; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Profile; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -35,7 +36,7 @@ import java.util.concurrent.TimeUnit; @Api(tags = "定时任务") @RestController @RequestMapping("/api/scheduled") - +@Profile("!test") public class SchedulingController extends BaseController { @Resource diff --git a/src/main/java/com/gxwebsoft/think/task/ThinkFaceAccessTask.java b/src/main/java/com/gxwebsoft/think/task/ThinkFaceAccessTask.java index 22f033d..fb2ede4 100644 --- a/src/main/java/com/gxwebsoft/think/task/ThinkFaceAccessTask.java +++ b/src/main/java/com/gxwebsoft/think/task/ThinkFaceAccessTask.java @@ -9,6 +9,7 @@ import com.gxwebsoft.think.entity.*; import com.gxwebsoft.think.service.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Profile; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -34,6 +35,7 @@ import java.util.stream.Collectors; * @since 2026-03-13 */ @Component +@Profile("!test") public class ThinkFaceAccessTask { private static final Logger logger = LoggerFactory.getLogger(ThinkFaceAccessTask.class); diff --git a/src/test/java/com/gxwebsoft/ContextLoadsIT.java b/src/test/java/com/gxwebsoft/ContextLoadsIT.java new file mode 100644 index 0000000..36ab4a9 --- /dev/null +++ b/src/test/java/com/gxwebsoft/ContextLoadsIT.java @@ -0,0 +1,28 @@ +package com.gxwebsoft; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.test.context.ActiveProfiles; + +import javax.sql.DataSource; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * 集成测试底座冒烟:只验证测试 profile 能启动上下文并连上共享测试库,不涉及业务表。 + */ +@SpringBootTest +@ActiveProfiles({"gxtyzx-test", "test"}) +class ContextLoadsIT { + + @Autowired + private DataSource dataSource; + + @Test + void connectsToTestDatabase() { + Integer result = new JdbcTemplate(dataSource).queryForObject("select 1", Integer.class); + assertThat(result).isEqualTo(1); + } +} diff --git a/src/test/java/com/gxwebsoft/TestMain.java b/src/test/java/com/gxwebsoft/TestMain.java deleted file mode 100644 index 3f760bf..0000000 --- a/src/test/java/com/gxwebsoft/TestMain.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.gxwebsoft; - -import cn.hutool.core.util.NumberUtil; -import com.gxwebsoft.think.entity.ThinkOrder; -import com.gxwebsoft.think.service.ThinkOrderService; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -import javax.annotation.Resource; -import java.math.BigDecimal; -import java.text.NumberFormat; -import java.text.ParseException; - -/** - * Created by WebSoft on 2020-03-23 23:37 - */ -@SpringBootTest -public class TestMain { - /** - * 生成唯一的key用于jwt工具类 - */ - @Test - public void testGenJwtKey() { - - BigDecimal bigDecimal = new BigDecimal(NumberUtil.decimalFormat("0.00", 1 * 0.01)); - System.out.println("实际付款金额 = " + bigDecimal); -// System.out.println(JwtUtil.encodeKey(JwtUtil.randomKey())); - -// final String encrypt = CommonUtil.encrypt("123456"); -// System.out.println("encrypt = " + encrypt); -// -// final String decrypt = CommonUtil.decrypt(encrypt); -// System.out.println("decrypt = " + decrypt); - } - - - private String fenToYuan(String amount){ - NumberFormat format = NumberFormat.getInstance(); - try{ - Number number = format.parse(amount); - double temp = number.doubleValue() / 100.0; - format.setGroupingUsed(false); - // 设置返回的小数部分所允许的最大位数 - format.setMaximumFractionDigits(2); - amount = format.format(temp); - } catch (ParseException e){ - e.printStackTrace(); - } - return amount; - } -} diff --git a/src/test/java/com/gxwebsoft/WebSoftApplicationTests.java b/src/test/java/com/gxwebsoft/WebSoftApplicationTests.java deleted file mode 100644 index 5a024f5..0000000 --- a/src/test/java/com/gxwebsoft/WebSoftApplicationTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.gxwebsoft; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -public class WebSoftApplicationTests { - - @Test - public void contextLoads() { - } - -} diff --git a/src/test/java/com/gxwebsoft/support/TestAuthentication.java b/src/test/java/com/gxwebsoft/support/TestAuthentication.java new file mode 100644 index 0000000..21a2051 --- /dev/null +++ b/src/test/java/com/gxwebsoft/support/TestAuthentication.java @@ -0,0 +1,43 @@ +package com.gxwebsoft.support; + +import com.gxwebsoft.common.system.entity.Menu; +import com.gxwebsoft.common.system.entity.User; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 测试用登录态构造器:MockMvc 直接注入 Authentication,不触发 JwtAuthenticationFilter 的远程 core 调用。 + * + *

租户与用户固定为测试库中已存在的 10150 / 3673(admin);权限串由调用方传入。

+ */ +public final class TestAuthentication { + + public static final int TENANT_ID = 10150; + public static final int USER_ID = 3673; + + private TestAuthentication() { + } + + public static Authentication admin(String... authorities) { + List menus = Arrays.stream(authorities) + .map(authority -> { + Menu menu = new Menu(); + menu.setAuthority(authority); + return menu; + }) + .collect(Collectors.toList()); + + User user = new User(); + user.setUserId(USER_ID); + user.setUsername("admin"); + user.setTenantId(TENANT_ID); + user.setStatus(0); + user.setAuthorities(menus); + + return new UsernamePasswordAuthenticationToken(user, null, menus); + } +} diff --git a/src/test/java/com/gxwebsoft/support/TestAuthenticationTest.java b/src/test/java/com/gxwebsoft/support/TestAuthenticationTest.java new file mode 100644 index 0000000..77af4e9 --- /dev/null +++ b/src/test/java/com/gxwebsoft/support/TestAuthenticationTest.java @@ -0,0 +1,24 @@ +package com.gxwebsoft.support; + +import com.gxwebsoft.common.system.entity.User; +import org.junit.jupiter.api.Test; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; + +import static org.assertj.core.api.Assertions.assertThat; + +class TestAuthenticationTest { + + @Test + void buildsAdminPrincipalWithAuthorities() { + Authentication authentication = TestAuthentication.admin("approval:instance:list"); + + assertThat(authentication.getPrincipal()).isInstanceOf(User.class); + User user = (User) authentication.getPrincipal(); + assertThat(user.getUserId()).isEqualTo(TestAuthentication.USER_ID); + assertThat(user.getTenantId()).isEqualTo(TestAuthentication.TENANT_ID); + assertThat(authentication.getAuthorities()) + .extracting(GrantedAuthority::getAuthority) + .containsExactly("approval:instance:list"); + } +} diff --git a/src/test/resources/application-test.yml b/src/test/resources/application-test.yml new file mode 100644 index 0000000..bd251a1 --- /dev/null +++ b/src/test/resources/application-test.yml @@ -0,0 +1,14 @@ +# 测试专用覆盖;必须与 @ActiveProfiles({"gxtyzx-test", "test"}) 一起使用。 +# 数据源、Redis、远程 core 地址仍由 application-gxtyzx-test.yml 提供。 +config: + upload-path: ${java.io.tmpdir}/gxtyzx-test-uploads/ + local-upload-path: ${java.io.tmpdir}/gxtyzx-test-uploads/ + +logging: + level: + com.gxwebsoft: WARN + com.baomidou.mybatisplus: WARN + +springfox: + documentation: + enabled: false