package registry

import (
	"testing"

	"github.com/stretchr/testify/require"
)

func TestActionPlanReturnsDetachedExternalPlan(t *testing.T) {
	reg := New()
	pkg := makePackage(t, "demo", 1, "do-thing", "summary")
	registered, err := reg.RegisterExternal(pkg)
	require.NoError(t, err)

	plan, ok := reg.ActionPlan(registered.Definition.Digest, "do-thing")
	require.True(t, ok)
	require.Equal(t, "demo", plan.Domain)
	require.Equal(t, 1, plan.DefinitionVersion)
	require.Equal(t, "do-thing", plan.ActionName)
	require.Equal(t, "https://api.test.example.com", plan.Endpoint.BaseURL)
	require.Equal(t, "default", plan.AuthRequirement.Profile)
	require.Equal(t, "oauth2_bearer", plan.AuthProfile.Type)
	require.Equal(t, "/items/{id}", plan.Binding.Path)

	plan.Binding.StaticHeaders["Accept"] = "tampered"
	plan.InputSchema["type"] = "array"
	again, ok := reg.ActionPlan(registered.Definition.Digest, "do-thing")
	require.True(t, ok)
	require.Equal(t, "application/json", again.Binding.StaticHeaders["Accept"])
	require.Equal(t, "object", again.InputSchema["type"])
}

func TestActionPlanRejectsBuiltinAndUnknownAction(t *testing.T) {
	reg := New()
	pkg := makePackage(t, "demo", 1, "do-thing", "summary")
	registered, err := reg.RegisterExternal(pkg)
	require.NoError(t, err)
	_, ok := reg.ActionPlan(registered.Definition.Digest, "unknown")
	require.False(t, ok)

	builtin, err := reg.RegisterBuiltin(
		makeBuiltinDefinition(t, "builtin-demo", 1, "do-thing", "summary"),
		fakeExecutor{},
		"rev-1",
	)
	require.NoError(t, err)
	_, ok = reg.ActionPlan(builtin.Definition.Digest, "do-thing")
	require.False(t, ok)
}
