mirror of
https://github.com/SAP/jenkins-library.git
synced 2024-12-14 11:03:09 +02:00
9e8e5da394
* [refactoring] Make room for other upload action: move package In the near future we will have more upload actions, like SOLMAN, RFC. Here we prepare the package structure for that. * don't use aliasing * rename entities (no leading CTS)
162 lines
5.2 KiB
Go
162 lines
5.2 KiB
Go
package cts
|
|
|
|
import (
|
|
"github.com/SAP/jenkins-library/pkg/mock"
|
|
"github.com/SAP/jenkins-library/pkg/piperutils"
|
|
"github.com/stretchr/testify/assert"
|
|
"testing"
|
|
)
|
|
|
|
func TestUploadCTS(t *testing.T) {
|
|
|
|
fMock := &mock.FilesMock{}
|
|
files = fMock
|
|
defer func() { files = piperutils.Files{} }()
|
|
|
|
t.Run("npm install command tests", func(t *testing.T) {
|
|
cmd := mock.ShellMockRunner{}
|
|
action := UploadAction{
|
|
Connection: Connection{Endpoint: "", Client: "", User: "me", Password: "******"},
|
|
Application: Application{Pack: "", Name: "", Desc: ""},
|
|
Node: Node{
|
|
DeployDependencies: []string{"@sap/my-dep"},
|
|
InstallOpts: []string{"--verbose", "--registry", "https://registry.example.org"},
|
|
},
|
|
TransportRequestID: "12345678",
|
|
ConfigFile: "ui5-deploy.yaml",
|
|
DeployUser: "node",
|
|
}
|
|
err := action.Perform(&cmd)
|
|
if assert.NoError(t, err) {
|
|
assert.Regexp(
|
|
t,
|
|
"(?m)^npm install --global --verbose --registry https://registry.example.org @sap/my-dep$",
|
|
cmd.Calls[0],
|
|
"Expected npm install command not found",
|
|
)
|
|
assert.Regexp(
|
|
t,
|
|
"(?m)^su node$",
|
|
cmd.Calls[0],
|
|
"Expected switch user statement not found",
|
|
)
|
|
}
|
|
})
|
|
|
|
t.Run("deploy command tests", func(t *testing.T) {
|
|
t.Run("all possible values provided", func(t *testing.T) {
|
|
cmd := mock.ShellMockRunner{}
|
|
action := UploadAction{
|
|
Connection: Connection{Endpoint: "https://example.org:8080/cts", Client: "001", User: "me", Password: "******"},
|
|
Application: Application{Pack: "abapPackage", Name: "appName", Desc: "the Desc"},
|
|
Node: Node{
|
|
DeployDependencies: []string{},
|
|
InstallOpts: []string{},
|
|
},
|
|
TransportRequestID: "12345678",
|
|
ConfigFile: "ui5-deploy.yaml",
|
|
DeployUser: "doesNotMatterInThisCase",
|
|
}
|
|
|
|
err := action.Perform(&cmd)
|
|
if assert.NoError(t, err) {
|
|
assert.Regexp(
|
|
t,
|
|
"(?m)^fiori deploy --failfast --yes --username ABAP_USER --password ABAP_PASSWORD --description \"the Desc\" --noConfig --url https://example.org:8080/cts --client 001 --transport 12345678 --package abapPackage --name appName$",
|
|
cmd.Calls[0],
|
|
"Expected fiori deploy command not found",
|
|
)
|
|
assert.Equal(t, []string{"ABAP_USER=me", "ABAP_PASSWORD=******"}, cmd.Env)
|
|
}
|
|
})
|
|
|
|
t.Run("all possible values omitted", func(t *testing.T) {
|
|
// In this case the values are expected inside the fiori deploy config file
|
|
cmd := mock.ShellMockRunner{}
|
|
action := UploadAction{
|
|
Connection: Connection{Endpoint: "", Client: "", User: "me", Password: "******"},
|
|
Application: Application{Pack: "", Name: "", Desc: ""},
|
|
Node: Node{
|
|
DeployDependencies: []string{},
|
|
InstallOpts: []string{},
|
|
},
|
|
TransportRequestID: "12345678",
|
|
ConfigFile: "ui5-deploy.yaml",
|
|
DeployUser: "doesNotMatterInThisCase",
|
|
}
|
|
err := action.Perform(&cmd)
|
|
|
|
if assert.NoError(t, err) {
|
|
assert.Regexp(
|
|
t,
|
|
"(?m)^fiori deploy --failfast --yes --username ABAP_USER --password ABAP_PASSWORD --description \"Deployed with Piper based on SAP Fiori tools\" --noConfig --transport 12345678$",
|
|
cmd.Calls[0],
|
|
"Expected fiori deploy command not found",
|
|
)
|
|
assert.Equal(t, []string{"ABAP_USER=me", "ABAP_PASSWORD=******"}, cmd.Env)
|
|
}
|
|
})
|
|
})
|
|
|
|
t.Run("config file releated tests", func(t *testing.T) {
|
|
connection := Connection{Endpoint: "", Client: "", User: "me", Password: "******"}
|
|
app := Application{Pack: "", Name: "", Desc: ""}
|
|
node := Node{
|
|
DeployDependencies: []string{},
|
|
InstallOpts: []string{},
|
|
}
|
|
t.Run("default config file exists", func(t *testing.T) {
|
|
filesMock := mock.FilesMock{}
|
|
filesMock.AddFile("ui5-deploy.yaml", []byte{})
|
|
files = &filesMock
|
|
defer func() { files = fMock }()
|
|
cmd := mock.ShellMockRunner{}
|
|
action := UploadAction{
|
|
Connection: connection,
|
|
Application: app,
|
|
Node: node,
|
|
TransportRequestID: "12345678",
|
|
ConfigFile: "ui5-deploy.yaml",
|
|
DeployUser: "doesNotMatterInThisCase",
|
|
}
|
|
err := action.Perform(&cmd)
|
|
if assert.NoError(t, err) {
|
|
assert.Contains(t, cmd.Calls[0], " --config \"ui5-deploy.yaml\" ")
|
|
}
|
|
})
|
|
t.Run("Config file exists", func(t *testing.T) {
|
|
filesMock := mock.FilesMock{}
|
|
filesMock.AddFile("my-ui5-deploy.yaml", []byte{})
|
|
files = &filesMock
|
|
defer func() { files = fMock }()
|
|
cmd := mock.ShellMockRunner{}
|
|
action := UploadAction{
|
|
Connection: connection,
|
|
Application: app,
|
|
Node: node,
|
|
TransportRequestID: "12345678",
|
|
ConfigFile: "my-ui5-deploy.yaml",
|
|
DeployUser: "doesNotMatterInThisCase",
|
|
}
|
|
|
|
err := action.Perform(&cmd)
|
|
if assert.NoError(t, err) {
|
|
assert.Contains(t, cmd.Calls[0], " --config \"my-ui5-deploy.yaml\" ")
|
|
}
|
|
})
|
|
t.Run("Config file missing", func(t *testing.T) {
|
|
cmd := mock.ShellMockRunner{}
|
|
action := UploadAction{
|
|
Connection: connection,
|
|
Application: app,
|
|
Node: node,
|
|
TransportRequestID: "12345678",
|
|
ConfigFile: "my-ui5-deploy.yaml",
|
|
DeployUser: "doesNotMatterInThisCase",
|
|
}
|
|
err := action.Perform(&cmd)
|
|
assert.EqualError(t, err, "Configured deploy config file 'my-ui5-deploy.yaml' does not exists")
|
|
})
|
|
})
|
|
}
|