Skip to content

Commit

Permalink
build constructors
Browse files Browse the repository at this point in the history
  • Loading branch information
laurenolivia committed Feb 15, 2024
1 parent a5ba0cb commit f13c174
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 84 deletions.
2 changes: 1 addition & 1 deletion mocks/registry_module_mocks.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

107 changes: 28 additions & 79 deletions registry_module.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ type RegistryModules interface {
Delete(ctx context.Context, organization string, name string) error

// Delete a registry module by name
DeleteByName(ctx context.Context, module RegistryModuleDeleteByName) error
DeleteByName(ctx context.Context, module RegistryModuleID) error

// Delete a specified provider for the given module along with all its versions
DeleteProvider(ctx context.Context, moduleID RegistryModuleID) error
Expand Down Expand Up @@ -108,6 +108,7 @@ const (
)

// RegistryModuleID represents the set of IDs that identify a RegistryModule
// Use NewPublicRegistryModuleID or NewPrivateRegistryModuleID to build one
type RegistryModuleID struct {
// The organization the module belongs to, see RegistryModule.Organization.Name
Organization string
Expand All @@ -122,20 +123,6 @@ type RegistryModuleID struct {
RegistryName RegistryName
}

// RegistryModuleDeleteByName represents the values requires to delete the entire registry module
type RegistryModuleDeleteByName struct {
// The organization the module belongs to, see RegistryModule.Organization.Name
Organization string
// The name of the module, see RegistryModule.Name
Name string
// The namespace of the module. For private modules this is the name of the organization that owns the module
// Namespace is required to delete a registry module by name when using new endpoint
// DELETE /organizations/:organization_name/registry-modules/:registry_name/:namespace/:name
Namespace string
// Either public or private. If not provided, defaults to private
RegistryName RegistryName
}

// RegistryModuleList represents a list of registry modules.
type RegistryModuleList struct {
*Pagination
Expand Down Expand Up @@ -628,26 +615,16 @@ func (r *registryModules) Delete(ctx context.Context, organization, name string)
}

// DeleteByName is used to delete the entire registry module
func (r *registryModules) DeleteByName(ctx context.Context, module RegistryModuleDeleteByName) error {
func (r *registryModules) DeleteByName(ctx context.Context, module RegistryModuleID) error {
if err := module.valid(); err != nil {
return err
}

var namespace string

if module.RegistryName == PrivateRegistry {
namespace = module.Organization
}

if module.RegistryName == PublicRegistry {
namespace = module.Namespace
}

u := fmt.Sprintf(
"organizations/%s/registry-modules/%s/%s/%s",
url.QueryEscape(module.Organization),
url.QueryEscape(string(module.RegistryName)),
url.QueryEscape(namespace),
url.QueryEscape(module.Namespace),
url.QueryEscape(module.Name),
)

Expand All @@ -661,25 +638,15 @@ func (r *registryModules) DeleteByName(ctx context.Context, module RegistryModul

// Delete a specified provider for the given module along with all its versions
func (r *registryModules) DeleteProvider(ctx context.Context, moduleID RegistryModuleID) error {
if err := moduleID.validateOnProvider(); err != nil {
if err := moduleID.validWhenDeleteByProvider(); err != nil {
return err
}

var namespace string

if moduleID.RegistryName == PrivateRegistry {
namespace = moduleID.Organization
}

if moduleID.RegistryName == PublicRegistry {
namespace = moduleID.Namespace
}

u := fmt.Sprintf(
"organizations/%s/registry-modules/%s/%s/%s/%s",
url.QueryEscape(moduleID.Organization),
url.QueryEscape(string(moduleID.RegistryName)),
url.QueryEscape(namespace),
url.QueryEscape(moduleID.Namespace),
url.QueryEscape(moduleID.Name),
url.QueryEscape(moduleID.Provider),
)
Expand All @@ -705,21 +672,11 @@ func (r *registryModules) DeleteVersion(ctx context.Context, moduleID RegistryMo
return ErrInvalidVersion
}

var namespace string

if moduleID.RegistryName == PrivateRegistry {
namespace = moduleID.Organization
}

if moduleID.RegistryName == PublicRegistry {
namespace = moduleID.Namespace
}

u := fmt.Sprintf(
"organizations/%s/registry-modules/%s/%s/%s/%s/%s",
url.QueryEscape(moduleID.Organization),
url.QueryEscape(string(moduleID.RegistryName)),
url.QueryEscape(namespace),
url.QueryEscape(moduleID.Namespace),
url.QueryEscape(moduleID.Name),
url.QueryEscape(moduleID.Provider),
url.QueryEscape(version),
Expand Down Expand Up @@ -769,7 +726,7 @@ func (o RegistryModuleID) valid() error {
return nil
}

func (o RegistryModuleID) validateOnProvider() error {
func (o RegistryModuleID) validWhenDeleteByProvider() error {
if !validStringID(&o.Organization) {
return ErrInvalidOrg
}
Expand Down Expand Up @@ -805,34 +762,6 @@ func (o RegistryModuleID) validateOnProvider() error {
return nil
}

func (o RegistryModuleDeleteByName) valid() error {
if !validStringID(&o.Organization) {
return ErrInvalidOrg
}

if !validString(&o.Name) {
return ErrRequiredName
}

if !validStringID(&o.Name) {
return ErrInvalidName
}

switch o.RegistryName {
case PublicRegistry:
if !validString(&o.Namespace) {
return ErrRequiredNamespace
}
case PrivateRegistry:
case "":
return ErrInvalidRegistryName
default:
return ErrInvalidRegistryName
}

return nil
}

func (o RegistryModuleCreateOptions) valid() error {
if !validString(o.Name) {
return ErrRequiredName
Expand Down Expand Up @@ -959,3 +888,23 @@ func (r *registryModules) deprecatedDeleteVersion(ctx context.Context, moduleID

return req.Do(ctx, nil)
}

func NewPublicRegistryModuleID(organization, namespace, name, provider string) RegistryModuleID {
return RegistryModuleID{
Organization: organization,
Namespace: namespace,
Name: name,
RegistryName: PublicRegistry,
Provider: provider,
}
}

func NewPrivateRegistryModuleID(organization, name, provider string) RegistryModuleID {
return RegistryModuleID{
Organization: organization,
Namespace: organization,
Name: name,
RegistryName: PrivateRegistry,
Provider: provider,
}
}
8 changes: 4 additions & 4 deletions registry_module_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1333,7 +1333,7 @@ func TestRegistryModulesDeleteByName(t *testing.T) {
assert.NotNil(t, orgTest)

t.Run("with valid parameters", func(t *testing.T) {
err := client.RegistryModules.DeleteByName(ctx, RegistryModuleDeleteByName{
err := client.RegistryModules.DeleteByName(ctx, RegistryModuleID{
Organization: orgTest.Name,
RegistryName: PrivateRegistry,
Namespace: registryModuleTest.Namespace,
Expand All @@ -1344,7 +1344,7 @@ func TestRegistryModulesDeleteByName(t *testing.T) {
})

t.Run("when the registry module does not exist", func(t *testing.T) {
err := client.RegistryModules.DeleteByName(ctx, RegistryModuleDeleteByName{
err := client.RegistryModules.DeleteByName(ctx, RegistryModuleID{
Organization: orgTest.Name,
RegistryName: PrivateRegistry,
Namespace: registryModuleTest.Namespace,
Expand All @@ -1355,7 +1355,7 @@ func TestRegistryModulesDeleteByName(t *testing.T) {
})

t.Run("with invalid org", func(t *testing.T) {
err := client.RegistryModules.DeleteByName(ctx, RegistryModuleDeleteByName{
err := client.RegistryModules.DeleteByName(ctx, RegistryModuleID{
Organization: badIdentifier,
RegistryName: PrivateRegistry,
Namespace: registryModuleTest.Namespace,
Expand All @@ -1365,7 +1365,7 @@ func TestRegistryModulesDeleteByName(t *testing.T) {
})

t.Run("with invalid registry name", func(t *testing.T) {
err := client.RegistryModules.DeleteByName(ctx, RegistryModuleDeleteByName{
err := client.RegistryModules.DeleteByName(ctx, RegistryModuleID{
Organization: orgTest.Name,
RegistryName: badIdentifier,
Namespace: registryModuleTest.Namespace,
Expand Down

0 comments on commit f13c174

Please sign in to comment.