From a26c40ea4142fe4a9ab53d88a2e10d6a96c4717a Mon Sep 17 00:00:00 2001 From: Karl Kirch Date: Fri, 25 Mar 2022 15:05:24 -0500 Subject: [PATCH] Add upload/download links to provider versions --- registry_provider_version.go | 44 +++++++++++++++++++ registry_provider_version_integration_test.go | 33 ++++++++++++++ 2 files changed, 77 insertions(+) diff --git a/registry_provider_version.go b/registry_provider_version.go index 524b7a400..25d960396 100644 --- a/registry_provider_version.go +++ b/registry_provider_version.go @@ -49,6 +49,50 @@ type RegistryProviderVersion struct { Links map[string]interface{} `jsonapi:"links,omitempty"` } +func (v RegistryProviderVersion) ShasumsUploadURL() (string, error) { + uploadURL, ok := v.Links["shasums-upload"].(string) + if !ok { + return uploadURL, fmt.Errorf("the Registry Provider Version does not contain a shasums upload link") + } + if uploadURL == "" { + return uploadURL, fmt.Errorf("the Registry Provider Version shasums upload URL is empty") + } + return uploadURL, nil +} + +func (v RegistryProviderVersion) ShasumsSigUploadURL() (string, error) { + uploadURL, ok := v.Links["shasums-sig-upload"].(string) + if !ok { + return uploadURL, fmt.Errorf("the Registry Provider Version does not contain a shasums sig upload link") + } + if uploadURL == "" { + return uploadURL, fmt.Errorf("the Registry Provider Version shasums sig upload URL is empty") + } + return uploadURL, nil +} + +func (v RegistryProviderVersion) ShasumsDownloadURL() (string, error) { + downloadURL, ok := v.Links["shasums-download"].(string) + if !ok { + return downloadURL, fmt.Errorf("the Registry Provider Version does not contain a shasums download link") + } + if downloadURL == "" { + return downloadURL, fmt.Errorf("the Registry Provider Version shasums download URL is empty") + } + return downloadURL, nil +} + +func (v RegistryProviderVersion) ShasumsSigDownloadURL() (string, error) { + downloadURL, ok := v.Links["shasums-sig-download"].(string) + if !ok { + return downloadURL, fmt.Errorf("the Registry Provider Version does not contain a shasums sig download link") + } + if downloadURL == "" { + return downloadURL, fmt.Errorf("the Registry Provider Version shasums sig download URL is empty") + } + return downloadURL, nil +} + // RegistryProviderID is the multi key ID for addressing a provider type RegistryProviderVersionID struct { RegistryProviderID diff --git a/registry_provider_version_integration_test.go b/registry_provider_version_integration_test.go index 8e6d26af6..6a4772282 100644 --- a/registry_provider_version_integration_test.go +++ b/registry_provider_version_integration_test.go @@ -120,6 +120,10 @@ func TestRegistryProviderVersionsCreate(t *testing.T) { }) t.Run("includes upload links", func(t *testing.T) { + _, err := prvv.ShasumsUploadURL() + assert.NoError(t, err) + _, err = prvv.ShasumsSigUploadURL() + assert.NoError(t, err) expectedLinks := []string{ "shasums-upload", "shasums-sig-upload", @@ -129,6 +133,13 @@ func TestRegistryProviderVersionsCreate(t *testing.T) { assert.True(t, ok, "Expect upload link: %s", l) } }) + + t.Run("doesn't include download links", func(t *testing.T) { + _, err := prvv.ShasumsDownloadURL() + assert.Error(t, err) + _, err = prvv.ShasumsSigDownloadURL() + assert.Error(t, err) + }) }) t.Run("with invalid options", func(t *testing.T) { @@ -349,6 +360,28 @@ func TestRegistryProviderVersionsRead(t *testing.T) { readVersion, err := client.RegistryProviderVersions.Read(ctx, versionId, nil) assert.NoError(t, err) assert.Equal(t, version.ID, readVersion.ID) + assert.Equal(t, version.Version, readVersion.Version) + assert.Equal(t, version.KeyID, readVersion.KeyID) + + t.Run("relationships are properly decoded", func(t *testing.T) { + assert.Equal(t, version.RegistryProvider.ID, readVersion.RegistryProvider.ID) + }) + + t.Run("timestamps are properly decoded", func(t *testing.T) { + assert.NotEmpty(t, readVersion.CreatedAt) + assert.NotEmpty(t, readVersion.UpdatedAt) + }) + + t.Run("includes upload links", func(t *testing.T) { + expectedLinks := []string{ + "shasums-upload", + "shasums-sig-upload", + } + for _, l := range expectedLinks { + _, ok := readVersion.Links[l].(string) + assert.True(t, ok, "Expect upload link: %s", l) + } + }) }) t.Run("with non existing version", func(t *testing.T) {