Issue 109 Validation - ShaoClean/Alune GitHub Wiki

Issue #109:放弃所有更改验收记录

所有测试使用隔离 Git 仓库、临时 SQLite 和 loopback SSH/SFTP。截图不含真实仓库内容、凭据或私人服务器地址。

自动验证

命令 实际结果
npm run build -w @alune/shared 通过
npm run build -w @alune/ssh-client 通过
npm run build -w server 通过
npm run build -w web 通过;保留既有 Vite 大 chunk 提示
npm test -w server -- --ci --runInBand 18 suites / 186 tests 通过(含新增 6 项 HTTP 测试)
npm test -w web 151 tests 通过
npm test -w @alune/ssh-client 115 tests 通过,2 项 Windows 专用测试在 macOS 跳过
node --test packages/ssh-client/tests/discard-changes.test.cjs 新增 25 项测试通过;最终平台 fixture 配置调整后单独复跑通过
Git diff 检查 / commit-msg hook 通过
GitHub PR CI(Node 22.22) 四组单元测试(desktop/web/server/ssh-client)及 macOS 14、Ubuntu 22.04、Windows 本地 Git 回归全部通过

专项覆盖:有/无首次提交,两种范围,多文件修改及删除,暂存后再次编辑,已暂存新文件/仅暂存文件,已暂存删除、重命名,忽略文件、多个 worktree,特殊字面路径(中文、空格、引号、换行、pathspec magic、前导短横线),符号链接与嵌套仓库保护,冲突/子模块/意向添加阻止,确认后文件内容/暂存区/分支/目标集合变化,执行中其他写入、删除后重建、权限失败、SSH 写后断连和通道数量限制。

HTTP 验证使用真实临时本地仓库核对磁盘和暂存区;重复执行与其他 Git 写操作共享 409 保护,锁在失败后释放。真实 SSH/SFTP 测试确认未暂存恢复、可选删除、暂存区/忽略内容不变,连接丢失时返回未知数量。

实际界面验收

运行:node apps/web/tests/discard-changes-fixture.cjs。控制台提供界面和独立的测试控制 URL;可在隔离环境注入延迟、删除失败及同状态内容变化。

场景 观察结果
筛选 mixed 后打开确认 列表只显示匹配行,确认仍显示全仓库 3 个已跟踪 + 2 个未跟踪文件
默认范围与取消 删除复选框默认未选中;取消前后磁盘内容、Git 状态和暂存区条目完全一致,写请求为 0
双击确认与忙碌 延迟注入时双击仅发送 1 次写请求;取消、关闭与 Esc 不可用,显示正在放弃
仅放弃已跟踪 恢复 3 个文件,保留 2 个未跟踪文件和全部暂存内容;当前 mixed Diff 自动切换到保留的已暂存比较
包含删除时权限失败 显示「已恢复 3 个文件,已删除 1 个未跟踪文件;1 个文件未完成」和 Permission denied;列表刷新为真实剩余状态
部分失败后重试 必须重新读取;删除复选框重新清空。仅有未跟踪目标时,勾选前确认按钮禁用
全部目标完成 未暂存分组及批量入口隐藏,已暂存组仍然存在
确认后同状态内容变化 服务端拒绝旧确认且不写入;即使仍为 M,当前 Diff 也刷新到新内容 version 4
窄窗口 1024×768 下入口和确认框仍可完整操作;另在 1920×868 验证常规布局

截图

改动前(development / 7fa5bdb,1920×868)

Alune 改动前:未暂存分组仅有全部暂存入口

改动后(1024×768)

Alune 改动后:放弃所有更改入口与当前 Diff

默认仅放弃已跟踪文件

Alune 筛选后的整仓库确认,默认保留未跟踪文件

明确包含删除

Alune 明确选择删除两个未跟踪文件并提示不可恢复

成功后保留暂存内容(1920×868)

Alune 批量恢复成功后保留未跟踪文件与已暂存 Diff

部分完成与重试

Alune 权限失败显示实际完成数量和重新确认入口

确认后变化

Alune 拒绝过期确认并刷新到最新的 Diff 内容

未验证与限制

Windows/Linux 原生桌面交互、Windows OpenSSH 实机和超大仓库性能未在本机验证。CI 已在 macOS、Windows、Linux 运行本地批量放弃回归并通过(上表关联实际运行)。这不替代原生桌面和 Windows OpenSSH 实机交互验收。指纹检查不能替代跨进程文件系统事务,应用也无法恢复直接删除的未跟踪文件。