feat: add official sync progress logging

This commit is contained in:
2026-07-07 22:13:07 +08:00
parent b2d6871926
commit ea0920e4e3
10 changed files with 639 additions and 21 deletions
@@ -8,7 +8,8 @@ use bat_adapters::official::yostar_jp::{
};
use bat_infrastructure::{
build_official_pull_plan_from_platform_inventory, OfficialGameMainConfigBootstrapService,
OfficialResourcePullService,
OfficialResourcePullService, OfficialUpdateConfig, OfficialUpdateProgress,
OfficialUpdateService, OfficialUpdateStatus,
};
use std::collections::HashMap;
use std::fs;
@@ -151,6 +152,39 @@ fn official_pipeline_can_dry_run_and_pull_without_local_client() {
assert!(!curl_log.contains("bluearchive.cafe"));
}
#[test]
fn official_update_service_emits_human_progress_events() {
let harness = TestHarness::new();
let config = OfficialUpdateConfig {
auto_discover: true,
launcher_version: TEST_LAUNCHER_VERSION.to_string(),
output_root: harness.temp.path().join("sync-output"),
curl_command: harness.curl_script.clone(),
unzip_command: harness.unzip_script.clone(),
dry_run: true,
plan: true,
..OfficialUpdateConfig::default()
};
let mut events = Vec::<OfficialUpdateProgress>::new();
let report = OfficialUpdateService::new()
.run_with_progress(&config, |event| events.push(event))
.unwrap();
assert_eq!(report.update_status, OfficialUpdateStatus::WouldDownload);
assert_eq!(report.download_url_count, Some(19));
assert!(events.iter().any(|event| event.stage == "start"));
assert!(events.iter().any(|event| event.stage == "launcher"));
assert!(events.iter().any(|event| event.stage == "server-info"));
assert!(events.iter().any(|event| event.stage == "marker"));
assert!(events.iter().any(|event| event.stage == "catalog"));
assert!(events.iter().any(|event| event.stage == "dry-run"));
assert!(events.iter().any(|event| event.stage == "finish"));
assert!(events.iter().any(|event| event
.message
.contains("pull plan contains 19 official URLs")));
}
struct TestHarness {
temp: TempDir,
curl_script: std::path::PathBuf,