From 95ba0fca33cb98fd241ceb020cd91ebf28698443 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alja=C5=BE=20Mur=20Er=C5=BEen?= Date: Thu, 18 Apr 2024 16:21:49 +0200 Subject: [PATCH] Add a test for json Inspired by #316 --- edgedb-tokio/tests/func/client.rs | 38 +++++++++++++++++++++- edgedb-tokio/tests/func/dbschema/test.esdl | 7 ++++ edgedb-tokio/tests/func/server.rs | 4 +-- 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/edgedb-tokio/tests/func/client.rs b/edgedb-tokio/tests/func/client.rs index 532f40ba..4e50b09c 100644 --- a/edgedb-tokio/tests/func/client.rs +++ b/edgedb-tokio/tests/func/client.rs @@ -1,8 +1,9 @@ use edgedb_protocol::named_args; use edgedb_protocol::value::{EnumValue, Value}; -use edgedb_tokio::Client; +use edgedb_tokio::{Client, Queryable}; use edgedb_errors::NoDataError; use futures_util::stream::{self, StreamExt}; +use serde::{Deserialize, Serialize}; use crate::server::SERVER; @@ -110,3 +111,38 @@ async fn parallel_queries() -> anyhow::Result<()> { Ok(()) } + +#[tokio::test] +async fn json() -> anyhow::Result<()> { + let client = Client::new(&SERVER.config); + client.ensure_connected().await?; + + client.execute::<_>( + "insert test::OtpPhoneRequest { + phone := '0123456789', + sent_at := datetime_of_statement(), + otp := 98271 + }", + &() + ) + .await + .unwrap(); + + #[derive(Clone, Debug, Serialize, Deserialize, Queryable)] + #[edgedb(json)] + pub struct OtpPhoneRequest { + pub phone: String, + pub otp: i32, + } + + let res = client.query::( + "select (select test::OtpPhoneRequest { phone, otp } filter .phone = '0123456789')", + &() + ) + .await?; + let res = res.into_iter().next().unwrap(); + assert_eq!(res.phone, "0123456789"); + assert_eq!(res.otp, 98271); + + Ok(()) +} diff --git a/edgedb-tokio/tests/func/dbschema/test.esdl b/edgedb-tokio/tests/func/dbschema/test.esdl index 9e8cebc1..91123edf 100644 --- a/edgedb-tokio/tests/func/dbschema/test.esdl +++ b/edgedb-tokio/tests/func/dbschema/test.esdl @@ -12,4 +12,11 @@ module test { global str_val -> str; global int_val -> int32; + + type OtpPhoneRequest { + required phone: str; + required otp: int32; + required sent_at: datetime; + confirmed_at: datetime; + } } diff --git a/edgedb-tokio/tests/func/server.rs b/edgedb-tokio/tests/func/server.rs index fa546ad1..dd0e96a2 100644 --- a/edgedb-tokio/tests/func/server.rs +++ b/edgedb-tokio/tests/func/server.rs @@ -155,9 +155,7 @@ fn wait_for_server_status(status_read: i32) -> Result /// Writes a stream to a log file fn write_log_into_file(stream: impl std::io::Read) { - let target_tmp_dir = std::env::var("CARGO_TARGET_TMPDIR").unwrap(); - let mut log_dir = std::path::PathBuf::from_str(&target_tmp_dir).unwrap(); - log_dir.push("server-logs"); + let log_dir = std::path::PathBuf::from_str("../target/server-logs").unwrap(); let time_the_epoch = std::time::SystemTime::now() .duration_since(std::time::SystemTime::UNIX_EPOCH)