@@ -44,7 +44,11 @@ def blank_database_config(tmp_path: Path) -> DbConfig:
4444 return DbConfig (
4545 db = {
4646 "database_url" : "sqlite:///" + str ((tmp_path / "submission.db.sqlite" ).resolve ()),
47- "author" : {"name" : "alice" , "private_key_path" : str (private_key_path .resolve ())},
47+ "author" : {
48+ "name" : "alice" ,
49+ "private_key_path" : str (private_key_path .resolve ()),
50+ "private_key_passphrase" : "" ,
51+ },
4852 "known_public_keys" : str (public_key_path .resolve ()),
4953 }
5054 )
@@ -157,3 +161,31 @@ def test_populate_redacted(tmp_path: Path, blank_database_config_path: Path):
157161 [* args_common , "submission" , "populate" , submission_id , str (metadata_path ), "--no-confirm" ],
158162 catch_exceptions = False ,
159163 )
164+
165+
166+ def test_update_error_confirm (blank_database_config_path : Path ):
167+ """Database should confirm before updating a submission from an Error state."""
168+ args_common = ["db" , "--config-file" , blank_database_config_path ]
169+ metadata = GrzSubmissionMetadata .model_validate_json (
170+ (importlib .resources .files (test_resources ) / "metadata.json" ).read_text ()
171+ )
172+
173+ runner = click .testing .CliRunner ()
174+ cli = grzctl .cli .build_cli ()
175+ result_add = runner .invoke (cli , [* args_common , "submission" , "add" , metadata .submission_id ])
176+ assert result_add .exit_code == 0 , result_add .stderr
177+
178+ result_update1 = runner .invoke (cli , [* args_common , "submission" , "update" , metadata .submission_id , "Error" ])
179+ assert result_update1 .exit_code == 0 , result_update1 .output
180+
181+ result_update2 = runner .invoke (cli , [* args_common , "submission" , "update" , metadata .submission_id , "Validated" ])
182+ assert result_update2 .exit_code != 0 , result_update2 .output
183+ assert (
184+ "Submission is currently in an 'Error' state. Are you sure you want to set it to 'Validated'?"
185+ in result_update2 .output
186+ )
187+
188+ result_update3 = runner .invoke (
189+ cli , [* args_common , "submission" , "update" , "--ignore-error-state" , metadata .submission_id , "Validated" ]
190+ )
191+ assert result_update3 .exit_code == 0 , result_update3 .output
0 commit comments