// Copyright 2022 Harness Inc. All rights reserved.
// Use of this source code is governed by the Polyform Free Trial License
// that can be found in the LICENSE.md file for this repository.

package token

import (
	"testing"
)

func TestToken(t *testing.T) {
	// user := &types.User{ID: 42, Admin: true}
	// tokenStr, err := GenerateJWT(user, "TEST0E4C2F76C58916E")
	// if err != nil {
	// 	t.Error(err)
	// 	return
	// }

	// token, err := jwt.ParseWithClaims(tokenStr, &JWTClaims{}, func(token *jwt.Token) (interface{}, error) {
	// 	sub := token.Claims.(*JWTClaims).Subject
	// 	id, _ := strconv.ParseInt(sub, 10, 64)
	// 	if id != 42 {
	// 		t.Errorf("want subscriber id, got %v", id)
	// 	}
	// 	return []byte("TEST0E4C2F76C58916E"), nil
	// })
	// if err != nil {
	// 	t.Error(err)
	// 	return
	// }
	// if token.Valid == false {
	// 	t.Errorf("invalid token")
	// 	return
	// }
	// if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
	// 	t.Errorf("invalid token signing method")
	// 	return
	// }

	// if expires := token.Claims.(*JWTClaims).ExpiresAt; expires > 0 {
	// 	if time.Now().Unix() > expires {
	// 		t.Errorf("token expired")
	// 	}
	// }
}

func TestTokenExpired(t *testing.T) {
	// user := &types.User{ID: 42, Admin: true}
	// tokenStr, err := GenerateJWTWithExpiration(user, 1637549186, "TEST0E4C2F76C58916E")
	// if err != nil {
	// 	t.Error(err)
	// 	return
	// }

	// _, err = jwt.ParseWithClaims(tokenStr, &JWTClaims{}, func(token *jwt.Token) (interface{}, error) {
	// 	sub := token.Claims.(*JWTClaims).Subject
	// 	id, _ := strconv.ParseInt(sub, 10, 64)
	// 	if id != 42 {
	// 		t.Errorf("want subscriber id, got %v", id)
	// 	}
	// 	return []byte("TEST0E4C2F76C58916E"), nil
	// })
	// if err == nil {
	// 	t.Errorf("expect token expired")
	// 	return
	// }
}

func TestTokenNotExpired(t *testing.T) {
	// user := &types.User{ID: 42, Admin: true}
	// tokenStr, err := GenerateJWTWithExpiration(user, time.Now().Add(time.Hour).Unix(), "TEST0E4C2F76C58916E")
	// if err != nil {
	// 	t.Error(err)
	// 	return
	// }

	// token, err := jwt.ParseWithClaims(tokenStr, &JWTClaims{}, func(token *jwt.Token) (interface{}, error) {
	// 	sub := token.Claims.(*JWTClaims).Subject
	// 	id, _ := strconv.ParseInt(sub, 10, 64)
	// 	if id != 42 {
	// 		t.Errorf("want subscriber id, got %v", id)
	// 	}
	// 	return []byte("TEST0E4C2F76C58916E"), nil
	// })
	// if err != nil {
	// 	t.Error(err)
	// 	return
	// }

	// claims, ok := token.Claims.(*JWTClaims)
	// if !ok {
	// 	t.Errorf("expect token claims from token")
	// 	return
	// }

	// if claims.ExpiresAt > 0 && time.Now().Unix() > claims.ExpiresAt {
	// 	t.Errorf("expect token not expired")
	// 	return
	// }
}
