From ff3dc9dd33f3a31b6bbc3681d2853c03cd57ebdf Mon Sep 17 00:00:00 2001 From: Arash Deshmeh Date: Mon, 17 Dec 2018 14:21:45 -0500 Subject: [PATCH] fix(helm): fix unit tests of the history command to ensure the max option is covered. Add the required support to the fake client Signed-off-by: Arash Deshmeh --- cmd/helm/history_test.go | 2 +- pkg/helm/fake.go | 17 +++++++++- pkg/helm/fake_test.go | 72 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 89 insertions(+), 2 deletions(-) diff --git a/cmd/helm/history_test.go b/cmd/helm/history_test.go index 71cb6b2fb..eab94a9d5 100644 --- a/cmd/helm/history_test.go +++ b/cmd/helm/history_test.go @@ -63,7 +63,7 @@ func TestHistoryCmd(t *testing.T) { name: "get history with max limit set", args: []string{"angry-bird"}, flags: []string{"--max", "2"}, - rels: releases[:2], + rels: releases, expected: "REVISION\tUPDATED \tSTATUS \tCHART \tAPP VERSION\tDESCRIPTION \n3 \t(.*)\tSUPERSEDED\tfoo-0.1.0-beta.1\t1.3 \tRelease mock\n4 \t(.*)\tDEPLOYED \tfoo-0.1.0-beta.1\t1.4 \tRelease mock\n", }, { diff --git a/pkg/helm/fake.go b/pkg/helm/fake.go index 46be7d398..6da0ac70d 100644 --- a/pkg/helm/fake.go +++ b/pkg/helm/fake.go @@ -229,7 +229,22 @@ func (c *FakeClient) ReleaseContent(rlsName string, opts ...ContentOption) (resp // ReleaseHistory returns a release's revision history. func (c *FakeClient) ReleaseHistory(rlsName string, opts ...HistoryOption) (*rls.GetHistoryResponse, error) { - return &rls.GetHistoryResponse{Releases: c.Rels}, nil + reqOpts := c.Opts + for _, opt := range opts { + opt(&reqOpts) + } + maxLen := int(reqOpts.histReq.Max) + + var resp rls.GetHistoryResponse + for _, rel := range c.Rels { + if maxLen > 0 && len(resp.Releases) >= maxLen { + return &resp, nil + } + if rel.Name == rlsName { + resp.Releases = append(resp.Releases, rel) + } + } + return &resp, nil } // RunReleaseTest executes a pre-defined tests on a release diff --git a/pkg/helm/fake_test.go b/pkg/helm/fake_test.go index ecb0a2855..cff10051f 100644 --- a/pkg/helm/fake_test.go +++ b/pkg/helm/fake_test.go @@ -446,3 +446,75 @@ func TestFakeClient_UpdateReleaseFromChart(t *testing.T) { }) } } + +func TestFakeClient_ReleaseHistory(t *testing.T) { + relName := "angry-dolphin" + rels := []*release.Release{ + ReleaseMock(&MockReleaseOptions{Name: relName, Version: 1}), + ReleaseMock(&MockReleaseOptions{Name: relName, Version: 2}), + ReleaseMock(&MockReleaseOptions{Name: relName, Version: 3}), + ReleaseMock(&MockReleaseOptions{Name: relName, Version: 4}), + } + + type fields struct { + Rels []*release.Release + } + type args struct { + rlsName string + opts []HistoryOption + } + tests := []struct { + name string + fields fields + args args + want *rls.GetHistoryResponse + wantErr bool + }{ + { + name: "Get all revisions of a release", + fields: fields{ + Rels: rels, + }, + args: args{ + rlsName: relName, + opts: nil, + }, + want: &rls.GetHistoryResponse{ + Releases: rels, + }, + wantErr: false, + }, + { + name: "Get only 2 revisions of a release", + fields: fields{ + Rels: rels, + }, + args: args{ + rlsName: relName, + opts: []HistoryOption{ + WithMaxHistory(2), + }, + }, + want: &rls.GetHistoryResponse{ + Releases: rels[:2], + }, + wantErr: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + c := &FakeClient{ + Rels: tt.fields.Rels, + } + got, err := c.ReleaseHistory(tt.args.rlsName, tt.args.opts...) + if (err != nil) != tt.wantErr { + t.Errorf("FakeClient.ReleaseHistory() error = %v, wantErr %v", err, tt.wantErr) + return + } + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("FakeClient.ReleaseHistory() = %v, want %v", got, tt.want) + } + }) + } +}