Add tests for JWT decoding

This commit is contained in:
Cameron Cordes
2021-02-18 20:31:03 -05:00
parent 1ad7abb69c
commit fae7b2a962

View File

@@ -11,15 +11,20 @@ pub struct Token<'a> {
pub token: &'a str, pub token: &'a str,
} }
#[derive(Deserialize, Serialize)] #[derive(Debug, Deserialize, Serialize)]
pub struct Claims { pub struct Claims {
pub sub: String, pub sub: String,
pub exp: i64, pub exp: i64,
} }
pub fn secret_key() -> String { pub fn secret_key() -> String {
if cfg!(test) {
String::from("test_key")
} else {
println!("USING REAL KEY");
dotenv::var("SECRET_KEY").expect("SECRET_KEY env not set!") dotenv::var("SECRET_KEY").expect("SECRET_KEY env not set!")
} }
}
impl FromStr for Claims { impl FromStr for Claims {
type Err = jsonwebtoken::errors::Error; type Err = jsonwebtoken::errors::Error;
@@ -85,3 +90,39 @@ pub struct CreateAccountRequest {
pub struct AddFavoriteRequest { pub struct AddFavoriteRequest {
pub path: String, pub path: String,
} }
#[cfg(test)]
mod tests {
use super::Claims;
use jsonwebtoken::errors::ErrorKind;
use std::str::FromStr;
#[test]
fn test_token_from_claims() {
let claims = Claims {
exp: 16136164790, // 2481-ish
sub: String::from("9"),
};
let c = Claims::from_str(
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI5IiwiZXhwIjoxNjEzNjE2NDc5MH0.9wwK4l8vhvq55YoueEljMbN_5uVTaAsGLLRPr0AuymE")
.unwrap();
assert_eq!(claims.sub, c.sub);
assert_eq!(claims.exp, c.exp);
}
#[test]
fn test_expired_token() {
let err = Claims::from_str(
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI5IiwiZXhwIjoxNn0.eZnfaNfiD54VMbphIqeBICeG9SzAtwNXntLwtTBihjY");
match err.unwrap_err().into_kind() {
ErrorKind::ExpiredSignature => assert!(true),
kind => {
println!("Unexpected error: {:?}", kind);
assert!(false)
}
}
}
}