jwt-verify 0.1.0

JWT verification library for AWS Cognito tokens and any OIDC-compatible IDP
Documentation
#[cfg(test)]
mod tests {
    use crate::common::error::ErrorVerbosity;
    use crate::oidc::{OidcJwtVerifier, OidcProviderConfig};
    use std::time::Duration;

    #[test]
    fn test_new_verifier() {
        // Create a configuration for an OIDC provider
        let config = OidcProviderConfig::new(
            "https://accounts.example.com",
            Some("https://accounts.example.com/.well-known/jwks.json"),
            &["client1".to_string()],
            None,
        )
        .unwrap();

        // Create a verifier with the OIDC provider
        let verifier = OidcJwtVerifier::new(vec![config]).unwrap();

        // Check that the provider was registered
        let provider_ids = verifier.get_provider_ids();
        assert_eq!(provider_ids.len(), 1);
        assert!(provider_ids.contains(&"https://accounts.example.com".to_string()));
    }

    #[test]
    fn test_new_single_provider() {
        // Create a verifier with a single OIDC provider
        let verifier = OidcJwtVerifier::new_single_provider(
            "https://accounts.example.com",
            Some("https://accounts.example.com/.well-known/jwks.json"),
            &["client1".to_string()],
        )
        .unwrap();

        // Check that the provider was registered
        let provider_ids = verifier.get_provider_ids();
        assert_eq!(provider_ids.len(), 1);
        assert!(provider_ids.contains(&"https://accounts.example.com".to_string()));
    }

    #[test]
    fn test_add_provider() {
        // Create a verifier
        let mut verifier = OidcJwtVerifier::new(vec![]).unwrap();

        // Create a configuration for an OIDC provider
        let config = OidcProviderConfig::new(
            "https://accounts.example.com",
            Some("https://accounts.example.com/.well-known/jwks.json"),
            &["client1".to_string()],
            None,
        )
        .unwrap();

        // Add the provider to the verifier
        verifier.add_provider("example", config).unwrap();

        // Check that the provider was registered
        let provider_ids = verifier.get_provider_ids();
        assert_eq!(provider_ids.len(), 1);
        assert!(provider_ids.contains(&"example".to_string()));
    }

    #[test]
    fn test_add_provider_with_discovery() {
        // Create a verifier
        let mut verifier = OidcJwtVerifier::new(vec![]).unwrap();

        // Add a provider with discovery
        verifier
            .add_provider_with_discovery(
                "example",
                "https://accounts.example.com",
                &["client1".to_string()],
            )
            .unwrap();

        // Check that the provider was registered
        let provider_ids = verifier.get_provider_ids();
        assert_eq!(provider_ids.len(), 1);
        assert!(provider_ids.contains(&"example".to_string()));
    }

    #[test]
    fn test_remove_provider() {
        // Create a verifier with a provider
        let config = OidcProviderConfig::new(
            "https://accounts.example.com",
            Some("https://accounts.example.com/.well-known/jwks.json"),
            &["client1".to_string()],
            None,
        )
        .unwrap();

        let mut verifier = OidcJwtVerifier::new(vec![config]).unwrap();

        // Check that the provider was registered
        let provider_ids = verifier.get_provider_ids();
        assert_eq!(provider_ids.len(), 1);

        // Remove the provider
        verifier
            .remove_provider("https://accounts.example.com")
            .unwrap();

        // Check that the provider was removed
        let provider_ids = verifier.get_provider_ids();
        assert_eq!(provider_ids.len(), 0);
    }

    #[test]
    fn test_set_error_verbosity() {
        // Create a verifier
        let mut verifier = OidcJwtVerifier::new(vec![]).unwrap();

        // Set the error verbosity level
        verifier.set_error_verbosity(ErrorVerbosity::Detailed);

        // No assertion needed, just checking that it doesn't panic
    }

    #[test]
    fn test_set_discovery_cache_duration() {
        // Create a verifier
        let mut verifier = OidcJwtVerifier::new(vec![]).unwrap();

        // Set the discovery cache duration
        verifier.set_discovery_cache_duration(Duration::from_secs(3600 * 12)); // 12 hours

        // No assertion needed, just checking that it doesn't panic
    }
}