41 lines
1.2 KiB
Go
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()
|
|
}
|