diff --git a/internal/pkg/resource/registry.go b/internal/pkg/resource/registry.go index b5dab28..36fc37e 100644 --- a/internal/pkg/resource/registry.go +++ b/internal/pkg/resource/registry.go @@ -94,6 +94,16 @@ var registry = []Resource{ PathCreate: "/organizations/{organization_name}/policy-sets", Columns: []string{"name", "kind", "global", "overridable"}, }, + { + Type: "provider-sets", + Aliases: []string{"provider-set", "provset"}, + IDPrefix: "provset-", + PathGet: "/provider-sets/{id}", + PathList: "/organizations/{organization_name}/provider-sets", + PathCreate: "/organizations/{organization_name}/provider-sets", + Columns: []string{"name", "provider-source", "global", "priority", "updated-at"}, + ExcludeColumns: []string{"configuration-hcl"}, + }, { Type: "vars", Aliases: []string{"var", "variable", "variables"}, diff --git a/internal/pkg/resource/registry_test.go b/internal/pkg/resource/registry_test.go index 6524188..b692a0b 100644 --- a/internal/pkg/resource/registry_test.go +++ b/internal/pkg/resource/registry_test.go @@ -80,6 +80,31 @@ func TestByName(t *testing.T) { input: "cv", wantType: "configuration-versions", }, + { + name: "provider sets canonical", + input: "provider-sets", + wantType: "provider-sets", + }, + { + name: "provider set alias", + input: "provider-set", + wantType: "provider-sets", + }, + { + name: "provider set short alias", + input: "provset", + wantType: "provider-sets", + }, + { + name: "provider sets mixed case", + input: "Provider-Sets", + wantType: "provider-sets", + }, + { + name: "provider set uppercase alias", + input: "PROVSET", + wantType: "provider-sets", + }, } for _, tt := range tests { @@ -125,6 +150,11 @@ func TestByIDPrefix(t *testing.T) { input: "cv-abc123", wantType: "configuration-versions", }, + { + name: "provider set ID", + input: "provset-abc123", + wantType: "provider-sets", + }, { name: "unknown prefix", input: "xyz-123", @@ -202,6 +232,9 @@ func TestCompletionNames(t *testing.T) { assert.Contains(t, names, "ws") assert.Contains(t, names, "runs") assert.Contains(t, names, "run") + assert.Contains(t, names, "provider-sets") + assert.Contains(t, names, "provider-set") + assert.Contains(t, names, "provset") // Should be longer than Names() since it includes aliases. assert.Greater(t, len(names), len(Names())) @@ -218,6 +251,9 @@ func TestCreatableNames(t *testing.T) { assert.Contains(t, names, "workspaces") assert.Contains(t, names, "workspace") assert.Contains(t, names, "projects") + assert.Contains(t, names, "provider-sets") + assert.Contains(t, names, "provider-set") + assert.Contains(t, names, "provset") // Should NOT include types without PathCreate (e.g. runs, applies). assert.NotContains(t, names, "runs") @@ -225,6 +261,24 @@ func TestCreatableNames(t *testing.T) { assert.NotContains(t, names, "applies") } +func TestProviderSetsResource(t *testing.T) { + t.Parallel() + + got := ByName("provider-sets") + require.NotNil(t, got) + assert.Equal(t, &Resource{ + Type: "provider-sets", + Aliases: []string{"provider-set", "provset"}, + IDPrefix: "provset-", + PathGet: "/provider-sets/{id}", + PathList: "/organizations/{organization_name}/provider-sets", + PathCreate: "/organizations/{organization_name}/provider-sets", + Columns: []string{"name", "provider-source", "global", "priority", "updated-at"}, + ExcludeColumns: []string{"configuration-hcl"}, + Resolvable: false, + }, got) +} + // TestRegistryInvariants validates structural invariants that keep the registry // correct across get, create, and table rendering subsystems. func TestRegistryInvariants(t *testing.T) {