Files
tuono/crates/tuono/tests/utils/mock_github_endpoint.rs
T
2025-02-23 11:06:06 +01:00

102 lines
3.2 KiB
Rust

use clap::crate_version;
use std::env;
use wiremock::matchers::{method, path};
use wiremock::{Mock, MockServer, ResponseTemplate};
#[allow(dead_code)]
pub struct GitHubServerMock {
pub server: MockServer,
pub env_vars: Vec<(String, String)>,
}
#[allow(dead_code)]
impl GitHubServerMock {
pub async fn new() -> Self {
let server = MockServer::start().await;
let tuono_version = crate_version!();
let sha = "1234567890abcdef";
let sha_response_template = ResponseTemplate::new(200).set_body_raw(
format!("{{ \"object\": {{ \"sha\": \"{sha}\" }} }}"),
"application/json",
);
Mock::given(method("GET"))
.and(path(&format!(
"repos/tuono-labs/tuono/git/ref/tags/v{}",
tuono_version
)))
.respond_with(sha_response_template)
.mount(&server)
.await;
let tree_response_template = ResponseTemplate::new(200).set_body_raw(
r#"{
"tree": [
{
"path": "examples/tuono-app/src",
"type": "tree"
},
{
"path": "examples/tuono-app/src/main.rs",
"type": "blob"
},
{
"path": "examples/tuono-app/Cargo.toml",
"type": "blob"
},
{
"path": "examples/tuono-app/package.json",
"type": "blob"
}
]
}"#,
"application/json",
);
Mock::given(method("GET"))
.and(path(&format!("repos/tuono-labs/tuono/git/trees/{}", sha)))
.respond_with(tree_response_template)
.mount(&server)
.await;
let file_response_template =
|content: &str| ResponseTemplate::new(200).set_body_raw(content, "text/plain");
Mock::given(method("GET"))
.and(path(format!(
"tuono-labs/tuono/v{tuono_version}/examples/tuono-app/src/main.rs"
)))
.respond_with(file_response_template(
"fn main() { println!(\"Hello, world!\"); }",
))
.mount(&server)
.await;
Mock::given(method("GET"))
.and(path(format!(
"tuono-labs/tuono/v{tuono_version}/examples/tuono-app/Cargo.toml"
)))
.respond_with(file_response_template(
"[package] name = \"tuono-tutorial\" [dependencies] tuono_lib = { path = \"../../crates/tuono_lib/\" }"
))
.mount(&server)
.await;
Mock::given(method("GET"))
.and(path(format!(
"tuono-labs/tuono/v{tuono_version}/examples/tuono-app/package.json"
)))
.respond_with(file_response_template(
r#"{"name": "tuono-app", "dependencies": { "tuono": "link:../../packages/tuono" }}"#,
))
.mount(&server)
.await;
let env_vars = vec![("__INTERNAL_TUONO_TEST".to_string(), server.uri())];
GitHubServerMock { server, env_vars }
}
}