@@ -26,9 +26,13 @@ use futures::{
2626} ;
2727use macro_rules_attribute:: apply;
2828use tokio:: time:: sleep;
29- use typedb_driver:: { Database , DatabaseManager , Result as TypeDBResult , TypeDBDriver } ;
29+ use typedb_driver:: { Database , DatabaseManager , Result as TypeDBResult , TransactionType , TypeDBDriver } ;
30+ use uuid:: Uuid ;
3031
31- use crate :: { assert_with_timeout, generic_step, in_oneshot_background, params, util:: iter_table, Context } ;
32+ use crate :: {
33+ assert_with_timeout, connection:: transaction:: open_transaction_for_database, generic_step, in_oneshot_background,
34+ params, query:: run_query, util:: iter_table, Context ,
35+ } ;
3236
3337async fn create_database ( driver : & TypeDBDriver , name : String , may_error : params:: MayError ) {
3438 may_error. check ( driver. databases ( ) . create ( name) . await ) ;
@@ -38,6 +42,14 @@ async fn delete_database(driver: &TypeDBDriver, name: &str, may_error: params::M
3842 may_error. check ( driver. databases ( ) . get ( name) . and_then ( Database :: delete) . await ) ;
3943}
4044
45+ async fn database_schema ( driver : & TypeDBDriver , name : & str ) -> String {
46+ driver. databases ( ) . get ( name) . await . expect ( "Expected database" ) . schema ( ) . await . expect ( "Expected schema" )
47+ }
48+
49+ async fn database_type_schema ( driver : & TypeDBDriver , name : & str ) -> String {
50+ driver. databases ( ) . get ( name) . await . expect ( "Expected database" ) . type_schema ( ) . await . expect ( "Expected type schema" )
51+ }
52+
4153async fn has_database ( driver : & TypeDBDriver , name : & str ) -> bool {
4254 driver. databases ( ) . contains ( name. clone ( ) ) . await . unwrap ( )
4355}
@@ -155,3 +167,44 @@ async fn connection_does_not_have_databases(context: &mut Context, step: &Step)
155167 ) ;
156168 }
157169}
170+
171+ async fn create_temporary_database_with_schema ( driver : & TypeDBDriver , schema_query : String ) -> String {
172+ let name = format ! ( "temp-{}" , Uuid :: new_v4( ) ) ;
173+ create_database ( driver, name. clone ( ) , params:: MayError :: False ) . await ;
174+ let transaction = open_transaction_for_database ( driver, & name, TransactionType :: Schema , None )
175+ . await
176+ . expect ( "Expected transaction" ) ;
177+ run_query ( & transaction, & schema_query, None ) . await . expect ( "Expected successful query" ) ;
178+ transaction. commit ( ) . await . expect ( "Expected successful commit" ) ;
179+ name
180+ }
181+
182+ #[ apply( generic_step) ]
183+ #[ step( expr = r"connection get database\({word}\) has schema:" ) ]
184+ async fn connection_get_database_has_schema ( context : & mut Context , name : String , step : & Step ) {
185+ let expected_schema = step. docstring . as_ref ( ) . unwrap ( ) . trim ( ) . to_string ( ) ;
186+ let driver = context. driver . as_ref ( ) . unwrap ( ) ;
187+ let expected_schema_retrieved = if expected_schema. is_empty ( ) {
188+ String :: new ( )
189+ } else {
190+ let temp_database_name = create_temporary_database_with_schema ( driver, expected_schema) . await ;
191+ database_schema ( driver, & temp_database_name) . await
192+ } ;
193+ let schema = database_schema ( driver, & name) . await ;
194+ assert_eq ! ( expected_schema_retrieved, schema) ;
195+ }
196+
197+ #[ apply( generic_step) ]
198+ #[ step( expr = r"connection get database\({word}\) has type schema:" ) ]
199+ async fn connection_get_database_has_type_schema ( context : & mut Context , name : String , step : & Step ) {
200+ let expected_type_schema = step. docstring . as_ref ( ) . unwrap ( ) . trim ( ) . to_string ( ) ;
201+ let driver = context. driver . as_ref ( ) . unwrap ( ) ;
202+ let expected_type_schema_retrieved = if expected_type_schema. is_empty ( ) {
203+ String :: new ( )
204+ } else {
205+ let temp_database_name = create_temporary_database_with_schema ( driver, expected_type_schema) . await ;
206+ database_type_schema ( driver, & temp_database_name) . await
207+ } ;
208+ let type_schema = database_type_schema ( driver, & name) . await ;
209+ assert_eq ! ( expected_type_schema_retrieved, type_schema) ;
210+ }
0 commit comments