add service level tests

pull/8423/head
ys.achinta 5 years ago
parent d2e3ac6c04
commit 0dbd397759

@ -12,12 +12,12 @@ type ListRequest struct {
} }
type ListResponse struct { type ListResponse struct {
Error string `json:"error,omitempty"` Error string `json:"error,omitempty"`
Data []Releases Releases []Release
} }
type Releases struct { type Release struct {
Release string `json:"release"` Name string `json:"release"`
Namespace string `json:"namespace"` Namespace string `json:"namespace"`
} }

@ -79,7 +79,7 @@ func (s *ListTestSuite) TestShouldReturnReleasesWhenSuccessfulAPICall() {
assert.Equal(s.T(), 200, resp.StatusCode) assert.Equal(s.T(), 200, resp.StatusCode)
expectedResponse := `{"Data":[{"release":"test-release","namespace":"test-namespace"}]}` expectedResponse := `{"Releases":[{"release":"test-release","namespace":"test-namespace"}]}`
respBody, _ := ioutil.ReadAll(resp.Body) respBody, _ := ioutil.ReadAll(resp.Body)
assert.Equal(s.T(), expectedResponse, string(respBody)) assert.Equal(s.T(), expectedResponse, string(respBody))
@ -96,7 +96,7 @@ func (s *ListTestSuite) TestShouldReturnBadRequestErrorIfItHasInvalidCharacter()
assert.Equal(s.T(), 400, resp.StatusCode) assert.Equal(s.T(), 400, resp.StatusCode)
expectedResponse := `{"error":"invalid character '\"' after object key:value pair","Data":null}` expectedResponse := `{"error":"invalid character '\"' after object key:value pair","Releases":null}`
respBody, _ := ioutil.ReadAll(resp.Body) respBody, _ := ioutil.ReadAll(resp.Body)
assert.Equal(s.T(), expectedResponse, string(respBody)) assert.Equal(s.T(), expectedResponse, string(respBody))
require.NoError(s.T(), err) require.NoError(s.T(), err)

@ -2,6 +2,7 @@ package api
import ( import (
"context" "context"
"errors"
"fmt" "fmt"
"helm.sh/helm/v3/pkg/action" "helm.sh/helm/v3/pkg/action"
@ -77,18 +78,28 @@ func (s Service) installChart(icfg InstallConfig, ch *chart.Chart, vals ChartVal
return result, nil return result, nil
} }
func (s Service) List(releaseStatus string) ([]Releases, error) { func (s Service) List(releaseStatus string) ([]Release, error) {
listStates := new(action.ListStates) listStates := new(action.ListStates)
s.lister.SetState(listStates.FromName(releaseStatus))
state := action.ListAll
if releaseStatus != "" {
state = listStates.FromName(releaseStatus)
}
if state == action.ListUnknown {
return nil, errors.New("invalid release status")
}
s.lister.SetState(state)
s.lister.SetStateMask() s.lister.SetStateMask()
releases, err := s.lister.Run() releases, err := s.lister.Run()
if err != nil { if err != nil {
return nil, err return nil, err
} }
var helmReleases []Releases var helmReleases []Release
for _, eachRes := range releases { for _, eachRes := range releases {
r := Releases{Release: eachRes.Name, Namespace: eachRes.Namespace} r := Release{Name: eachRes.Name, Namespace: eachRes.Namespace}
helmReleases = append(helmReleases, r) helmReleases = append(helmReleases, r)
} }

@ -3,6 +3,7 @@ package api_test
import ( import (
"context" "context"
"errors" "errors"
"helm.sh/helm/v3/pkg/action"
"helm.sh/helm/v3/pkg/api" "helm.sh/helm/v3/pkg/api"
"testing" "testing"
@ -55,7 +56,7 @@ func (s *ServiceTestSuite) TestInstallShouldReturnErrorOnInvalidChart() {
s.installer.AssertNotCalled(t, "Run") s.installer.AssertNotCalled(t, "Run")
} }
func (s *ServiceTestSuite) TestInstallShouldReturnErrorOnFailedIntallRun() { func (s *ServiceTestSuite) TestInstallShouldReturnErrorOnFailedInstallRun() {
chartName := "stable/valid-chart" chartName := "stable/valid-chart"
cfg := api.InstallConfig{ cfg := api.InstallConfig{
Name: "some-component", Name: "some-component",
@ -100,6 +101,77 @@ func (s *ServiceTestSuite) TestInstallShouldReturnResultOnSuccess() {
s.installer.AssertExpectations(t) s.installer.AssertExpectations(t)
} }
func (s *ServiceTestSuite) TestListShouldReturnErrorOnFailureOfListRun() {
s.lister.On("SetState", action.ListDeployed)
s.lister.On("SetStateMask")
var releases []*release.Release
s.lister.On("Run").Return(releases, errors.New("cluster issue"))
releaseStatus := "deployed"
res, err := s.svc.List(releaseStatus)
t := s.T()
assert.Error(t, err, "cluster issue")
assert.Nil(t, res)
s.lister.AssertExpectations(t)
}
func (s *ServiceTestSuite) TestListShouldReturnAllReleasesIfNoFilterIsPassed() {
s.lister.On("SetState", action.ListAll)
s.lister.On("SetStateMask")
var releases []*release.Release
releases = append(releases,
&release.Release{Name: "test-release",
Namespace: "test-namespace",
Info: &release.Info{Status: release.StatusDeployed}})
s.lister.On("Run").Return(releases, nil)
releaseStatus := ""
res, err := s.svc.List(releaseStatus)
t := s.T()
assert.NoError(t, err)
require.NotNil(t, res)
var response []api.Release
response = append(response, api.Release{"test-release", "test-namespace"})
assert.Equal(t, len(res), 1)
assert.Equal(t, "test-release", response[0].Name)
assert.Equal(t, "test-namespace", response[0].Namespace)
s.lister.AssertExpectations(t)
}
func (s *ServiceTestSuite) TestListShouldReturnDeployedReleasesIfDeployedIsPassedAsFilter() {
s.lister.On("SetState", action.ListDeployed)
s.lister.On("SetStateMask")
var releases []*release.Release
s.lister.On("Run").Return(releases, nil)
releaseStatus := "deployed"
_, err := s.svc.List(releaseStatus)
t := s.T()
assert.NoError(t, err)
s.lister.AssertExpectations(t)
}
func (s *ServiceTestSuite) TestListShouldReturnErrorIfInvalidStatusIsPassedAsFilter() {
releaseStatus := "invalid"
_, err := s.svc.List(releaseStatus)
t := s.T()
assert.Error(t, err, "invalid release status")
}
func TestServiceSuite(t *testing.T) { func TestServiceSuite(t *testing.T) {
suite.Run(t, new(ServiceTestSuite)) suite.Run(t, new(ServiceTestSuite))
} }
Loading…
Cancel
Save