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));
}