use super::test_file::{GoTestFileContext, render_test_file};
use crate::e2e::config::{CallConfig, E2eConfig};
use crate::e2e::fixture::{Assertion, Fixture};
fn e2e_config() -> E2eConfig {
E2eConfig {
call: CallConfig {
function: "chat".to_string(),
module: "github.com/example/mylib".to_string(),
result_var: "result".to_string(),
returns_result: true,
result_is_simple: true,
..CallConfig::default()
},
..E2eConfig::default()
}
}
fn mock_assertion(field: &str, assertion_type: &str, value: serde_json::Value) -> Assertion {
Assertion {
assertion_type: assertion_type.to_string(),
field: Some(field.to_string()),
value: Some(value),
..Default::default()
}
}
fn render(assertions: Vec<Assertion>) -> String {
let fixture = Fixture {
id: "mock_capture_fixture".to_string(),
description: "asserts against the mock server request log".to_string(),
input: serde_json::Value::Null,
assertions,
..Fixture::default()
};
let config = crate::core::config::ResolvedCrateConfig::default();
let type_defs: Vec<crate::core::ir::TypeDef> = Vec::new();
let enums: Vec<crate::core::ir::EnumDef> = Vec::new();
let errors: Vec<crate::core::ir::ErrorDef> = Vec::new();
let e2e_config = e2e_config();
render_test_file(
"mock_capture",
&[&fixture],
GoTestFileContext {
go_module_path: "github.com/example/mylib",
import_alias: "sample_crate",
e2e_config: &e2e_config,
adapters: &[],
data_enum_names: &std::collections::HashSet::new(),
config: &config,
type_defs: &type_defs,
enums: &enums,
errors: &errors,
functions: &[],
crate_facts: None,
},
)
}
#[test]
fn a_mock_assertion_gets_both_its_call_and_the_helper_definition_in_one_file() {
let out = render(vec![
mock_assertion("mock.requests.total", "equals", serde_json::json!(1)),
mock_assertion(
r#"mock.requests["POST /v1/chat"]"#,
"greater_than_or_equal",
serde_json::json!(1),
),
]);
assert!(
out.contains(
"\t\tv := alefMockRequestCount(os.Getenv(\"MOCK_SERVER_URL\"), \"/__alef/requests/total?prefix=\")\n\t\tif v != 1 {"
),
"expected the total-count call, got:\n{out}"
);
assert!(
out.contains(
"\t\tv := alefMockRequestCount(os.Getenv(\"MOCK_SERVER_URL\"), \"/__alef/requests/one?key=POST%20%2Fv1%2Fchat\")\n\t\tif v < 1 {"
),
"expected the bracketed-key call, got:\n{out}"
);
assert!(
out.contains("func alefMockRequestCount(baseURL, pathAndQuery string) int {"),
"expected the helper definition in the same file as the call, got:\n{out}"
);
for import in ["\"os\"", "\"net/http\"", "\"io\"", "\"strconv\""] {
assert!(out.contains(import), "expected the {import} import, got:\n{out}");
}
}
#[test]
fn a_file_with_no_mock_assertion_defines_no_helper() {
let out = render(vec![Assertion {
assertion_type: "not_error".to_string(),
..Default::default()
}]);
assert!(
!out.contains("alefMockRequestCount"),
"a file with no mock.* assertion must not reference or define the helper, got:\n{out}"
);
assert!(
!out.contains("\"strconv\""),
"strconv has no other caller in this backend, got:\n{out}"
);
}