oh-my-posh/src/segments/cds_test.go
2022-03-09 10:10:55 +01:00

147 lines
4.3 KiB
Go

package segments
import (
"fmt"
"oh-my-posh/environment"
"oh-my-posh/mock"
"oh-my-posh/properties"
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
)
func TestCdsSegment(t *testing.T) {
cases := []struct {
Case string
ExpectedString string
ExpectedEnabled bool
File string
Template string
Version string
PackageJSON string
DisplayMode string
}{
{
Case: "1) cds 5.5.0 - file .cdsrc.json present",
ExpectedString: "5.5.0",
ExpectedEnabled: true,
File: ".cdsrc.json",
Version: "@sap/cds: 5.5.0\n@sap/cds-compiler: 2.7.0\n@sap/cds-dk: 4.5.3",
DisplayMode: DisplayModeFiles,
},
{
Case: "2) cds 5.5.1 - file some.cds",
ExpectedString: "5.5.1",
ExpectedEnabled: true,
File: "some.cds",
Version: "@sap/cds: 5.5.1\n@sap/cds-compiler: 2.7.0\n@sap/cds-dk: 4.5.3",
DisplayMode: DisplayModeFiles,
},
{
Case: "3) cds 5.5.2 - no files",
ExpectedString: "",
ExpectedEnabled: false,
DisplayMode: DisplayModeFiles,
},
{
Case: "4) cds 5.5.3 - package.json dependency",
ExpectedString: "5.5.3",
ExpectedEnabled: true,
Version: "@sap/cds: 5.5.3\n@sap/cds-compiler: 2.7.0\n@sap/cds-dk: 4.5.3",
PackageJSON: "{ \"name\": \"my-app\",\"dependencies\": { \"@sap/cds\": \"^5\" } }",
DisplayMode: DisplayModeContext,
},
{
Case: "4) cds 5.5.4 - package.json dependency, major + minor",
ExpectedString: "5.5",
ExpectedEnabled: true,
Template: "{{ .Major }}.{{ .Minor }}",
Version: "@sap/cds: 5.5.4\n@sap/cds-compiler: 2.7.0\n@sap/cds-dk: 4.5.3",
PackageJSON: "{ \"name\": \"my-app\",\"dependencies\": { \"@sap/cds\": \"^5\" } }",
DisplayMode: DisplayModeContext,
},
{
Case: "5) cds 5.5.5 - package.json present, no dependency, no files",
ExpectedString: "",
ExpectedEnabled: false,
Version: "@sap/cds: 5.5.5\n@sap/cds-compiler: 2.7.0\n@sap/cds-dk: 4.5.3",
PackageJSON: "{ \"name\": \"my-app\",\"dependencies\": { \"@sap/some\": \"^5\" } }",
DisplayMode: DisplayModeContext,
},
{
Case: "6) cds 5.5.9 - display always",
ExpectedString: "5.5.9",
ExpectedEnabled: true,
Version: "@sap/cds: 5.5.9\n@sap/cds-compiler: 2.7.0\n@sap/cds-dk: 4.5.3",
PackageJSON: "{ \"name\": \"my-app\",\"dependencies\": { \"@sap/cds\": \"^5\" } }",
DisplayMode: DisplayModeAlways,
},
{
Case: "7) cds 5.5.9 - package.json, no dependencies section",
ExpectedString: "",
ExpectedEnabled: false,
Version: "@sap/cds: 5.5.9\n@sap/cds-compiler: 2.7.0\n@sap/cds-dk: 4.5.3",
PackageJSON: "{ \"name\": \"my-app\" }",
DisplayMode: DisplayModeContext,
},
{
Case: "8) cds 5.5.0 - file .cdsrc-private.json present",
ExpectedString: "5.5.0",
ExpectedEnabled: true,
File: ".cdsrc-private.json",
Version: "@sap/cds: 5.5.0\n@sap/cds-compiler: 2.7.0\n@sap/cds-dk: 4.5.3",
DisplayMode: DisplayModeFiles,
},
}
for _, tc := range cases {
var env = new(mock.MockedEnvironment)
env.On("HasCommand", "cds").Return(true)
env.On("RunCommand", "cds", []string{"--version"}).Return(tc.Version, nil)
env.On("Pwd").Return("/usr/home/dev/my-app")
env.On("Home").Return("/usr/home")
if tc.PackageJSON != "" {
env.On("HasFiles", "package.json").Return(true)
env.On("FileContent", "package.json").Return(tc.PackageJSON)
} else {
env.On("HasFiles", "package.json").Return(false)
}
cds := &Cds{}
props := properties.Map{
"display_mode": tc.DisplayMode,
}
env.On("TemplateCache").Return(&environment.TemplateCache{
Env: make(map[string]string),
})
if tc.Template == "" {
tc.Template = cds.Template()
}
if tc.DisplayMode == "" {
tc.DisplayMode = DisplayModeContext
}
cds.Init(props, env)
for _, f := range cds.language.extensions {
match, err := filepath.Match(f, tc.File)
if err != nil {
t.Fail()
}
env.On("HasFiles", f).Return(match)
}
failMsg := fmt.Sprintf("Failed in case: %s", tc.Case)
assert.Equal(t, tc.ExpectedEnabled, cds.Enabled(), failMsg)
assert.Equal(t, tc.ExpectedString, renderTemplate(env, tc.Template, cds), failMsg)
}
}