diff --git a/Cargo.lock b/Cargo.lock index acac00e..dc569f7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -96,6 +96,15 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", +] + [[package]] name = "diesel" version = "2.1.6" @@ -107,7 +116,10 @@ dependencies = [ "chrono", "diesel_derives", "itoa", + "libsqlite3-sys", + "pq-sys", "serde_json", + "time", ] [[package]] @@ -358,6 +370,12 @@ dependencies = [ "include_dir", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-traits" version = "0.2.19" @@ -385,6 +403,21 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "pq-sys" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31c0052426df997c0cbd30789eb44ca097e3541717a7b8fa36b1c464ee7edebd" +dependencies = [ + "vcpkg", +] + [[package]] name = "pretty_assertions" version = "1.4.0" @@ -530,6 +563,37 @@ dependencies = [ "syn 2.0.66", ] +[[package]] +name = "time" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "unicode-ident" version = "1.0.12" diff --git a/ft-sdk/Cargo.toml b/ft-sdk/Cargo.toml index 8128f8a..2b5f1d4 100644 --- a/ft-sdk/Cargo.toml +++ b/ft-sdk/Cargo.toml @@ -16,6 +16,7 @@ sqlite-default = ["sqlite"] sqlite = ["ft-sys/sqlite", "diesel"] auth-provider = [] field-extractors = [] +test = ["diesel/sqlite", "diesel/postgres"] [dependencies] anyhow.workspace = true diff --git a/ft-sdk/src/auth/schema.rs b/ft-sdk/src/auth/schema.rs index c632e49..fe7f402 100644 --- a/ft-sdk/src/auth/schema.rs +++ b/ft-sdk/src/auth/schema.rs @@ -1,3 +1,4 @@ +#[cfg(not(feature = "test"))] diesel::table! { use diesel::sql_types::*; @@ -11,6 +12,20 @@ diesel::table! { } } +#[cfg(feature = "test")] +diesel::table! { + use diesel::sql_types::*; + + fastn_user (id) { + id -> Int8, + name -> Nullable, + identity -> Nullable, + data -> Text, + created_at -> Int8, + updated_at -> Int8, + } +} + diesel::table! { use diesel::sql_types::*; diff --git a/ft-sdk/src/lib.rs b/ft-sdk/src/lib.rs index 50c030a..d4a4478 100644 --- a/ft-sdk/src/lib.rs +++ b/ft-sdk/src/lib.rs @@ -43,12 +43,21 @@ pub type FormError = std::collections::HashMap; #[cfg(all(feature = "sqlite-default", feature = "postgres-default"))] compile_error!("Both sqlite and postgres features are enabled. Only one should be enabled."); -#[cfg(feature = "sqlite-default")] +#[cfg(any(feature = "sqlite-default", not(feature = "test")))] pub type Connection = SqliteConnection; -#[cfg(feature = "postgres-default")] +#[cfg(any(feature = "postgres-default", not(feature = "test")))] pub type Connection = PgConnection; +#[cfg(feature = "test")] +pub type Connection = diesel::sqlite::SqliteConnection; + +#[cfg(feature = "test")] +pub fn default_connection() -> Result { + use diesel::prelude::*; + Ok(diesel::sqlite::SqliteConnection::establish(":memory:").unwrap()) +} + #[cfg(any(feature = "sqlite-default", feature = "postgres-default"))] pub fn default_connection() -> Result { #[cfg(feature = "sqlite-default")]