package pwc.taxtech.atms.security;

import java.util.Date;

import org.junit.Assert;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.alibaba.fastjson.JSON;

import io.jsonwebtoken.ExpiredJwtException;
import io.jsonwebtoken.JwtParser;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

public class JwtUtilTest {
    private static final Logger logger = LoggerFactory.getLogger(JwtUtilTest.class);
    private static final String TEST_SECRET_KEY = "test_secret_key";
    private JwtUtil jwtUtil = new JwtUtil();
    {
        jwtUtil.setJwtBase64Secret(TEST_SECRET_KEY);
    }

    @Test
    public void generateTokenThenValidate() {
        String token = jwtUtil.generateToken("admin", "Admin", "UUID_OF_ADMIN_USER");
        logger.debug("print token:{}", token);
        JwtUser jwtUser = jwtUtil.parseToken(token);
        logger.debug("print jwtUser:{}", JSON.toJSONString(jwtUser, true));
        Assert.assertNotNull(jwtUser);
        Assert.assertEquals("Admin", jwtUser.getDatabaseUsername());
        Assert.assertEquals("admin", jwtUser.getUsername());
        Assert.assertEquals("UUID_OF_ADMIN_USER", jwtUser.getUserid());
    }

    @Test(expected = ExpiredJwtException.class)
    public void getExpiredToken() {
        String token = Jwts.builder().setExpiration(new Date(System.currentTimeMillis() - 1000))
                .signWith(SignatureAlgorithm.HS512, TEST_SECRET_KEY).compact();
        JwtParser parser = Jwts.parser().setSigningKey(TEST_SECRET_KEY);
        parser.parseClaimsJws(token);
    }

}