opencrabs 0.3.57

The autonomous, self-improving AI agent. Single Rust binary. Every channel. Install with: cargo install opencrabs
use crate::channels::telegram::cowork::*;

#[test]
fn parse_startgroup_valid() {
    assert_eq!(parse_startgroup_param("cowork_abc123"), Some("abc123"));
}

#[test]
fn parse_startgroup_not_cowork() {
    assert_eq!(parse_startgroup_param("other_param"), None);
}

#[test]
fn parse_startgroup_empty() {
    assert_eq!(parse_startgroup_param(""), None);
}

#[test]
fn parse_startgroup_just_prefix() {
    assert_eq!(parse_startgroup_param("cowork_"), None);
}

#[test]
fn is_cowork_session_true() {
    assert!(is_cowork_session("cowork_xxx"));
}

#[test]
fn is_cowork_session_false() {
    assert!(!is_cowork_session("other"));
}

#[test]
fn build_deep_link_format() {
    let link = build_cowork_deep_link("mybot", "abc123");
    assert_eq!(link, "https://t.me/mybot?startgroup=cowork_abc123");
}

#[test]
fn build_deep_link_with_bot_suffix() {
    let link = build_cowork_deep_link("team_crab_bot", "xyz");
    assert_eq!(link, "https://t.me/team_crab_bot?startgroup=cowork_xyz");
}

#[test]
fn cowork_state_lifecycle() {
    let state = CoworkState::new(123, 456, "abc".to_string());
    assert_eq!(state.user_id, 123);
    assert_eq!(state.chat_id, 456);
    assert_eq!(state.session_id, "abc");
    assert!(!state.is_expired());
}

#[test]
fn invite_qr_generation() {
    let result = build_invite_qr("https://t.me/+AbCdEfGh");
    assert!(result.is_some());
    let (bytes, path) = result.unwrap();
    // PNG magic number
    assert_eq!(&bytes[..8], b"\x89PNG\r\n\x1a\n");
    assert!(path.exists());
    // Cleanup
    let _ = std::fs::remove_file(path);
}