mod fixtures;
use amalgam_codegen::{nickel::NickelCodegen, Codegen};
use amalgam_parser::{crd::CRDParser, package::PackageGenerator, Parser};
use fixtures::Fixtures;
use insta::assert_snapshot;
#[test]
fn test_snapshot_simple_crd() {
let crd = Fixtures::simple_with_metadata();
let parser = CRDParser::new();
let ir = parser.parse(crd).expect("Failed to parse CRD");
let mut codegen = NickelCodegen::new();
let generated = codegen
.generate(&ir)
.expect("Failed to generate Nickel code");
assert_snapshot!("simple_crd_nickel", generated);
}
#[test]
fn test_snapshot_crd_with_k8s_imports() {
let crd = Fixtures::simple_with_metadata();
let parser = CRDParser::new();
let ir = parser.parse(crd.clone()).expect("Failed to parse CRD");
let mut package = PackageGenerator::new(
"test-package".to_string(),
std::path::PathBuf::from("/tmp/test"),
);
package.add_crd(crd);
let generated_package = package
.generate_package()
.expect("Failed to generate package");
let content = generated_package
.generate_kind_file("test.io", "v1", "simple")
.unwrap_or_else(|| {
let mut codegen = NickelCodegen::new();
codegen.generate(&ir).expect("Failed to generate")
});
assert_snapshot!("simple_with_k8s_imports", content);
}
#[test]
fn test_snapshot_multiple_k8s_refs() {
let crd = Fixtures::multiple_k8s_refs();
let parser = CRDParser::new();
let ir = parser.parse(crd).expect("Failed to parse CRD");
let mut codegen = NickelCodegen::new();
let content = codegen.generate(&ir).expect("Failed to generate");
assert_snapshot!("multiple_k8s_refs_nickel", content);
}
#[test]
fn test_snapshot_nested_objects() {
let crd = Fixtures::nested_objects();
let parser = CRDParser::new();
let ir = parser.parse(crd).expect("Failed to parse CRD");
let mut codegen = NickelCodegen::new();
let generated = codegen.generate(&ir).expect("Failed to generate");
assert_snapshot!("nested_objects_nickel", generated);
}
#[test]
fn test_snapshot_arrays() {
let crd = Fixtures::with_arrays();
let parser = CRDParser::new();
let ir = parser.parse(crd).expect("Failed to parse CRD");
let mut codegen = NickelCodegen::new();
let content = codegen.generate(&ir).expect("Failed to generate");
assert_snapshot!("arrays_nickel", content);
}
#[test]
fn test_snapshot_validation() {
let crd = Fixtures::with_validation();
let parser = CRDParser::new();
let ir = parser.parse(crd).expect("Failed to parse CRD");
let mut codegen = NickelCodegen::new();
let generated = codegen.generate(&ir).expect("Failed to generate");
assert_snapshot!("validation_nickel", generated);
}
#[test]
fn test_snapshot_multi_version() {
let crd = Fixtures::multi_version();
let parser = CRDParser::new();
let ir = parser.parse(crd).expect("Failed to parse CRD");
let mut codegen = NickelCodegen::new();
let all_versions = codegen.generate(&ir).expect("Failed to generate");
assert_snapshot!("multi_version_all", all_versions);
}
#[test]
fn test_snapshot_ir_structure() {
let crd = Fixtures::simple_with_metadata();
let parser = CRDParser::new();
let ir = parser.parse(crd).expect("Failed to parse CRD");
assert_snapshot!("simple_crd_ir", format!("{:#?}", ir));
}
#[test]
fn test_snapshot_package_structure() {
let mut package = PackageGenerator::new(
"test-package".to_string(),
std::path::PathBuf::from("/tmp/test"),
);
package.add_crd(Fixtures::simple_with_metadata());
package.add_crd(Fixtures::with_arrays());
package.add_crd(Fixtures::multi_version());
let ns_package = package
.generate_package()
.expect("Failed to generate package");
let main_module = ns_package.generate_main_module();
assert_snapshot!("package_structure_main", main_module);
}