tovuk 0.1.107

Use Tovuk scraper APIs from a native CLI.
use serde_json::{Value, json};

use super::{login_started_payload, login_success_payload};

#[test]
fn login_started_payload_is_agent_readable_without_standalone_device_code() {
    let start = json!({
        "loginUrl": "https://tovuk.com/login?device_code=secret",
        "verificationUri": "https://tovuk.com/login",
        "userCode": "TOVUK-123",
        "deviceCode": "secret-device-code",
        "expiresInSeconds": 900,
        "intervalSeconds": 2
    });

    let payload = login_started_payload(
        &start,
        "https://tovuk.com/login?device_code=secret",
        Some("TOVUK-123"),
        900,
        2,
    );

    assert_eq!(payload["event"], "login_started");
    assert_eq!(payload["status"], "waiting_for_browser_login");
    assert_eq!(
        payload["login_url"],
        "https://tovuk.com/login?device_code=secret"
    );
    assert_eq!(payload["verification_uri"], "https://tovuk.com/login");
    assert_eq!(payload["user_code"], "TOVUK-123");
    assert_eq!(payload["expires_in_seconds"], 900);
    assert_eq!(payload["poll_interval_seconds"], 2);
    assert!(payload.get("agent_instruction").is_some());
    assert!(payload.get("deviceCode").is_none());
    assert!(payload.get("device_code").is_none());
}

#[test]
fn login_started_payload_uses_required_timing_values() {
    let payload = login_started_payload(&json!({}), "https://tovuk.com/login", None, 900, 2);

    assert_eq!(payload["verification_uri"], Value::Null);
    assert_eq!(payload["user_code"], Value::Null);
    assert_eq!(payload["expires_in_seconds"], 900);
    assert_eq!(payload["poll_interval_seconds"], 2);
}

#[test]
fn login_success_payload_excludes_session_token() {
    let payload = login_success_payload("logged_in", Some("ada@example.com"));

    assert_eq!(payload["ok"], true);
    assert_eq!(payload["status"], "logged_in");
    assert_eq!(payload["email"], "ada@example.com");
    assert!(payload.get("token").is_none());
}