Move project save post-commit planning to app core

This commit is contained in:
2026-06-06 12:16:19 +02:00
parent f3834827b1
commit c8b55b36f7
8 changed files with 176 additions and 28 deletions

View File

@@ -425,6 +425,57 @@ void project_save_commit_plan_flags_missing_target_after_rename_failure(pp::test
PP_EXPECT(harness, plan.log_message == "temporary project not swapped after original removal");
}
void project_save_post_commit_plan_records_success_side_effects(pp::tests::Harness& harness)
{
const auto plan = pp::app::plan_document_canvas_project_save_post_commit(
pp::app::DocumentCanvasProjectSavePostCommitInput {
.save_succeeded = true,
.timelapse_encoder_available = true,
.progress_ui_visible = true,
});
PP_EXPECT(harness, plan.marks_document_clean);
PP_EXPECT(harness, plan.marks_new_document_committed);
PP_EXPECT(harness, plan.saves_timelapse_sidecar);
PP_EXPECT(harness, plan.flushes_platform_storage);
PP_EXPECT(harness, plan.dismisses_progress_ui);
PP_EXPECT(harness, plan.updates_title);
}
void project_save_post_commit_plan_skips_timelapse_without_encoder(pp::tests::Harness& harness)
{
const auto plan = pp::app::plan_document_canvas_project_save_post_commit(
pp::app::DocumentCanvasProjectSavePostCommitInput {
.save_succeeded = true,
.timelapse_encoder_available = false,
.progress_ui_visible = false,
});
PP_EXPECT(harness, plan.marks_document_clean);
PP_EXPECT(harness, plan.marks_new_document_committed);
PP_EXPECT(harness, !plan.saves_timelapse_sidecar);
PP_EXPECT(harness, plan.flushes_platform_storage);
PP_EXPECT(harness, !plan.dismisses_progress_ui);
PP_EXPECT(harness, plan.updates_title);
}
void project_save_post_commit_plan_preserves_state_after_failure(pp::tests::Harness& harness)
{
const auto plan = pp::app::plan_document_canvas_project_save_post_commit(
pp::app::DocumentCanvasProjectSavePostCommitInput {
.save_succeeded = false,
.timelapse_encoder_available = true,
.progress_ui_visible = true,
});
PP_EXPECT(harness, !plan.marks_document_clean);
PP_EXPECT(harness, !plan.marks_new_document_committed);
PP_EXPECT(harness, !plan.saves_timelapse_sidecar);
PP_EXPECT(harness, !plan.flushes_platform_storage);
PP_EXPECT(harness, plan.dismisses_progress_ui);
PP_EXPECT(harness, plan.updates_title);
}
void snapshot_plan_rejects_invalid_canvas_state(pp::tests::Harness& harness)
{
const std::uint32_t frames[] { 100U };
@@ -616,6 +667,9 @@ int main()
harness.run("project save commit plan succeeds for temporary swap", project_save_commit_plan_succeeds_for_temporary_swap);
harness.run("project save commit plan fails when target remove fails", project_save_commit_plan_fails_when_target_remove_fails);
harness.run("project save commit plan flags missing target after rename failure", project_save_commit_plan_flags_missing_target_after_rename_failure);
harness.run("project save post commit plan records success side effects", project_save_post_commit_plan_records_success_side_effects);
harness.run("project save post commit plan skips timelapse without encoder", project_save_post_commit_plan_skips_timelapse_without_encoder);
harness.run("project save post commit plan preserves state after failure", project_save_post_commit_plan_preserves_state_after_failure);
harness.run("snapshot plan rejects invalid canvas state", snapshot_plan_rejects_invalid_canvas_state);
harness.run("clear plan records legacy canvas effects", clear_plan_records_legacy_canvas_effects);
harness.run("clear plan noops without canvas", clear_plan_noops_without_canvas);