From 19b46b6cf04ff3cff49047699dea20ca784c5536 Mon Sep 17 00:00:00 2001 From: kjuulh Date: Sat, 11 Feb 2023 15:23:41 +0100 Subject: [PATCH] add tests --- crates/dagger-codegen/src/handlers/fields.rs | 28 +++----- crates/dagger-codegen/src/handlers/input.rs | 10 +-- crates/dagger-codegen/src/handlers/object.rs | 71 +++++++++++++++++--- 3 files changed, 75 insertions(+), 34 deletions(-) diff --git a/crates/dagger-codegen/src/handlers/fields.rs b/crates/dagger-codegen/src/handlers/fields.rs index d02121a..93fd614 100644 --- a/crates/dagger-codegen/src/handlers/fields.rs +++ b/crates/dagger-codegen/src/handlers/fields.rs @@ -19,30 +19,24 @@ pub fn render_fields(fields: &Vec) -> eyre::Result $(&args.args)) + $(if let Some(_) = args.as_ref() => args: $(&name)Args) ) -> $(&output) { - let query = self.selection.select("$(field.name.as_ref())"); - - let query = query.arg("args", args).unwrap(); + let query = self.selection.select($(field.name.as_ref().map(|n| format!("\"{}\"", n)))); + $(if let Some(_) = args.as_ref() => query.args(args);) $output { conn: self.conn.clone(), diff --git a/crates/dagger-codegen/src/handlers/input.rs b/crates/dagger-codegen/src/handlers/input.rs index c661ae0..9d16578 100644 --- a/crates/dagger-codegen/src/handlers/input.rs +++ b/crates/dagger-codegen/src/handlers/input.rs @@ -96,15 +96,11 @@ mod tests { fields: None, }; - let expected = r#"use dagger_core::Input; + let expected = r#"pub struct BuildArg { + pub name: String, -pub struct BuildArg { - pub name: Option, - - pub value: Option, + pub value: String, } - -impl Input for BuildArg {} "#; let output = input.render(&t).unwrap(); diff --git a/crates/dagger-codegen/src/handlers/object.rs b/crates/dagger-codegen/src/handlers/object.rs index 0c88fd5..67863ae 100644 --- a/crates/dagger-codegen/src/handlers/object.rs +++ b/crates/dagger-codegen/src/handlers/object.rs @@ -19,8 +19,6 @@ impl Handler for Object { .ok_or(eyre::anyhow!("could not find name"))?; let description = render_description(t); - let input = rust::import("dagger_core", "Input"); - let fields = match t.fields.as_ref() { Some(i) => fields::render_fields(i)?, None => None, @@ -40,8 +38,6 @@ impl Handler for Object { impl $name { $(if fields.is_some() => $fields) } - - impl $input for $name {} }; Ok(out) @@ -51,7 +47,8 @@ impl Handler for Object { #[cfg(test)] mod tests { use dagger_core::introspection::{ - FullType, FullTypeFields, FullTypeFieldsType, TypeRef, __TypeKind, + FullType, FullTypeFields, FullTypeFieldsArgs, FullTypeFieldsType, InputValue, TypeRef, + __TypeKind, }; use pretty_assertions::assert_eq; @@ -88,21 +85,75 @@ mod tests { enum_values: None, possible_types: None, }; - let expected = r#"use dagger_core::Input; - - + let expected = r#" /// A directory whose contents persists across sessions pub struct CacheVolume {} impl CacheVolume { pub fn id( &self, - ) -> Option { + ) -> CacheID { + let query = self.selection.select("id"); + + CacheID { + conn: self.conn.clone(), + proc: self.proc.clone(), + selection: query, + } + todo!() } } +"#; + let handler = Object {}; + let obj = handler.render(&t).unwrap(); + let actual = obj.to_file_string().unwrap(); -impl Input for CacheVolume {} + assert_eq!(actual, expected); + } + + #[test] + fn can_render_query_container() { + let t: FullType = FullType { + kind: Some(__TypeKind::OBJECT), + name: Some("Query".into()), + description: None, + fields: Some(vec![FullTypeFields { + name: Some("container".into()), + description: Some("Loads a container from ID.\nNull ID returns an empty container (scratch).\nOptional platform argument initializes new containers to execute and publish as that platform. Platform defaults to that of the builder's host.".into()), + args: Some(vec![ + Some( + FullTypeFieldsArgs + { + input_value: InputValue { name: "id".into(), description: None, type_: TypeRef { kind: Some(__TypeKind::SCALAR), name: Some("ContainerID".into()), of_type: None }, default_value: None } + }), + Some( + FullTypeFieldsArgs { + input_value: InputValue { + name: "platform".into(), description: None, type_: TypeRef { kind: Some(__TypeKind::SCALAR), name: Some("Platform".into()), of_type: None }, + default_value: None } + }) + ]), + type_: Some(FullTypeFieldsType { + type_ref: TypeRef { + kind: Some(__TypeKind::NON_NULL), + name: None, + of_type: Some(Box::new(TypeRef { + kind: Some(__TypeKind::SCALAR), + name: Some("CacheID".into()), + of_type: None, + })), + }, + }), + is_deprecated: Some(false), + deprecation_reason: None, + }]), + input_fields: None, + interfaces: None, + enum_values: None, + possible_types: None, + }; + let expected = r#" "#; let handler = Object {}; let obj = handler.render(&t).unwrap();