feat: 提交详情能看 diff,也能丢给 AI 审这一次改动。文件检查可单独排除路径,TODO 只认大写,避免把 todo 表和模块当成待办标记。

热力图按容器宽度铺满一年,不再横向滚动。托盘右键换成可换皮肤的弹层;更新下载显示进度,退出后再由脚本拉起安装器,避免还占着 exe。
This commit is contained in:
李琦
2026-08-19 15:46:03 +08:00
parent 1694397245
commit 7c4109f687
38 changed files with 2618 additions and 129 deletions

View File

@@ -255,6 +255,56 @@ func TestLoadingStylePersistsAndValidates(t *testing.T) {
}
}
func TestTrayMenuStylePersistsAndValidates(t *testing.T) {
s, e := OpenStore(filepath.Join(t.TempDir(), "settings.db"))
if e != nil {
t.Fatal(e)
}
defer s.db.Close()
if e = s.SaveSettings(AppSettings{Theme: "dark", Locale: "zh-CN", GitScope: "current", AutoRefresh: true, GlassOpacity: 55, TrayMenuStyle: "glass"}); e != nil {
t.Fatal(e)
}
got, e := s.Settings()
if e != nil {
t.Fatal(e)
}
if got.TrayMenuStyle != "glass" {
t.Fatalf("trayMenuStyle=%q", got.TrayMenuStyle)
}
if e = s.SaveSettings(AppSettings{GlassOpacity: 55, TrayMenuStyle: "fancy"}); e != nil {
t.Fatal(e)
}
got, e = s.Settings()
if e != nil {
t.Fatal(e)
}
if got.TrayMenuStyle != "native" {
t.Fatalf("invalid trayMenuStyle did not reset: %q", got.TrayMenuStyle)
}
if e = s.SaveSettings(AppSettings{GlassOpacity: 55, TrayMenuStyle: "minimal"}); e != nil {
t.Fatal(e)
}
got, e = s.Settings()
if e != nil {
t.Fatal(e)
}
if got.TrayMenuStyle != "compact" {
t.Fatalf("minimal alias=%q", got.TrayMenuStyle)
}
for _, style := range []string{"native", "liquid", "glass", "compact", "status", "neon"} {
if e = s.SaveSettings(AppSettings{GlassOpacity: 55, TrayMenuStyle: style}); e != nil {
t.Fatal(e)
}
got, e = s.Settings()
if e != nil {
t.Fatal(e)
}
if got.TrayMenuStyle != style {
t.Fatalf("trayMenuStyle=%q want %q", got.TrayMenuStyle, style)
}
}
}
func TestMigrateSkippedWhenVersionCurrent(t *testing.T) {
db := filepath.Join(t.TempDir(), "versioned.db")
s, e := OpenStore(db)