Skip to content

Commit

Permalink
Add release list for Terraform Registry Module
Browse files Browse the repository at this point in the history
  • Loading branch information
minamijoyo committed Feb 25, 2020
1 parent bf2e533 commit 7127c70
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 2 deletions.
17 changes: 15 additions & 2 deletions release/tfregistry.go
Expand Up @@ -2,7 +2,6 @@ package release

import (
"context"
"errors"
"fmt"
"net/url"
"strings"
Expand Down Expand Up @@ -121,5 +120,19 @@ func (r *TFRegistryModuleRelease) Latest(ctx context.Context) (string, error) {

// List returns a list of versions.
func (r *TFRegistryModuleRelease) List(ctx context.Context, maxLength int) ([]string, error) {
return nil, errors.New("not impplemented yet")
req := &tfregistry.ModuleLatestForProviderRequest{
Namespace: r.namespace,
Name: r.name,
Provider: r.provider,
}
release, err := r.api.ModuleLatestForProvider(ctx, req)

if err != nil {
return []string{}, fmt.Errorf("failed to get a list of versions for %s/%s/%s: %s", r.namespace, r.name, r.provider, err)
}

if maxLength < len(release.Versions) {
return release.Versions[len(release.Versions)-maxLength:], nil
}
return release.Versions, nil
}
69 changes: 69 additions & 0 deletions release/tfregistry_test.go
Expand Up @@ -3,6 +3,7 @@ package release
import (
"context"
"errors"
"reflect"
"testing"

"github.com/davecgh/go-spew/spew"
Expand Down Expand Up @@ -176,3 +177,71 @@ func TestTFRegistryModuleReleaseLatest(t *testing.T) {
}
}
}

func TestTFRegistryModuleReleaseList(t *testing.T) {
cases := []struct {
client *mockTFRegistryClient
maxLength int
want []string
ok bool
}{
{
client: &mockTFRegistryClient{
moduleRes: &tfregistry.ModuleLatestForProviderResponse{
Version: "0.3.0",
Versions: []string{"0.1.0", "0.2.0", "0.3.0"},
},
err: nil,
},
maxLength: 5,
want: []string{"0.1.0", "0.2.0", "0.3.0"},
ok: true,
},
{
client: &mockTFRegistryClient{
moduleRes: &tfregistry.ModuleLatestForProviderResponse{
Version: "0.3.0",
Versions: []string{"0.1.0", "0.2.0", "0.3.0"},
},
err: nil,
},
maxLength: 2,
want: []string{"0.2.0", "0.3.0"},
ok: true,
},
{
client: &mockTFRegistryClient{
moduleRes: nil,
err: errors.New(`unexpected HTTP Status Code: 404`),
},
want: []string{},
ok: false,
},
}

source := "hoge/fuga/piyo"
for _, tc := range cases {
// Set a mock client
config := TFRegistryConfig{
api: tc.client,
}
r, err := NewTFRegistryModuleRelease(source, config)
if err != nil {
t.Fatalf("failed to NewTFRegistryModuleRelease(%s, %#v): %s", source, config, err)
}

got, err := r.List(context.Background(), tc.maxLength)

if tc.ok && err != nil {
t.Errorf("(*TFRegistryModuleRelease).List() with r = %s, maxLength = %d returns unexpected err: %+v", spew.Sdump(r), tc.maxLength, err)
}

if !tc.ok && err == nil {
t.Errorf("(*TFRegistryModuleRelease).List() with r = %s, maxLength = %d expects to return an error, but no error", spew.Sdump(r), tc.maxLength)
}

if !reflect.DeepEqual(got, tc.want) {
t.Errorf("(*TFRegistryModuleRelease).List() with r = %s, maxLength = %d returns %s, but want = %s", spew.Sdump(r), tc.maxLength, got, tc.want)
}
}
}

0 comments on commit 7127c70

Please sign in to comment.