diff --git a/src-tauri/src/commands/onboarding.rs b/src-tauri/src/commands/onboarding.rs index dbf109f..9bbfc1a 100644 --- a/src-tauri/src/commands/onboarding.rs +++ b/src-tauri/src/commands/onboarding.rs @@ -444,8 +444,9 @@ mod tests { assert_eq!(agents_r.action, "skipped"); // 态二(旧版本):把版本改旧 + 块外加用户内容 → updated,块升级、用户内容保留 + let agents_tpl_ver = extract_managed_block(TMPL_AGENTS).and_then(block_version).unwrap(); let old = agents - .replace("version=\"1.2.0\"", "version=\"1.0.0\"") + .replacen(&format!("version=\"{agents_tpl_ver}\""), "version=\"1.0.0\"", 1) .replace("## 项目概况", "## 项目概况 我的项目说明") @@ -458,11 +459,29 @@ mod tests { let agents_r = r3.iter().find(|t| t.name == "AGENTS.md").unwrap(); assert_eq!(agents_r.action, "updated"); let upgraded = std::fs::read_to_string(base.join("AGENTS.md")).unwrap(); - assert!(upgraded.contains("version=\"1.2.0\""), "块应升级到模板版本"); + assert!(upgraded.contains(&format!("version=\"{agents_tpl_ver}\"")), "块应升级到模板版本"); assert!(upgraded.contains("我的项目说明"), "块外用户内容(前)须保留"); assert!(upgraded.contains("用户自加的章节"), "块外用户内容(后)须保留"); assert_eq!(upgraded.matches(MANAGED_START).count(), 1, "只有一个管理块"); + // git-workflow 版本升级验证:v1.2.0 存量项目重跑后块升级,块外内容不动 + let gw_tpl_ver = extract_managed_block(TMPL_GIT_WORKFLOW).and_then(block_version).unwrap(); + let gw_path = base.join("docs/ai-context/git-workflow.md"); + let gw_content = std::fs::read_to_string(&gw_path).unwrap(); + // 把写入的最新版本改旧,模拟存量 1.2.0 项目 + let gw_old = gw_content + .replacen(&format!("version=\"{gw_tpl_ver}\""), "version=\"1.2.0\"", 1) + + "\n## 项目自加章节\n旧有内容\n"; + std::fs::write(&gw_path, &gw_old).unwrap(); + let r_gw = dispatch_templates(pp); + let gw_r = r_gw.iter().find(|t| t.name == "docs/ai-context/git-workflow.md").unwrap(); + assert_eq!(gw_r.action, "updated", "git-workflow 旧版本应触发 updated"); + let gw_upgraded = std::fs::read_to_string(&gw_path).unwrap(); + assert!(gw_upgraded.contains(&format!("version=\"{gw_tpl_ver}\"")), "git-workflow 块应升级到模板版本"); + assert!(gw_upgraded.contains("功能性改动"), "新分支策略关键词应出现在升级后文件中"); + assert!(gw_upgraded.contains("项目自加章节"), "块外用户内容须保留"); + assert_eq!(gw_upgraded.matches(MANAGED_START).count(), 1, "只有一个管理块"); + // 态三:存量文件无标记 → appended,原内容保留在上方 std::fs::write(base.join("AGENTS.md"), "# 手写的 AGENTS