@@ -79,13 +79,26 @@ impl TestDatabase {
79
79
/// the database is automatically deleted.
80
80
#[ instrument]
81
81
pub fn new ( ) -> TestDatabase {
82
+ Self :: new_inner ( |name, conn| {
83
+ let template = TemplateDatabase :: instance ( ) ;
84
+ create_database_from_template ( name, & template. template_name , conn)
85
+ } )
86
+ }
87
+
88
+ /// Creates a new Postgres database. Once the `TestDatabase` instance is
89
+ /// dropped, the database is automatically deleted.
90
+ #[ instrument]
91
+ pub fn empty ( ) -> TestDatabase {
92
+ Self :: new_inner ( create_database)
93
+ }
94
+
95
+ fn new_inner ( f : impl Fn ( & str , & mut PgConnection ) -> QueryResult < ( ) > ) -> TestDatabase {
82
96
let template = TemplateDatabase :: instance ( ) ;
83
97
84
98
let name = format ! ( "{}_{}" , template. prefix, generate_name( ) . to_lowercase( ) ) ;
85
99
86
100
let mut conn = template. get_connection ( ) ;
87
- create_database_from_template ( & name, & template. template_name , & mut conn)
88
- . expect ( "failed to create test database" ) ;
101
+ f ( & name, & mut conn) . expect ( "Failed to create test database" ) ;
89
102
90
103
let mut url = template. base_url . clone ( ) ;
91
104
url. set_path ( & format ! ( "/{name}" ) ) ;
@@ -131,6 +144,13 @@ fn connect(database_url: &str) -> ConnectionResult<PgConnection> {
131
144
PgConnection :: establish ( database_url)
132
145
}
133
146
147
+ #[ instrument( skip( conn) ) ]
148
+ fn create_database ( name : & str , conn : & mut PgConnection ) -> QueryResult < ( ) > {
149
+ debug ! ( "Creating new database…" ) ;
150
+ sql_query ( format ! ( "CREATE DATABASE {name}" ) ) . execute ( conn) ?;
151
+ Ok ( ( ) )
152
+ }
153
+
134
154
#[ instrument( skip( conn) ) ]
135
155
fn create_template_database ( name : & str , conn : & mut PgConnection ) -> QueryResult < ( ) > {
136
156
table ! {
@@ -146,8 +166,7 @@ fn create_template_database(name: &str, conn: &mut PgConnection) -> QueryResult<
146
166
. get_result ( conn) ?;
147
167
148
168
if count == 0 {
149
- debug ! ( "Creating new template database…" ) ;
150
- sql_query ( format ! ( "CREATE DATABASE {name}" ) ) . execute ( conn) ?;
169
+ create_database ( name, conn) ?;
151
170
} else {
152
171
debug ! ( %count, "Skipping template database creation" ) ;
153
172
}
0 commit comments