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