// Copyright 2022 Oxide Computer Company use std::{fs::File, path::PathBuf}; use progenitor_impl::{ GenerationSettings, Generator, InterfaceStyle, TagStyle, }; #[track_caller] fn verify_apis(openapi_file: &str) { let mut in_path = PathBuf::from("../sample_openapi"); in_path.push(format!("{}.json", openapi_file)); let file = File::open(in_path).unwrap(); let spec = serde_json::from_reader(file).unwrap(); let mut generator = Generator::default(); let output = generator.generate_text_normalize_comments(&spec).unwrap(); expectorate::assert_contents( format!("tests/output/{}-positional.out", openapi_file), &output, ); let mut generator = Generator::new( GenerationSettings::default() .with_interface(InterfaceStyle::Builder) .with_tag(TagStyle::Merged) .with_derive("JsonSchema"), ); let output = generator.generate_text_normalize_comments(&spec).unwrap(); expectorate::assert_contents( format!("tests/output/{}-builder.out", openapi_file), &output, ); let mut generator = Generator::new( GenerationSettings::default() .with_interface(InterfaceStyle::Builder) .with_tag(TagStyle::Separate), ); let output = generator.generate_text_normalize_comments(&spec).unwrap(); expectorate::assert_contents( format!("tests/output/{}-builder-tagged.out", openapi_file), &output, ); } #[test] fn test_keeper() { verify_apis("keeper"); } #[test] fn test_buildomat() { verify_apis("buildomat"); } #[test] fn test_nexus() { verify_apis("nexus"); } #[test] fn test_propolis_server() { verify_apis("propolis-server"); } // TODO this file is full of inconsistencies and incorrectly specified types. // It's an interesting test to consider whether we try to do our best to // interpret the intent or just fail. #[ignore] #[test] fn test_github() { verify_apis("api.github.com"); }