Skip to content

Commit

Permalink
Merge branch 'main' into export-https
Browse files Browse the repository at this point in the history
  • Loading branch information
markphelps authored Sep 20, 2023
2 parents 7b00678 + fef1406 commit b34a77e
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 8 deletions.
20 changes: 12 additions & 8 deletions internal/release/check.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,20 @@ type Info struct {
UpdateAvailable bool
}

type releaseChecker interface {
type githubReleaseChecker interface {
getLatestRelease(ctx context.Context) (*github.RepositoryRelease, error)
}

type githubReleaseChecker struct {
client *github.Client
type repositoryService interface {
GetLatestRelease(ctx context.Context, owner, repo string) (*github.RepositoryRelease, *github.Response, error)
}

func (c *githubReleaseChecker) getLatestRelease(ctx context.Context) (*github.RepositoryRelease, error) {
release, _, err := c.client.Repositories.GetLatestRelease(ctx, "flipt-io", "flipt")
type githubReleaseCheckerImpl struct {
client repositoryService
}

func (c *githubReleaseCheckerImpl) getLatestRelease(ctx context.Context) (*github.RepositoryRelease, error) {
release, _, err := c.client.GetLatestRelease(ctx, "flipt-io", "flipt")
if err != nil {
return nil, fmt.Errorf("checking for latest version: %w", err)
}
Expand All @@ -40,8 +44,8 @@ var (

// defaultReleaseChecker checks for the latest release
// can be overridden for testing
defaultReleaseChecker releaseChecker = &githubReleaseChecker{
client: github.NewClient(nil),
defaultReleaseChecker githubReleaseChecker = &githubReleaseCheckerImpl{
client: github.NewClient(nil).Repositories,
}
)

Expand All @@ -53,7 +57,7 @@ func Check(ctx context.Context, version string) (Info, error) {
}

// visible for testing
func check(ctx context.Context, rc releaseChecker, version string) (Info, error) {
func check(ctx context.Context, rc githubReleaseChecker, version string) (Info, error) {
i := Info{
CurrentVersion: version,
}
Expand Down
70 changes: 70 additions & 0 deletions internal/release/check_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,82 @@ package release

import (
"context"
"fmt"
"testing"

"github.com/google/go-github/v32/github"
"github.com/stretchr/testify/assert"
)

func strPtr(s string) *string {
return &s
}

type mockGithubReleaseService struct {
release *github.RepositoryRelease
response *github.Response
err error
}

func (m *mockGithubReleaseService) GetLatestRelease(ctx context.Context, owner, repo string) (*github.RepositoryRelease, *github.Response, error) {
return m.release, m.response, m.err
}

func TestGetLatestRelease(t *testing.T) {
var (
tests = []struct {
name string
tagName string
htmlURL string
err error
want *github.RepositoryRelease
}{
{
name: "success",
tagName: "0.17.1",
htmlURL: "https://github.com/flipt-io/flipt/releases/tag/0.17.2",
err: nil,
want: &github.RepositoryRelease{
TagName: strPtr("0.17.1"),
HTMLURL: strPtr("https://github.com/flipt-io/flipt/releases/tag/0.17.2"),
},
},
{
name: "error",
err: fmt.Errorf("error getting release"),
},
}
)

for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {

srv := &mockGithubReleaseService{
release: &github.RepositoryRelease{
TagName: strPtr(tt.tagName),
HTMLURL: strPtr(tt.htmlURL),
},
err: tt.err,
}

rc := githubReleaseCheckerImpl{
client: srv,
}

got, err := rc.getLatestRelease(context.Background())
if tt.err != nil {
assert.Equal(t, fmt.Sprintf("checking for latest version: %s", tt.err.Error()), err.Error())
return
}

assert.NoError(t, err)
assert.Equal(t, tt.want, got)
})
}

}

type mockReleaseChecker struct {
tagName string
htmlURL string
Expand Down

0 comments on commit b34a77e

Please sign in to comment.