browserbase 0.1.0

Rust SDK for Browserbase - cloud browser automation platform
Documentation
use browserbase::Browserbase;
use serde_json::json;
use wiremock::{
    Mock, MockServer, ResponseTemplate,
    matchers::{header, method, path},
};

#[tokio::test]
async fn list_projects_returns_projects() {
    let server = MockServer::start().await;
    let base_url = format!("{}/v1/", server.uri());

    Mock::given(method("GET"))
        .and(path("/v1/projects"))
        .and(header("X-BB-API-Key", "test-key"))
        .respond_with(ResponseTemplate::new(200).set_body_json(json!([
            {"id": "proj_1", "name": "A"},
            {"id": "proj_2", "name": "B"}
        ])))
        .mount(&server)
        .await;

    let bb = Browserbase::builder("test-key")
        .unwrap()
        .base_url(&base_url)
        .unwrap()
        .build()
        .unwrap();

    let projects = bb.projects().list().await.unwrap();
    assert_eq!(projects.len(), 2);
    assert_eq!(projects[0].id, "proj_1");
    assert_eq!(projects[1].id, "proj_2");
}

#[tokio::test]
async fn project_usage_returns_usage() {
    let server = MockServer::start().await;
    let base_url = format!("{}/v1/", server.uri());

    Mock::given(method("GET"))
        .and(path("/v1/projects/proj_1/usage"))
        .and(header("X-BB-API-Key", "test-key"))
        .respond_with(ResponseTemplate::new(200).set_body_json(json!({
            "browserMinutes": 12,
            "proxyBytes": 34
        })))
        .mount(&server)
        .await;

    let bb = Browserbase::builder("test-key")
        .unwrap()
        .base_url(&base_url)
        .unwrap()
        .build()
        .unwrap();

    let usage = bb.projects().usage("proj_1").await.unwrap();
    assert_eq!(usage.browser_minutes, 12);
    assert_eq!(usage.proxy_bytes, 34);
}

#[tokio::test]
async fn get_project_returns_project_details() {
    let server = MockServer::start().await;
    let base_url = format!("{}/v1/", server.uri());

    Mock::given(method("GET"))
        .and(path("/v1/projects/proj_1"))
        .and(header("X-BB-API-Key", "test-key"))
        .respond_with(ResponseTemplate::new(200).set_body_json(json!({
            "id": "proj_1",
            "name": "Test Project",
            "defaultTimeout": 300,
            "concurrency": 1
        })))
        .mount(&server)
        .await;

    let bb = Browserbase::builder("test-key")
        .unwrap()
        .base_url(&base_url)
        .unwrap()
        .build()
        .unwrap();

    let project = bb.projects().get("proj_1").await.unwrap();
    assert_eq!(project.id, "proj_1");
    assert_eq!(project.name.as_deref(), Some("Test Project"));
    assert_eq!(project.default_timeout, Some(300));
}