From b33096b92524e141ba4a553b8d86b521bed0ad76 Mon Sep 17 00:00:00 2001
From: “mitao” <“2763622819@qq.com”>
Date: 星期五, 24 四月 2026 20:17:20 +0800
Subject: [PATCH] bugfix

---
 tcm-training-admin-backend/src/test/java/com/tcm/training/admin/app/auth/service/AppSmsCodeServiceTest.java |   42 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 42 insertions(+), 0 deletions(-)

diff --git a/tcm-training-admin-backend/src/test/java/com/tcm/training/admin/app/auth/service/AppSmsCodeServiceTest.java b/tcm-training-admin-backend/src/test/java/com/tcm/training/admin/app/auth/service/AppSmsCodeServiceTest.java
index 1a035ef..e489563 100644
--- a/tcm-training-admin-backend/src/test/java/com/tcm/training/admin/app/auth/service/AppSmsCodeServiceTest.java
+++ b/tcm-training-admin-backend/src/test/java/com/tcm/training/admin/app/auth/service/AppSmsCodeServiceTest.java
@@ -84,6 +84,48 @@
     }
 
     /**
+     * 验证码校验成功后不应删除缓存,保证 5 分钟有效期内可重复提交。
+     */
+    @Test
+    void validateLoginCodeShouldKeepCachedCodeAfterSuccess() {
+        when(stringRedisTemplate.opsForValue()).thenReturn(valueOperations);
+        when(valueOperations.get("app:sms:login:13800138000")).thenReturn("123456");
+
+        assertDoesNotThrow(() -> appSmsCodeService.validateLoginCode("13800138000", "123456"));
+
+        verify(stringRedisTemplate, never()).delete(anyString());
+    }
+
+    /**
+     * 同一验证码在缓存 TTL 内多次提交都应校验通过。
+     */
+    @Test
+    void validateLoginCodeShouldAllowRepeatedSubmissionsWithinTtl() {
+        when(stringRedisTemplate.opsForValue()).thenReturn(valueOperations);
+        when(valueOperations.get("app:sms:login:13800138000")).thenReturn("123456");
+
+        assertDoesNotThrow(() -> appSmsCodeService.validateLoginCode("13800138000", "123456"));
+        assertDoesNotThrow(() -> appSmsCodeService.validateLoginCode("13800138000", "123456"));
+
+        verify(stringRedisTemplate, never()).delete(anyString());
+    }
+
+    /**
+     * 缓存中存在验证码但输入不一致时仍应提示验证码错误。
+     */
+    @Test
+    void validateLoginCodeShouldRejectMismatchedCode() {
+        when(stringRedisTemplate.opsForValue()).thenReturn(valueOperations);
+        when(valueOperations.get("app:sms:login:13800138000")).thenReturn("123456");
+
+        IllegalArgumentException exception = assertThrows(IllegalArgumentException.class,
+                () -> appSmsCodeService.validateLoginCode("13800138000", "654321"));
+
+        assertEquals("验证码错误", exception.getMessage());
+        verify(stringRedisTemplate, never()).delete(anyString());
+    }
+
+    /**
      * 短信发送成功后才应写入验证码缓存。
      */
     @Test

--
Gitblit v1.7.1