github.com/codefresh-io/kcfi@v0.0.0-20230301195427-c1578715cc46/cmd/kcfi/status_test.go (about) 1 /* 2 Copyright The Helm Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package main 18 19 import ( 20 "testing" 21 "time" 22 23 "helm.sh/helm/v3/pkg/chart" 24 "helm.sh/helm/v3/pkg/release" 25 helmtime "helm.sh/helm/v3/pkg/time" 26 ) 27 28 func TestStatusCmd(t *testing.T) { 29 releasesMockWithStatus := func(info *release.Info, hooks ...*release.Hook) []*release.Release { 30 info.LastDeployed = helmtime.Unix(1452902400, 0).UTC() 31 return []*release.Release{{ 32 Name: "flummoxed-chickadee", 33 Namespace: "default", 34 Info: info, 35 Chart: &chart.Chart{}, 36 Hooks: hooks, 37 }} 38 } 39 40 tests := []cmdTestCase{{ 41 name: "get status of a deployed release", 42 cmd: "status flummoxed-chickadee", 43 golden: "output/status.txt", 44 rels: releasesMockWithStatus(&release.Info{ 45 Status: release.StatusDeployed, 46 }), 47 }, { 48 name: "get status of a deployed release with notes", 49 cmd: "status flummoxed-chickadee", 50 golden: "output/status-with-notes.txt", 51 rels: releasesMockWithStatus(&release.Info{ 52 Status: release.StatusDeployed, 53 Notes: "release notes", 54 }), 55 }, { 56 name: "get status of a deployed release with notes in json", 57 cmd: "status flummoxed-chickadee -o json", 58 golden: "output/status.json", 59 rels: releasesMockWithStatus(&release.Info{ 60 Status: release.StatusDeployed, 61 Notes: "release notes", 62 }), 63 }, { 64 name: "get status of a deployed release with test suite", 65 cmd: "status flummoxed-chickadee", 66 golden: "output/status-with-test-suite.txt", 67 rels: releasesMockWithStatus( 68 &release.Info{ 69 Status: release.StatusDeployed, 70 }, 71 &release.Hook{ 72 Name: "never-run-test", 73 Events: []release.HookEvent{release.HookTest}, 74 }, 75 &release.Hook{ 76 Name: "passing-test", 77 Events: []release.HookEvent{release.HookTest}, 78 LastRun: release.HookExecution{ 79 StartedAt: mustParseTime("2006-01-02T15:04:05Z"), 80 CompletedAt: mustParseTime("2006-01-02T15:04:07Z"), 81 Phase: release.HookPhaseSucceeded, 82 }, 83 }, 84 &release.Hook{ 85 Name: "failing-test", 86 Events: []release.HookEvent{release.HookTest}, 87 LastRun: release.HookExecution{ 88 StartedAt: mustParseTime("2006-01-02T15:10:05Z"), 89 CompletedAt: mustParseTime("2006-01-02T15:10:07Z"), 90 Phase: release.HookPhaseFailed, 91 }, 92 }, 93 &release.Hook{ 94 Name: "passing-pre-install", 95 Events: []release.HookEvent{release.HookPreInstall}, 96 LastRun: release.HookExecution{ 97 StartedAt: mustParseTime("2006-01-02T15:00:05Z"), 98 CompletedAt: mustParseTime("2006-01-02T15:00:07Z"), 99 Phase: release.HookPhaseSucceeded, 100 }, 101 }, 102 ), 103 }} 104 runTestCmd(t, tests) 105 } 106 107 func mustParseTime(t string) helmtime.Time { 108 res, _ := helmtime.Parse(time.RFC3339, t) 109 return res 110 } 111 112 func TestStatusCompletion(t *testing.T) { 113 releasesMockWithStatus := func(info *release.Info, hooks ...*release.Hook) []*release.Release { 114 info.LastDeployed = helmtime.Unix(1452902400, 0).UTC() 115 return []*release.Release{{ 116 Name: "athos", 117 Namespace: "default", 118 Info: info, 119 Chart: &chart.Chart{}, 120 Hooks: hooks, 121 }, { 122 Name: "porthos", 123 Namespace: "default", 124 Info: info, 125 Chart: &chart.Chart{}, 126 Hooks: hooks, 127 }, { 128 Name: "aramis", 129 Namespace: "default", 130 Info: info, 131 Chart: &chart.Chart{}, 132 Hooks: hooks, 133 }, { 134 Name: "dartagnan", 135 Namespace: "gascony", 136 Info: info, 137 Chart: &chart.Chart{}, 138 Hooks: hooks, 139 }} 140 } 141 142 tests := []cmdTestCase{{ 143 name: "completion for status", 144 cmd: "__complete status a", 145 golden: "output/status-comp.txt", 146 rels: releasesMockWithStatus(&release.Info{ 147 Status: release.StatusDeployed, 148 }), 149 }, { 150 name: "completion for status with too many arguments", 151 cmd: "__complete status dartagnan ''", 152 golden: "output/status-wrong-args-comp.txt", 153 rels: releasesMockWithStatus(&release.Info{ 154 Status: release.StatusDeployed, 155 }), 156 }, { 157 name: "completion for status with too many arguments", 158 cmd: "__complete status --debug a", 159 golden: "output/status-comp.txt", 160 rels: releasesMockWithStatus(&release.Info{ 161 Status: release.StatusDeployed, 162 }), 163 }} 164 runTestCmd(t, tests) 165 } 166 167 func TestStatusRevisionCompletion(t *testing.T) { 168 revisionFlagCompletionTest(t, "status") 169 } 170 171 func TestStatusOutputCompletion(t *testing.T) { 172 outputFlagCompletionTest(t, "status") 173 }