Skip to content

Commit

Permalink
test(notifier): Improing coverage for helm fetching
Browse files Browse the repository at this point in the history
Signed-off-by: Vincent Boutour <[email protected]>
  • Loading branch information
ViBiOh committed May 6, 2021
1 parent 59db5e0 commit 50be283
Show file tree
Hide file tree
Showing 3 changed files with 131 additions and 8 deletions.
8 changes: 5 additions & 3 deletions pkg/notifier/releases.go
Original file line number Diff line number Diff line change
Expand Up @@ -160,20 +160,22 @@ func (a app) getFetchHelmSources(repos map[string]model.Repository) []model.Rele
releases := make([]model.Release, 0)

for chartName, patterns := range values {
for repoPattern, repoName := range repos[chartName].Versions {
for repoPattern, repoVersionName := range repos[chartName].Versions {
upstreamVersion := patterns[repoPattern]

if upstreamVersion.Name == repoName {
if upstreamVersion.Name == repoVersionName {
continue
}

compiledPattern, err := semver.ParsePattern(repoPattern)
if err != nil {
logger.Error("unable to parse pattern: %s", err)
continue
}

repositoryVersion, err := semver.Parse(repoName)
repositoryVersion, err := semver.Parse(repoVersionName)
if err != nil {
logger.Error("unable to parse version: %s", err)
continue
}

Expand Down
129 changes: 125 additions & 4 deletions pkg/notifier/releases_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"strings"
"testing"

"github.com/ViBiOh/ketchup/pkg/helm/helmtest"
"github.com/ViBiOh/ketchup/pkg/model"
"github.com/ViBiOh/ketchup/pkg/semver"
"github.com/ViBiOh/ketchup/pkg/service/repository/repositorytest"
Expand All @@ -27,7 +28,7 @@ func TestGetNewGithubReleases(t *testing.T) {
{
"list error",
app{
repositoryService: repositorytest.New().SetList(nil, 0, errors.New("failed")),
repositoryService: repositorytest.New().SetListByKind(nil, 0, errors.New("failed")),
},
args{
ctx: context.Background(),
Expand All @@ -38,7 +39,7 @@ func TestGetNewGithubReleases(t *testing.T) {
{
"github error",
app{
repositoryService: repositorytest.New().SetList([]model.Repository{
repositoryService: repositorytest.New().SetListByKind([]model.Repository{
model.NewGithubRepository(1, repositoryName).AddVersion(model.DefaultPattern, repositoryVersion)}, 0, nil).SetLatestVersions(nil, errors.New("failed")),
},
args{
Expand All @@ -50,7 +51,7 @@ func TestGetNewGithubReleases(t *testing.T) {
{
"same version",
app{
repositoryService: repositorytest.New().SetList([]model.Repository{
repositoryService: repositorytest.New().SetListByKind([]model.Repository{
model.NewGithubRepository(1, repositoryName).AddVersion(model.DefaultPattern, repositoryVersion),
}, 0, nil).SetLatestVersions(map[string]semver.Version{
model.DefaultPattern: {
Expand All @@ -67,10 +68,11 @@ func TestGetNewGithubReleases(t *testing.T) {
{
"success",
app{
repositoryService: repositorytest.New().SetList([]model.Repository{
repositoryService: repositorytest.New().SetListByKind([]model.Repository{
model.NewGithubRepository(1, repositoryName).AddVersion(model.DefaultPattern, repositoryVersion),
}, 0, nil).SetLatestVersions(map[string]semver.Version{
model.DefaultPattern: safeParse("1.1.0"),
"1.0": safeParse("1.0"),
}, nil).SetUpdate(nil),
},
args{
Expand Down Expand Up @@ -109,3 +111,122 @@ func TestGetNewGithubReleases(t *testing.T) {
})
}
}

func TestGetNewHelmReleases(t *testing.T) {
type args struct {
content string
}

var cases = []struct {
intention string
instance app
args args
want []model.Release
wantCount uint64
wantErr error
}{
{
"fetch error",
app{
repositoryService: repositorytest.New().SetListByKind(nil, 0, errors.New("db error")),
helmApp: helmtest.New(),
},
args{
content: "test",
},
nil,
0,
errors.New("db error"),
},
{
"no repository",
app{
repositoryService: repositorytest.New().SetListByKind(nil, 0, nil),
helmApp: helmtest.New(),
},
args{
content: "test",
},
nil,
0,
nil,
},
{
"helm error",
app{
repositoryService: repositorytest.New().SetListByKind([]model.Repository{
model.NewHelmRepository(1, "https://charts.vibioh.fr", "app"),
model.NewHelmRepository(1, "https://charts.vibioh.fr", "cron"),
model.NewHelmRepository(1, "https://charts.vibioh.fr", "flux"),
model.NewHelmRepository(1, "https://charts.helm.sh/stable", "postgreql"),
}, 0, nil),
helmApp: helmtest.New().SetFetchIndex(nil, errors.New("helm error")),
},
args{
content: "test",
},
nil,
4,
nil,
},
{
"helm",
app{
repositoryService: repositorytest.New().SetListByKind([]model.Repository{
model.NewHelmRepository(1, "https://charts.vibioh.fr", "app").AddVersion(model.DefaultPattern, "1.0.0").AddVersion("1.0", "1.0.0").AddVersion("~1.0", "a.b.c"),
model.NewHelmRepository(1, "https://charts.vibioh.fr", "cron").AddVersion(model.DefaultPattern, "1.0.0"),
model.NewHelmRepository(1, "https://charts.vibioh.fr", "flux").AddVersion(model.DefaultPattern, "1.0.0"),
model.NewHelmRepository(1, "https://charts.helm.sh/stable", "postgreql").AddVersion(model.DefaultPattern, "3.0.0"),
}, 0, nil),
helmApp: helmtest.New().SetFetchIndex(map[string]map[string]semver.Version{
"app": {
model.DefaultPattern: safeParse("1.1.0"),
},
"cron": {
model.DefaultPattern: safeParse("2.0.0"),
},
"flux": {
model.DefaultPattern: safeParse("1.0.0"),
},
"postgreql": {
model.DefaultPattern: safeParse("3.1.0"),
},
}, nil),
},
args{
content: "test",
},
[]model.Release{
model.NewRelease(model.NewHelmRepository(1, "https://charts.vibioh.fr", "app").AddVersion(model.DefaultPattern, "1.0.0").AddVersion("1.0", "1.0.0").AddVersion("~1.0", "a.b.c"), model.DefaultPattern, safeParse("1.1.0")),
model.NewRelease(model.NewHelmRepository(1, "https://charts.vibioh.fr", "cron").AddVersion(model.DefaultPattern, "1.0.0"), model.DefaultPattern, safeParse("2.0.0")),
model.NewRelease(model.NewHelmRepository(1, "https://charts.helm.sh/stable", "postgreql").AddVersion(model.DefaultPattern, "3.0.0"), model.DefaultPattern, safeParse("3.1.0")),
},
4,
nil,
},
}

for _, tc := range cases {
t.Run(tc.intention, func(t *testing.T) {
got, gotCount, gotErr := tc.instance.getNewHelmReleases(context.Background())

failed := false

if tc.wantErr == nil && gotErr != nil {
failed = true
} else if tc.wantErr != nil && gotErr == nil {
failed = true
} else if tc.wantErr != nil && !strings.Contains(gotErr.Error(), tc.wantErr.Error()) {
failed = true
} else if gotCount != tc.wantCount {
failed = true
} else if !reflect.DeepEqual(got, tc.want) {
failed = true
}

if failed {
t.Errorf("getNewHelmReleases() = (%+v, %d, `%s`), want (%+v, %d, `%s`)", got, gotCount, gotErr, tc.want, tc.wantCount, tc.wantErr)
}
})
}
}
2 changes: 1 addition & 1 deletion pkg/service/repository/repositorytest/repositorytest.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ func (a *App) List(_ context.Context, _, _ uint) ([]model.Repository, uint64, er

// ListByKind mocks
func (a *App) ListByKind(_ context.Context, _, _ uint, _ model.RepositoryKind) ([]model.Repository, uint64, error) {
return a.listRepositories, a.listTotal, a.listErr
return a.listByKindRepositories, a.listByKindTotal, a.listByKindErr
}

// Suggest mocks
Expand Down

0 comments on commit 50be283

Please sign in to comment.