use super::*;
use crate::profile::{ClaudeCredentials, OAuthToken};
fn creds(access: &str, refresh: Option<&str>) -> ClaudeCredentials {
ClaudeCredentials {
claude_ai_oauth: Some(OAuthToken {
access_token: access.to_string(),
refresh_token: refresh.map(str::to_string),
expires_at: None,
scopes: None,
subscription_type: None,
}),
}
}
#[test]
fn diverged_returns_false_when_either_side_missing() {
let c = creds("a", Some("r"));
assert!(!credentials_diverged(None, Some(&c)));
assert!(!credentials_diverged(Some(&c), None));
assert!(!credentials_diverged(None, None));
}
#[test]
fn diverged_returns_false_when_tokens_match() {
let a = creds("access-1", Some("refresh-1"));
let b = creds("access-1", Some("refresh-1"));
assert!(!credentials_diverged(Some(&a), Some(&b)));
}
#[test]
fn diverged_returns_true_when_access_token_differs() {
let a = creds("access-1", Some("refresh-1"));
let b = creds("access-2", Some("refresh-1"));
assert!(credentials_diverged(Some(&a), Some(&b)));
}
#[test]
fn diverged_returns_true_when_refresh_token_differs() {
let a = creds("access-1", Some("refresh-1"));
let b = creds("access-1", Some("refresh-2"));
assert!(credentials_diverged(Some(&a), Some(&b)));
}
#[test]
fn diverged_returns_true_when_refresh_token_disappears() {
let a = creds("access-1", Some("refresh-1"));
let b = creds("access-1", None);
assert!(credentials_diverged(Some(&a), Some(&b)));
}
#[test]
fn diverged_returns_false_when_oauth_block_missing_on_one_side() {
let with = creds("a", Some("r"));
let without = ClaudeCredentials {
claude_ai_oauth: None,
};
assert!(!credentials_diverged(Some(&with), Some(&without)));
assert!(!credentials_diverged(Some(&without), Some(&with)));
}