package store import ( "path/filepath" "testing" ) // TestMigrateIdempotent بررسی می‌کند باز کردن مکرر یک دیتابیس (مثل ری‌استارت سرور) // migration‌ها را دوباره اجرا نکرده و خطای «duplicate column» ندهد. func TestMigrateIdempotent(t *testing.T) { path := filepath.Join(t.TempDir(), "mig.db") for i := 1; i <= 3; i++ { s, err := Open(path) if err != nil { t.Fatalf("open #%d: %v", i, err) } s.Close() } } // TestMigrateLegacyDB سناریوی دیتابیسِ از قبل migrate‌شده ولی بدون جدول ردیابی // (مثل DB فعلیِ توسعه) را شبیه‌سازی می‌کند: نباید خطای duplicate column بدهد. func TestMigrateLegacyDB(t *testing.T) { path := filepath.Join(t.TempDir(), "legacy.db") s, err := Open(path) if err != nil { t.Fatalf("first open: %v", err) } // حذف جدول ردیابی ⇒ سرور فکر می‌کند هیچ migration اجرا نشده، در حالی که ستون‌ها هستند. if _, err := s.DB.Exec(`DROP TABLE schema_migrations`); err != nil { t.Fatal(err) } s.Close() s2, err := Open(path) if err != nil { t.Fatalf("reopen legacy db: %v", err) } s2.Close() }