use codex_usage::analysis::detector::detect_extension_type;
use codex_usage::models::ExtensionType;
use serde_json::json;
#[test]
fn test_detect_extension_type_empty_data() {
let data = vec![];
let result = detect_extension_type(&data);
assert_eq!(
result,
ExtensionType::Codex,
"Empty data should default to Codex"
);
}
#[test]
fn test_detect_extension_type_claude_code() {
let data = vec![
json!({
"parentUuid": null,
"sessionId": "test-session",
"type": "user",
"message": {"role": "user", "content": "test"}
}),
json!({
"parentUuid": "some-uuid",
"sessionId": "test-session",
"type": "assistant"
}),
];
let result = detect_extension_type(&data);
assert_eq!(
result,
ExtensionType::ClaudeCode,
"Data with parentUuid should be detected as Claude Code"
);
}
#[test]
fn test_detect_extension_type_codex() {
let data = vec![
json!({
"timestamp": "2025-08-28T12:00:00Z",
"type": "user_message",
"content": "test message"
}),
json!({
"timestamp": "2025-08-28T12:00:01Z",
"type": "assistant_message",
"content": "response"
}),
];
let result = detect_extension_type(&data);
assert_eq!(
result,
ExtensionType::Codex,
"Data without parentUuid should be detected as Codex"
);
}
#[test]
fn test_detect_extension_type_mixed_data() {
let data = vec![
json!({
"timestamp": "2025-08-28T12:00:00Z",
"type": "user"
}),
json!({
"parentUuid": "some-uuid",
"type": "assistant"
}),
];
let result = detect_extension_type(&data);
assert_eq!(result, ExtensionType::ClaudeCode);
}
#[test]
fn test_detect_extension_type_single_claude_record() {
let data = vec![json!({
"parentUuid": null,
"sessionId": "test",
"message": "test"
})];
let result = detect_extension_type(&data);
assert_eq!(result, ExtensionType::ClaudeCode);
}
#[test]
fn test_detect_extension_type_non_object_records() {
let data = vec![json!("string value"), json!(123), json!([1, 2, 3])];
let result = detect_extension_type(&data);
assert_eq!(result, ExtensionType::Codex);
}