JwtUtilTest.java 2.09 KB
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());
    }
}