test: add tests for GitHub OAuth device flow types and Settings UI

- Add serialization tests for DeviceFlowStart, DeviceFlowPollResult, GitHubUser
- Add SettingsPanel tests for OAuth section: login button, connected state,
  disconnect, waiting state with user code, no token field
- All 174 Rust + 475 frontend tests pass

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
lucaronin
2026-02-23 19:57:59 +01:00
parent 2a831e69c6
commit 868e430cee
2 changed files with 174 additions and 1 deletions

View File

@@ -491,4 +491,74 @@ mod tests {
assert!(repo.updated_at.is_none());
assert!(!repo.private);
}
#[test]
fn test_device_flow_start_serialization() {
let start = DeviceFlowStart {
device_code: "dc_123".to_string(),
user_code: "ABCD-1234".to_string(),
verification_uri: "https://github.com/login/device".to_string(),
expires_in: 900,
interval: 5,
};
let json = serde_json::to_string(&start).unwrap();
let parsed: DeviceFlowStart = serde_json::from_str(&json).unwrap();
assert_eq!(parsed.device_code, "dc_123");
assert_eq!(parsed.user_code, "ABCD-1234");
assert_eq!(parsed.verification_uri, "https://github.com/login/device");
assert_eq!(parsed.expires_in, 900);
assert_eq!(parsed.interval, 5);
}
#[test]
fn test_device_flow_poll_result_complete() {
let result = DeviceFlowPollResult {
status: "complete".to_string(),
access_token: Some("gho_abc123".to_string()),
error: None,
};
let json = serde_json::to_string(&result).unwrap();
let parsed: DeviceFlowPollResult = serde_json::from_str(&json).unwrap();
assert_eq!(parsed.status, "complete");
assert_eq!(parsed.access_token, Some("gho_abc123".to_string()));
assert!(parsed.error.is_none());
}
#[test]
fn test_device_flow_poll_result_pending() {
let result = DeviceFlowPollResult {
status: "pending".to_string(),
access_token: None,
error: Some("authorization_pending".to_string()),
};
let json = serde_json::to_string(&result).unwrap();
let parsed: DeviceFlowPollResult = serde_json::from_str(&json).unwrap();
assert_eq!(parsed.status, "pending");
assert!(parsed.access_token.is_none());
assert_eq!(
parsed.error,
Some("authorization_pending".to_string())
);
}
#[test]
fn test_github_user_serialization() {
let user = GitHubUser {
login: "lucaong".to_string(),
name: Some("Luca Ongaro".to_string()),
avatar_url: "https://avatars.githubusercontent.com/u/123".to_string(),
};
let json = serde_json::to_string(&user).unwrap();
let parsed: GitHubUser = serde_json::from_str(&json).unwrap();
assert_eq!(parsed.login, "lucaong");
assert_eq!(parsed.name, Some("Luca Ongaro".to_string()));
}
#[test]
fn test_github_user_deserialization_null_name() {
let json = r#"{"login":"bot","name":null,"avatar_url":"https://x"}"#;
let user: GitHubUser = serde_json::from_str(json).unwrap();
assert_eq!(user.login, "bot");
assert!(user.name.is_none());
}
}