Files
eezd 5514a1e465
Development CI / check-and-package (push) Successful in 4m18s
GitHub Git mirror / mirror (push) Successful in 28s
Development CI / image (push) Successful in 21s
Development CI / deploy-development (push) Successful in 15s
feat: synchronize pinned tabs across devices
2026-11-04 18:20:16 +08:00

79 lines
2.1 KiB
Go

package store
import (
"context"
"errors"
"os"
"path/filepath"
"testing"
)
func TestOpenExistingUsesNativeEscapedPathWithoutCreating(t *testing.T) {
root := t.TempDir()
path := filepath.Join(root, "数据库 # %.db")
original, err := Open(filepath.Join(root, "source.db"))
if err != nil {
t.Fatal(err)
}
if err := original.SetSetting("portable", "retained"); err != nil {
t.Fatal(err)
}
if err := original.Snapshot(context.Background(), path); err != nil {
t.Fatal(err)
}
if err := original.Close(); err != nil {
t.Fatal(err)
}
existing, err := OpenExisting(path)
if err != nil {
t.Fatal(err)
}
value, ok, err := existing.Setting("portable")
if err != nil || !ok || value != "retained" {
t.Fatalf("existing database path: %q, %v, %v", value, ok, err)
}
if err := existing.Close(); err != nil {
t.Fatal(err)
}
missingPath := filepath.Join(root, "missing.db")
missing, err := OpenExisting(missingPath)
if err != nil {
t.Fatal(err)
}
defer missing.Close()
if _, _, err := missing.Setting("portable"); err == nil {
t.Fatal("missing database accepted")
}
if _, err := os.Stat(missingPath); !errors.Is(err, os.ErrNotExist) {
t.Fatalf("missing database was created: %v", err)
}
}
func TestResetPreferencesRollsBackIfPinResetFails(t *testing.T) {
st, err := Open(filepath.Join(t.TempDir(), "rawmark.db"))
if err != nil {
t.Fatal(err)
}
defer st.Close()
original := map[string]string{
"app.settings": `{"fontSize":24,"pinnedTabs":["note.md"]}`,
"plugins.enabled": `{"example":true}`,
}
for key, value := range original {
if err := st.SetSetting(key, value); err != nil {
t.Fatal(err)
}
}
if _, err := st.db.Exec(`CREATE TRIGGER reject_pin_reset BEFORE INSERT ON settings WHEN NEW.key='app.settings' BEGIN SELECT RAISE(ABORT,'intentional reset failure'); END`); err != nil {
t.Fatal(err)
}
if err := st.ResetPreferences(); err == nil {
t.Fatal("固定标签重置失败必须返回错误")
}
for key, value := range original {
if got, ok, err := st.Setting(key); err != nil || !ok || got != value {
t.Fatalf("重置失败未回滚 %s: %q, %v", key, got, err)
}
}
}