package packs

import (
	"context"
	"database/sql"
	"strings"
	"testing"
)

func TestValidateManagedLifecycleEffectAdaptersRequiresManagedStateOnlyLockPolicy(t *testing.T) {
	adapter := ManagedLifecycleEffectAdapter{
		Class: "revision",
		Apply: func(context.Context, *sql.Tx, ManagedLifecycleEffectRequest) ([]byte, error) {
			return []byte("receipt"), nil
		},
		Prove: func(context.Context, *sql.DB, ManagedLifecycleEffectRequest, []byte) (bool, error) {
			return true, nil
		},
	}
	if err := ValidateManagedLifecycleEffectAdapters([]ManagedLifecycleEffectAdapter{adapter}); err == nil || !strings.Contains(err.Error(), "lock policy") {
		t.Fatalf("missing lock policy error = %v", err)
	}
	adapter.LockPolicy = ManagedLifecycleEffectManagedStateOnly
	if err := ValidateManagedLifecycleEffectAdapters([]ManagedLifecycleEffectAdapter{adapter}); err != nil {
		t.Fatalf("managed-state-only adapter: %v", err)
	}
}
