From fae7b2a9624492ad91a1845c396ffab76a0c5edb Mon Sep 17 00:00:00 2001 From: Cameron Cordes Date: Thu, 18 Feb 2021 20:31:03 -0500 Subject: [PATCH] Add tests for JWT decoding --- src/data/mod.rs | 45 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/src/data/mod.rs b/src/data/mod.rs index 92a1404..d21cd6d 100644 --- a/src/data/mod.rs +++ b/src/data/mod.rs @@ -11,14 +11,19 @@ pub struct Token<'a> { pub token: &'a str, } -#[derive(Deserialize, Serialize)] +#[derive(Debug, Deserialize, Serialize)] pub struct Claims { pub sub: String, pub exp: i64, } pub fn secret_key() -> String { - dotenv::var("SECRET_KEY").expect("SECRET_KEY env not set!") + if cfg!(test) { + String::from("test_key") + } else { + println!("USING REAL KEY"); + dotenv::var("SECRET_KEY").expect("SECRET_KEY env not set!") + } } impl FromStr for Claims { @@ -85,3 +90,39 @@ pub struct CreateAccountRequest { pub struct AddFavoriteRequest { 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) + } + } + } +}