diff --git a/wundergraph_cli/Cargo.toml b/wundergraph_cli/Cargo.toml index f13bf2e..ae1cdfb 100644 --- a/wundergraph_cli/Cargo.toml +++ b/wundergraph_cli/Cargo.toml @@ -17,7 +17,7 @@ diesel = "1.4" [dev-dependencies] dotenv = "0.15" -insta = "0.12" +insta = { version = "0.16", features = ["backtrace"] } tempdir = "0.3" reqwest = "0.9" serde_json = "1" diff --git a/wundergraph_cli/src/infer_schema_internals/sqlite.rs b/wundergraph_cli/src/infer_schema_internals/sqlite.rs index e59890f..0565503 100644 --- a/wundergraph_cli/src/infer_schema_internals/sqlite.rs +++ b/wundergraph_cli/src/infer_schema_internals/sqlite.rs @@ -277,7 +277,7 @@ fn load_table_names_returns_error_when_given_schema_name() { let table_names = load_table_names(&conn, Some("stuff")); match table_names { Ok(_) => panic!("Expected load_table_names to return an error"), - Err(e) => assert!(e.description().starts_with( + Err(e) => assert!(e.to_string().starts_with( "sqlite cannot infer \ schema for databases" )), diff --git a/wundergraph_cli/src/print_schema/mod.rs b/wundergraph_cli/src/print_schema/mod.rs index cbb2362..e906a06 100644 --- a/wundergraph_cli/src/print_schema/mod.rs +++ b/wundergraph_cli/src/print_schema/mod.rs @@ -82,6 +82,12 @@ mod tests { } } + #[cfg(feature = "postgres")] + const BACKEND: &str = "postgres"; + + #[cfg(feature = "sqlite")] + const BACKEND: &str = "sqlite"; + #[cfg(feature = "postgres")] const MIGRATION: &[&str] = &[ "CREATE SCHEMA infer_test;", @@ -151,7 +157,9 @@ mod tests { print(&conn, None, &mut out).unwrap(); let s = String::from_utf8(out).unwrap(); - insta::assert_snapshot!(&s); + insta::with_settings!({snapshot_suffix => BACKEND}, { + insta::assert_snapshot!("infer_schema", &s); + }); } #[test] @@ -311,41 +319,45 @@ mod tests { std::thread::sleep(std::time::Duration::from_secs(1)); let query = "{\"query\": \"{ Users { id name } } \"}"; - let mut r = client - .post(&format!("http://{}/graphql", listen_url)) - .body(query) - .header( - reqwest::header::CONTENT_TYPE, - reqwest::header::HeaderValue::from_static("application/json"), - ) - .send() - .unwrap(); - insta::assert_json_snapshot!(r.json::().unwrap()); - let mutation = r#"{"query":"mutation CreateUser {\n CreateUser(NewUser: {name: \"Max\"}) {\n id\n name\n }\n}","variables":null,"operationName":"CreateUser"}"#; - let mut r = client - .post(&format!("http://{}/graphql", listen_url)) - .body(mutation) - .header( - reqwest::header::CONTENT_TYPE, - reqwest::header::HeaderValue::from_static("application/json"), - ) - .send() - .unwrap(); - insta::assert_json_snapshot!(r.json::().unwrap()); + let t1 = request_test(&client, &listen_url, query, "round_trip_test__query_1"); + let t2 = request_test(&client, &listen_url, mutation, "round_trip_test__mutation"); + let t3 = request_test(&client, &listen_url, query, "round_trip_test__query_2"); + + child.kill().unwrap(); + child.wait().unwrap(); + + t1.unwrap(); + t2.unwrap(); + t3.unwrap(); + } + + fn request_test( + client: &reqwest::Client, + listen_url: &str, + body: &'static str, + snapshot_name: &'static str, + ) -> Result<(), String> { + fn error_mapper(e: T) -> String { + format!("{:?}", e) + } let mut r = client .post(&format!("http://{}/graphql", listen_url)) - .body(query) + .body(body) .header( reqwest::header::CONTENT_TYPE, reqwest::header::HeaderValue::from_static("application/json"), ) .send() - .unwrap(); - insta::assert_json_snapshot!(r.json::().unwrap()); - - child.kill().unwrap(); - child.wait().unwrap(); + .map_err(error_mapper)?; + let r = r.json::().map_err(error_mapper)?; + std::panic::catch_unwind(|| { + insta::with_settings!({snapshot_suffix => ""}, { + insta::assert_json_snapshot!(snapshot_name, r) + }) + }) + .map_err(error_mapper)?; + Ok(()) } } diff --git a/wundergraph_cli/src/print_schema/print_helper.rs b/wundergraph_cli/src/print_schema/print_helper.rs index c066b28..16636a3 100644 --- a/wundergraph_cli/src/print_schema/print_helper.rs +++ b/wundergraph_cli/src/print_schema/print_helper.rs @@ -475,7 +475,16 @@ impl<'a> Display for GraphqlInsertable<'a> { { let mut out = PadAdapter::new(f); writeln!(out)?; - for c in self.table.column_data.iter().filter(|c| !c.has_default) { + for c in self.table.column_data.iter().filter(|c| { + !c.has_default + && self + .table + .primary_key + .iter() + .filter(|x| **x == c.sql_name) + .count() + == 0 + }) { let t = GraphqlType { sql_type: &c.ty, allow_option: true, diff --git a/wundergraph_cli/src/print_schema/snapshots/tests__main-3.snap b/wundergraph_cli/src/print_schema/snapshots/tests__main-3.snap deleted file mode 100644 index 8380f59..0000000 --- a/wundergraph_cli/src/print_schema/snapshots/tests__main-3.snap +++ /dev/null @@ -1,17 +0,0 @@ ---- -source: wundergraph_cli/src/print_schema/mod.rs -expression: "r.json::().unwrap()" ---- -{ - "errors": [ - { - "locations": [ - { - "column": 23, - "line": 2 - } - ], - "message": "Invalid value for argument \"NewUser\", expected type \"NewUser!\"" - } - ] -} diff --git a/wundergraph_cli/src/print_schema/snapshots/tests__main-4.snap b/wundergraph_cli/src/print_schema/snapshots/tests__main-4.snap deleted file mode 100644 index 9e80d0f..0000000 --- a/wundergraph_cli/src/print_schema/snapshots/tests__main-4.snap +++ /dev/null @@ -1,9 +0,0 @@ ---- -source: wundergraph_cli/src/print_schema/mod.rs -expression: "r.json::().unwrap()" ---- -{ - "data": { - "Users": [] - } -} diff --git a/wundergraph_cli/src/print_schema/snapshots/tests__round_trip.snap b/wundergraph_cli/src/print_schema/snapshots/tests__round_trip.snap deleted file mode 100644 index 9e80d0f..0000000 --- a/wundergraph_cli/src/print_schema/snapshots/tests__round_trip.snap +++ /dev/null @@ -1,9 +0,0 @@ ---- -source: wundergraph_cli/src/print_schema/mod.rs -expression: "r.json::().unwrap()" ---- -{ - "data": { - "Users": [] - } -} diff --git a/wundergraph_cli/src/print_schema/snapshots/tests__infer_schema.snap b/wundergraph_cli/src/print_schema/snapshots/wundergraph_cli__print_schema__tests__infer_schema@postgres.snap similarity index 100% rename from wundergraph_cli/src/print_schema/snapshots/tests__infer_schema.snap rename to wundergraph_cli/src/print_schema/snapshots/wundergraph_cli__print_schema__tests__infer_schema@postgres.snap diff --git a/wundergraph_cli/src/print_schema/snapshots/tests__main.snap b/wundergraph_cli/src/print_schema/snapshots/wundergraph_cli__print_schema__tests__infer_schema@sqlite.snap similarity index 98% rename from wundergraph_cli/src/print_schema/snapshots/tests__main.snap rename to wundergraph_cli/src/print_schema/snapshots/wundergraph_cli__print_schema__tests__infer_schema@sqlite.snap index 1360c87..76c8a6c 100644 --- a/wundergraph_cli/src/print_schema/snapshots/tests__main.snap +++ b/wundergraph_cli/src/print_schema/snapshots/wundergraph_cli__print_schema__tests__infer_schema@sqlite.snap @@ -86,7 +86,6 @@ wundergraph::query_object!{ #[graphql(scalar = "WundergraphScalarValue")] #[table_name = "comments"] pub struct NewComment { - id: i32, post: Option, commenter: Option, content: String, @@ -107,7 +106,6 @@ pub struct CommentChangeset { #[graphql(scalar = "WundergraphScalarValue")] #[table_name = "posts"] pub struct NewPost { - id: i32, author: Option, title: String, datetime: Option, @@ -130,7 +128,6 @@ pub struct PostChangeset { #[graphql(scalar = "WundergraphScalarValue")] #[table_name = "users"] pub struct NewUser { - id: i32, name: String, } diff --git a/wundergraph_cli/src/print_schema/snapshots/tests__round_trip-2.snap b/wundergraph_cli/src/print_schema/snapshots/wundergraph_cli__print_schema__tests__round_trip_test__mutation.snap similarity index 72% rename from wundergraph_cli/src/print_schema/snapshots/tests__round_trip-2.snap rename to wundergraph_cli/src/print_schema/snapshots/wundergraph_cli__print_schema__tests__round_trip_test__mutation.snap index 50cf6c3..20afe47 100644 --- a/wundergraph_cli/src/print_schema/snapshots/tests__round_trip-2.snap +++ b/wundergraph_cli/src/print_schema/snapshots/wundergraph_cli__print_schema__tests__round_trip_test__mutation.snap @@ -1,6 +1,6 @@ --- source: wundergraph_cli/src/print_schema/mod.rs -expression: "r.json::().unwrap()" +expression: r --- { "data": { diff --git a/wundergraph_cli/src/print_schema/snapshots/tests__main-2.snap b/wundergraph_cli/src/print_schema/snapshots/wundergraph_cli__print_schema__tests__round_trip_test__query_1.snap similarity index 63% rename from wundergraph_cli/src/print_schema/snapshots/tests__main-2.snap rename to wundergraph_cli/src/print_schema/snapshots/wundergraph_cli__print_schema__tests__round_trip_test__query_1.snap index 9e80d0f..c278b99 100644 --- a/wundergraph_cli/src/print_schema/snapshots/tests__main-2.snap +++ b/wundergraph_cli/src/print_schema/snapshots/wundergraph_cli__print_schema__tests__round_trip_test__query_1.snap @@ -1,6 +1,6 @@ --- source: wundergraph_cli/src/print_schema/mod.rs -expression: "r.json::().unwrap()" +expression: r --- { "data": { diff --git a/wundergraph_cli/src/print_schema/snapshots/tests__round_trip-3.snap b/wundergraph_cli/src/print_schema/snapshots/wundergraph_cli__print_schema__tests__round_trip_test__query_2.snap similarity index 74% rename from wundergraph_cli/src/print_schema/snapshots/tests__round_trip-3.snap rename to wundergraph_cli/src/print_schema/snapshots/wundergraph_cli__print_schema__tests__round_trip_test__query_2.snap index d61d514..1705213 100644 --- a/wundergraph_cli/src/print_schema/snapshots/tests__round_trip-3.snap +++ b/wundergraph_cli/src/print_schema/snapshots/wundergraph_cli__print_schema__tests__round_trip_test__query_2.snap @@ -1,6 +1,6 @@ --- source: wundergraph_cli/src/print_schema/mod.rs -expression: "r.json::().unwrap()" +expression: r --- { "data": {