tovuk 0.1.107

Use Tovuk scraper APIs from a native CLI.
use super::pricing_payload;

#[test]
fn pricing_payload_keeps_public_plan_contract() -> Result<(), Box<dyn std::error::Error>> {
    let payload = pricing_payload();

    if payload["plans"][0]["plan"] != "plus" {
        return Err(format!("unexpected plans: {}", payload["plans"]).into());
    }
    if payload["plans"][1]["includedBalanceUsdCents"] != 12000 {
        return Err(format!("unexpected Pro plan: {}", payload["plans"][1]).into());
    }
    if payload["plans"][2]["bonusBalanceUsdCents"] != 10000 {
        return Err(format!("unexpected Max plan: {}", payload["plans"][2]).into());
    }
    Ok(())
}

#[test]
fn pricing_payload_keeps_public_scraper_prices() -> Result<(), Box<dyn std::error::Error>> {
    let payload = pricing_payload();

    let prices = payload["scraperPrices"]
        .as_array()
        .ok_or("scraperPrices must be an array")?;
    let tiktok = prices
        .iter()
        .find(|price| price["scraper"] == "tiktok")
        .ok_or("missing TikTok price")?;
    if tiktok["usdMicrosPerResult"] != 1700 {
        return Err(format!("unexpected TikTok price: {tiktok}").into());
    }
    if payload["nextActions"].as_array().is_none_or(Vec::is_empty) {
        return Err("nextActions must be non-empty".into());
    }
    Ok(())
}