From 7358f5235b658c5a1f07447ae1f8712df7a64637 Mon Sep 17 00:00:00 2001 From: Alex Whitney Date: Thu, 10 Nov 2022 14:29:40 +0000 Subject: [PATCH] Check in remote-type test --- tests/src/pg_remote_type.rs | 56 +++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 tests/src/pg_remote_type.rs diff --git a/tests/src/pg_remote_type.rs b/tests/src/pg_remote_type.rs new file mode 100644 index 0000000..06acaa2 --- /dev/null +++ b/tests/src/pg_remote_type.rs @@ -0,0 +1,56 @@ +use crate::common::*; +use diesel::prelude::*; + +#[cfg(feature = "postgres")] +#[derive(diesel::sql_types::SqlType)] +#[diesel(postgres_type(name = "my_remoate_enum"))] +pub struct MyRemoteEnumMapping; + +table! { + use diesel::sql_types::Integer; + use super::MyRemoteEnumMapping; + test_remote { + id -> Integer, + my_enum -> MyRemoteEnumMapping, + } +} + +#[derive(Insertable, Queryable, Identifiable, Debug, Clone, PartialEq)] +#[diesel(table_name = test_remote)] +struct Data { + id: i32, + my_enum: MyRemoteEnum +} + + +#[derive(Debug, PartialEq, Clone, diesel_derive_enum::DbEnum)] +#[ExistingTypePath = "MyRemoteEnumMapping"] +pub enum MyRemoteEnum { + This, + That +} + +#[test] +fn enum_round_trip() { + let connection = &mut get_connection(); + use diesel::connection::SimpleConnection; + + connection.batch_execute( + r#" + CREATE TYPE my_remote_enum AS ENUM ('foo', 'bar', 'baz_quxx'); + CREATE TABLE test_remote ( + id SERIAL PRIMARY KEY, + my_enum my_remote_enum NOT NULL + ); + "#, + ) + .unwrap(); + + create_table(connection); + let data = Data { id: 123, my_enum: MyRemoteEnum::This }; + let res = diesel::insert_into(test_remote::table) + .values(&data) + .get_result(connection) + .unwrap(); + assert_eq!(data, res); +}