AkurAI Build
Menu

Public repository / master

AkurAI-Notes / crates/notes-api/tests/auth_test.rs

Latest change ec19c1e2be3ce7356eb8894247e5ddc1d9f3ccd1 - E03: AkurAI IDP SSO login — port idp_client.rs + session.rs + auth routes by Claude Code

use akurai_http::Request;
use akurai_storage::BTree;
use notes_api::auth::session;

fn make_request(headers: &[(&str, &str)]) -> Request {
    let mut hdrs = String::new();
    for (k, v) in headers {
        hdrs.push_str(&format!("{k}: {v}\r\n"));
    }
    let raw = format!("GET / HTTP/1.1\r\n{hdrs}\r\n");
    Request::parse_head(raw.as_bytes()).unwrap()
}

#[test]
fn test_session_round_trip() {
    let dir = std::env::temp_dir().join(format!("auth_test_{}", std::process::id()));
    let _ = std::fs::create_dir_all(&dir);
    let db_path = dir.join("session_test.db");
    let path_str = db_path.to_str().unwrap();

    let mut db = BTree::open(path_str).expect("open btree");
    let sid = session::create(&mut db, "test_sub", "test@example.com");
    assert!(!sid.is_empty(), "session_id should not be empty");

    let user = session::get_user(&mut db, &sid);
    assert!(user.is_some(), "should find user by session id");
    assert_eq!(user.as_ref().unwrap().sub, "test_sub");
    assert_eq!(user.as_ref().unwrap().email, "test@example.com");

    let _ = std::fs::remove_dir_all(&dir);
}

#[test]
fn test_extract_session_id_from_cookie() {
    let req = make_request(&[("Cookie", "notes_session=abc123")]);
    assert_eq!(session::extract_session_id(&req), Some("abc123".into()));
}

#[test]
fn test_extract_session_id_from_bearer() {
    let req = make_request(&[("Authorization", "Bearer tok_xyz")]);
    assert_eq!(session::extract_session_id(&req), Some("tok_xyz".into()));
}

#[test]
fn test_extract_session_id_missing() {
    let req = make_request(&[("Content-Type", "text/plain")]);
    assert_eq!(session::extract_session_id(&req), None);
}

#[test]
fn test_extract_session_id_ignores_other_cookies() {
    let req = make_request(&[("Cookie", "other=val; notes_session=sid456")]);
    assert_eq!(session::extract_session_id(&req), Some("sid456".into()));
}

#[test]
fn test_extract_session_id_empty_cookie_value() {
    let req = make_request(&[("Cookie", "notes_session=")]);
    assert_eq!(session::extract_session_id(&req), None);
}