@@ -2,11 +2,41 @@ use spacetimedb_smoketests::Smoketest;
22use std:: thread;
33use std:: time:: Duration ;
44
5+ fn assert_delete_prompt ( output : & str , database : & str ) {
6+ assert ! (
7+ output. contains( "Are you sure you want to delete database" ) ,
8+ "expected confirmation prompt in output:\n {output}"
9+ ) ;
10+ assert ! (
11+ output. contains( database) ,
12+ "expected database name in confirmation prompt:\n {output}"
13+ ) ;
14+ }
15+
16+ #[ test]
17+ fn test_delete_database_aborts_without_confirmation ( ) {
18+ let mut test = Smoketest :: builder ( )
19+ . precompiled_module ( "delete-database" )
20+ . autopublish ( false )
21+ . build ( ) ;
22+
23+ let name = format ! ( "test-db-{}" , std:: process:: id( ) ) ;
24+ test. publish_module_named ( & name, false ) . unwrap ( ) ;
25+
26+ let output = test
27+ . spacetime_with_stdin ( & [ "delete" , "--server" , & test. server_url , & name] , "n\n " )
28+ . unwrap ( ) ;
29+ assert_delete_prompt ( & output, & name) ;
30+ assert ! ( output. contains( "Aborting" ) , "expected abort message:\n {output}" ) ;
31+
32+ test. spacetime ( & [ "logs" , "--server" , & test. server_url , & name] ) . unwrap ( ) ;
33+ }
34+
535/// Test that deleting a database stops the module.
636/// The module is considered stopped if its scheduled reducer stops
737/// producing update events.
838#[ test]
9- fn test_delete_database ( ) {
39+ fn test_delete_database_with_confirmation ( ) {
1040 let mut test = Smoketest :: builder ( )
1141 . precompiled_module ( "delete-database" )
1242 . autopublish ( false )
@@ -23,8 +53,10 @@ fn test_delete_database() {
2353 thread:: sleep ( Duration :: from_secs ( 2 ) ) ;
2454
2555 // Delete the database
26- test. spacetime ( & [ "delete" , "--server" , & test. server_url , & name] )
56+ let output = test
57+ . spacetime_with_stdin ( & [ "delete" , "--server" , & test. server_url , & name] , "y\n " )
2758 . unwrap ( ) ;
59+ assert_delete_prompt ( & output, & name) ;
2860
2961 // Collect whatever updates we got
3062 let updates = sub. collect ( ) . unwrap ( ) ;
@@ -37,3 +69,25 @@ fn test_delete_database() {
3769 updates. len( )
3870 ) ;
3971}
72+
73+ #[ test]
74+ fn test_delete_database_yes_skips_confirmation ( ) {
75+ let mut test = Smoketest :: builder ( )
76+ . precompiled_module ( "delete-database" )
77+ . autopublish ( false )
78+ . build ( ) ;
79+
80+ let name = format ! ( "test-db-{}" , std:: process:: id( ) ) ;
81+ test. publish_module_named ( & name, false ) . unwrap ( ) ;
82+
83+ let output = test
84+ . spacetime ( & [ "delete" , "--server" , & test. server_url , "--yes" , & name] )
85+ . unwrap ( ) ;
86+ assert ! (
87+ output. contains( "Skipping confirmation due to --yes" ) ,
88+ "expected --yes skip message:\n {output}"
89+ ) ;
90+
91+ let result = test. spacetime ( & [ "logs" , "--server" , & test. server_url , & name] ) ;
92+ assert ! ( result. is_err( ) , "expected database to be deleted" ) ;
93+ }
0 commit comments