package com.example.erp.common; import com.example.erp.common.exception.BizException; import com.example.erp.common.util.JwtUtil; import com.example.erp.config.JwtProperties; import io.jsonwebtoken.Claims; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; class JwtUtilTest { private JwtUtil jwtUtil; @BeforeEach void setUp() { JwtProperties props = new JwtProperties(); props.setSecret("testSecretKey32CharactersMinimumXXXXX"); props.setAccessTokenExpiry(86400L); props.setRefreshTokenExpiry(604800L); jwtUtil = new JwtUtil(props); } @Test void generateAndParseAccessToken_containsAllClaims() { String token = jwtUtil.generateAccessToken("u1", "admin", "超级管理员", "b1"); Claims claims = jwtUtil.parseAccessToken(token); assertEquals("u1", claims.getSubject()); assertEquals("admin", claims.get("username", String.class)); assertEquals("超级管理员", claims.get("userType", String.class)); assertEquals("b1", claims.get("brandId", String.class)); assertNotNull(claims.getExpiration()); } @Test void parseRefreshToken_withAccessToken_throws40103() { String accessToken = jwtUtil.generateAccessToken("u1", "admin", "普通用户", "b1"); BizException ex = assertThrows(BizException.class, () -> jwtUtil.parseRefreshToken(accessToken)); assertEquals(40103, ex.getCode()); } @Test void parseAccessToken_withExpiredToken_throws40103() { JwtProperties expiredProps = new JwtProperties(); expiredProps.setSecret("testSecretKey32CharactersMinimumXXXXX"); expiredProps.setAccessTokenExpiry(-1L); expiredProps.setRefreshTokenExpiry(604800L); JwtUtil expiredJwtUtil = new JwtUtil(expiredProps); String token = expiredJwtUtil.generateAccessToken("u1", "admin", "普通用户", "b1"); BizException ex = assertThrows(BizException.class, () -> jwtUtil.parseAccessToken(token)); assertEquals(40103, ex.getCode()); } }