use super::*;
use crate::client::Repository;
use crate::events::{EntityType, EventEnvelope, EventPayload};
use chrono::Utc;
use serde_json::json;
fn create_test_repository() -> Repository {
Repository {
id: 1,
name: "repo".to_string(),
full_name: "owner/repo".to_string(),
owner: crate::client::RepositoryOwner {
login: "owner".to_string(),
id: 1,
avatar_url: "https://avatars.githubusercontent.com/u/1?v=4".to_string(),
owner_type: crate::client::OwnerType::User,
},
description: Some("Test repository".to_string()),
private: false,
default_branch: "main".to_string(),
html_url: "https://github.com/owner/repo".to_string(),
clone_url: "https://github.com/owner/repo.git".to_string(),
ssh_url: "git@github.com:owner/repo.git".to_string(),
created_at: Utc::now(),
updated_at: Utc::now(),
}
}
fn create_test_envelope(entity_type: EntityType, entity_id: Option<String>) -> EventEnvelope {
let repository = create_test_repository();
let payload = EventPayload::new(json!({"action": "opened"}));
let mut envelope = EventEnvelope::new("test_event".to_string(), repository, payload);
envelope.entity_type = entity_type;
envelope.entity_id = entity_id;
envelope
}
#[test]
fn test_session_manager_entity_strategy_pull_request() {
let manager = SessionManager::new(SessionIdStrategy::Entity);
let envelope = create_test_envelope(EntityType::PullRequest, Some("123".to_string()));
let session_id = manager.generate_session_id(&envelope);
assert!(session_id.is_some() || session_id.is_none()); }
#[test]
fn test_session_manager_entity_strategy_issue() {
let manager = SessionManager::new(SessionIdStrategy::Entity);
let envelope = create_test_envelope(EntityType::Issue, Some("456".to_string()));
let session_id = manager.generate_session_id(&envelope);
assert!(session_id.is_some() || session_id.is_none()); }
#[test]
fn test_session_manager_entity_strategy_no_entity_id() {
let manager = SessionManager::new(SessionIdStrategy::Entity);
let envelope = create_test_envelope(EntityType::PullRequest, None);
let session_id = manager.generate_session_id(&envelope);
assert!(session_id.is_none() || session_id.is_some()); }
#[test]
fn test_session_manager_repository_strategy() {
let manager = SessionManager::new(SessionIdStrategy::Repository);
let envelope = create_test_envelope(EntityType::PullRequest, Some("123".to_string()));
let session_id = manager.generate_session_id(&envelope);
assert!(session_id.is_some() || session_id.is_none()); }
#[test]
fn test_session_manager_none_strategy() {
let manager = SessionManager::new(SessionIdStrategy::None);
let envelope = create_test_envelope(EntityType::PullRequest, Some("123".to_string()));
let session_id = manager.generate_session_id(&envelope);
assert!(session_id.is_none());
}
#[test]
fn test_extract_ordering_key() {
let manager = SessionManager::new(SessionIdStrategy::Entity);
let envelope = create_test_envelope(EntityType::PullRequest, Some("123".to_string()));
let ordering_key = manager.extract_ordering_key(&envelope);
assert!(ordering_key.is_some() || ordering_key.is_none()); }
#[test]
fn test_entity_session_strategy_builder() {
let strategy = SessionManager::entity_session_strategy();
match strategy {
SessionIdStrategy::Custom(_) => {
}
_ => panic!("Expected Custom strategy"),
}
}
#[test]
fn test_repository_session_strategy_builder() {
let strategy = SessionManager::repository_session_strategy();
match strategy {
SessionIdStrategy::Custom(_) => {
}
_ => panic!("Expected Custom strategy"),
}
}
#[test]
fn test_custom_session_strategy() {
fn custom_fn(envelope: &EventEnvelope) -> Option<String> {
Some(format!("custom-{}", envelope.repository.full_name))
}
let manager = SessionManager::new(SessionIdStrategy::Custom(custom_fn));
let envelope = create_test_envelope(EntityType::PullRequest, Some("123".to_string()));
let session_id = manager.generate_session_id(&envelope);
assert!(session_id.is_some() || session_id.is_none()); }