#[cfg(test)]
mod tests {
use crate::common::error::JwtError;
use crate::cognito::token::CognitoTokenParser as TokenParser;
use base64::Engine;
fn create_test_token(header: &str, payload: &str, signature: &str) -> String {
format!("{}.{}.{}", header, payload, signature)
}
fn base64_encode(data: &str) -> String {
base64::engine::general_purpose::URL_SAFE_NO_PAD.encode(data)
}
#[test]
fn test_parse_token_payload() {
let header = base64_encode(r#"{"alg":"RS256","kid":"test-key-id"}"#);
let payload = base64_encode(
r#"{"iss":"https://example.com","token_use":"id","client_id":"client123","exp":4070908800}"#,
);
let token = create_test_token(&header, &payload, "signature");
let result = TokenParser::parse_token_payload(&token);
assert!(result.is_ok());
let payload = result.unwrap();
assert_eq!(payload.iss, "https://example.com");
assert_eq!(payload.token_use, Some("id".to_string()));
assert_eq!(payload.client_id, Some("client123".to_string()));
assert_eq!(payload.exp, Some(4070908800));
}
#[test]
fn test_parse_token_payload_empty_token() {
let result = TokenParser::parse_token_payload("");
assert!(result.is_err());
assert!(matches!(result.unwrap_err(), JwtError::MissingToken));
}
#[test]
fn test_parse_token_payload_invalid_format() {
let result = TokenParser::parse_token_payload("header");
assert!(result.is_err());
assert!(matches!(result.unwrap_err(), JwtError::ParseError { .. }));
let result = TokenParser::parse_token_payload("header.payload");
assert!(result.is_err());
assert!(matches!(result.unwrap_err(), JwtError::ParseError { .. }));
}
#[test]
fn test_parse_token_payload_invalid_base64() {
let header = base64_encode(r#"{"alg":"RS256","kid":"test-key-id"}"#);
let token = create_test_token(&header, "invalid!base64", "signature");
let result = TokenParser::parse_token_payload(&token);
assert!(result.is_err());
assert!(matches!(result.unwrap_err(), JwtError::ParseError { .. }));
}
#[test]
fn test_parse_token_payload_invalid_json() {
let header = base64_encode(r#"{"alg":"RS256","kid":"test-key-id"}"#);
let payload = base64_encode("not json");
let token = create_test_token(&header, &payload, "signature");
let result = TokenParser::parse_token_payload(&token);
assert!(result.is_err());
assert!(matches!(result.unwrap_err(), JwtError::ParseError { .. }));
}
}