diff --git a/helper_test.go b/helper_test.go index 1a0cf57e4..719c9f760 100644 --- a/helper_test.go +++ b/helper_test.go @@ -1694,6 +1694,37 @@ func createRegistryModuleWithVersion(t *testing.T, client *Client, org *Organiza } } +func createRegistryModuleWithProvider(t *testing.T, client *Client, org *Organization) (*RegistryModule, func()) { + var orgCleanup func() + + if org == nil { + org, orgCleanup = createOrganization(t, client) + } + + ctx := context.Background() + + options := RegistryModuleCreateOptions{ + Name: String("name"), + Provider: String("testprovider"), + } + rm, err := client.RegistryModules.Create(ctx, org.Name, options) + if err != nil { + t.Fatal(err) + } + + return rm, func() { + if err := client.RegistryModules.Delete(ctx, org.Name, rm.Name); err != nil { + t.Errorf("Error destroying registry module! WARNING: Dangling resources\n"+ + "may exist! The full error is shown below.\n\n"+ + "Registry Module: %s\nError: %s", rm.Name, err) + } + + if orgCleanup != nil { + orgCleanup() + } + } +} + func createRunTask(t *testing.T, client *Client, org *Organization) (*RunTask, func()) { var orgCleanup func() diff --git a/registry_module.go b/registry_module.go index 867707910..872a0d0ef 100644 --- a/registry_module.go +++ b/registry_module.go @@ -199,6 +199,16 @@ type RegistryModuleVersionStatuses struct { // RegistryModuleListOptions represents the options for listing registry modules. type RegistryModuleListOptions struct { ListOptions + + // Optional: A search query string. Modules are searchable by name, namespace, provider fields. + Search string `url:"q,omitempty"` + + // Optional: If specified, restricts results to those with the matching field name value. Valid values are registry_name, provider, and organization_name. + RegistryName RegistryName `url:"filter[registry_name],omitempty"` + + Provider string `url:"filter[provider],omitempty"` + + OrganizationName string `url:"filter[organization_name],omitempty"` } // RegistryModuleCreateOptions is used when creating a registry module without a VCS repo diff --git a/registry_module_integration_test.go b/registry_module_integration_test.go index 6c290629e..32b91a31e 100644 --- a/registry_module_integration_test.go +++ b/registry_module_integration_test.go @@ -30,14 +30,17 @@ func TestRegistryModulesList(t *testing.T) { defer registryModuleTest1Cleanup() registryModuleTest2, registryModuleTest2Cleanup := createRegistryModule(t, client, orgTest, PrivateRegistry) defer registryModuleTest2Cleanup() + registryModuleTest3, registryModuleTest3Cleanup := createRegistryModuleWithProvider(t, client, orgTest) + defer registryModuleTest3Cleanup() t.Run("with no list options", func(t *testing.T) { modl, err := client.RegistryModules.List(ctx, orgTest.Name, &RegistryModuleListOptions{}) require.NoError(t, err) assert.Contains(t, modl.Items, registryModuleTest1) assert.Contains(t, modl.Items, registryModuleTest2) + assert.Contains(t, modl.Items, registryModuleTest3) assert.Equal(t, 1, modl.CurrentPage) - assert.Equal(t, 2, modl.TotalCount) + assert.Equal(t, 3, modl.TotalCount) }) t.Run("with list options", func(t *testing.T) { @@ -62,6 +65,36 @@ func TestRegistryModulesList(t *testing.T) { assert.NotEmpty(t, modl.Items) assert.Equal(t, 1, modl.CurrentPage) }) + + t.Run("with search query", func(t *testing.T) { + modl, err := client.RegistryModules.List(ctx, orgTest.Name, &RegistryModuleListOptions{ + Search: registryModuleTest1.Name, + }) + require.NoError(t, err) + assert.NotEmpty(t, modl.Items) + assert.Contains(t, modl.Items, registryModuleTest1) + assert.Equal(t, 1, modl.TotalCount) + }) + + t.Run("with filter[provider]", func(t *testing.T) { + modl, err := client.RegistryModules.List(ctx, orgTest.Name, &RegistryModuleListOptions{ + Provider: registryModuleTest3.Provider, + }) + require.NoError(t, err) + assert.NotEmpty(t, modl.Items) + assert.Contains(t, modl.Items, registryModuleTest3) + assert.Equal(t, 1, modl.TotalCount) + }) + + t.Run("with filter[registry_name]", func(t *testing.T) { + modl, err := client.RegistryModules.List(ctx, orgTest.Name, &RegistryModuleListOptions{ + RegistryName: PrivateRegistry, + }) + require.NoError(t, err) + assert.NotEmpty(t, modl.Items) + assert.Contains(t, modl.Items, registryModuleTest1) + assert.Equal(t, 3, modl.TotalCount) + }) } func TestRegistryModulesCreate(t *testing.T) {