Files
back-hokm/internal/store/db_test.go
T
2026-06-15 16:53:25 +03:30

41 lines
1.2 KiB
Go

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()
}