diff --git a/go.mod b/go.mod index ab7006ccfc..a6f10e1d64 100644 --- a/go.mod +++ b/go.mod @@ -9,6 +9,7 @@ require ( github.com/schollz/progressbar/v3 v3.13.1 github.com/spf13/cobra v1.7.0 github.com/spf13/viper v1.15.0 + github.com/stretchr/testify v1.8.1 golang.org/x/term v0.7.0 k8s.io/api v0.26.3 k8s.io/apimachinery v0.26.3 @@ -46,6 +47,7 @@ require ( github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/pelletier/go-toml/v2 v2.0.7 // indirect github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect github.com/rivo/uniseg v0.4.4 // indirect github.com/spf13/afero v1.9.5 // indirect github.com/spf13/cast v1.5.0 // indirect diff --git a/pkg/analysis/analysis.go b/pkg/analysis/analysis.go index 611edb3407..0287ed59f9 100644 --- a/pkg/analysis/analysis.go +++ b/pkg/analysis/analysis.go @@ -103,7 +103,7 @@ func (a *Analysis) JsonOutput() ([]byte, error) { } result := JsonOutput{ - Problems: len(a.Results), + Problems: problems, Results: a.Results, Status: status, } diff --git a/pkg/analysis/analysis_test.go b/pkg/analysis/analysis_test.go new file mode 100644 index 0000000000..c3ec32c921 --- /dev/null +++ b/pkg/analysis/analysis_test.go @@ -0,0 +1,123 @@ +package analysis + +import ( + "encoding/json" + "fmt" + "github.com/k8sgpt-ai/k8sgpt/pkg/analyzer" + "github.com/stretchr/testify/require" + "testing" +) + +func TestAnalysis_NoProblemJsonOutput(t *testing.T) { + + analysis := Analysis{ + Results: []analyzer.Result{}, + Namespace: "default", + } + + expected := JsonOutput{ + Status: StateOK, + Problems: 0, + Results: []analyzer.Result{}, + } + + gotJson, err := analysis.JsonOutput() + if err != nil { + t.Error(err) + } + + got := JsonOutput{} + err = json.Unmarshal(gotJson, &got) + if err != nil { + t.Error(err) + } + + fmt.Println(got) + fmt.Println(expected) + + require.Equal(t, got, expected) +} + +func TestAnalysis_ProblemJsonOutput(t *testing.T) { + analysis := Analysis{ + Results: []analyzer.Result{ + { + "Deployment", + "test-deployment", + []string{"test-problem"}, + "test-solution", + "parent-resource"}, + }, + Namespace: "default", + } + + expected := JsonOutput{ + Status: StateProblemDetected, + Problems: 1, + Results: []analyzer.Result{ + {"Deployment", + "test-deployment", + []string{"test-problem"}, + "test-solution", + "parent-resource"}, + }, + } + + gotJson, err := analysis.JsonOutput() + if err != nil { + t.Error(err) + } + + got := JsonOutput{} + err = json.Unmarshal(gotJson, &got) + if err != nil { + t.Error(err) + } + + fmt.Println(got) + fmt.Println(expected) + + require.Equal(t, got, expected) +} + +func TestAnalysis_MultipleProblemJsonOutput(t *testing.T) { + analysis := Analysis{ + Results: []analyzer.Result{ + { + "Deployment", + "test-deployment", + []string{"test-problem", "another-test-problem"}, + "test-solution", + "parent-resource"}, + }, + Namespace: "default", + } + + expected := JsonOutput{ + Status: StateProblemDetected, + Problems: 2, + Results: []analyzer.Result{ + {"Deployment", + "test-deployment", + []string{"test-problem", "another-test-problem"}, + "test-solution", + "parent-resource"}, + }, + } + + gotJson, err := analysis.JsonOutput() + if err != nil { + t.Error(err) + } + + got := JsonOutput{} + err = json.Unmarshal(gotJson, &got) + if err != nil { + t.Error(err) + } + + fmt.Println(got) + fmt.Println(expected) + + require.Equal(t, got, expected) +}