package controllers

import (
	"context"
	"errors"
	"testing"

	"github.com/stretchr/testify/require"
	"k8s.io/apimachinery/pkg/runtime"
	"sigs.k8s.io/controller-runtime/pkg/client"
)

func TestManagerReturnsTypedAPPBoxUnregisteredError(t *testing.T) {
	m := NewManager(nil, runtime.NewScheme())
	key := client.ObjectKey{Namespace: "ns", Name: "appbox"}

	tests := []struct {
		name string
		call func() error
	}{
		{name: "client getter", call: func() error { _, err := m.ClientGetter(context.Background(), key); return err }},
		{name: "api reader getter", call: func() error { _, err := m.APIReaderGetter(context.Background(), key); return err }},
		{name: "rest config", call: func() error { _, err := m.GetRESTConfig(context.Background(), key); return err }},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			err := tt.call()
			require.EqualError(t, err, "appbox ns/appbox unregistered")
			var typed *APPBoxUnregisteredError
			require.True(t, errors.As(err, &typed))
			require.Equal(t, key, typed.Name)
		})
	}
}
