Files
portainer/api/http/handler/customtemplates/utils_test.go
T

174 lines
4.2 KiB
Go

package customtemplates
import (
"testing"
portainer "github.com/portainer/portainer/api"
"github.com/portainer/portainer/api/dataservices"
"github.com/portainer/portainer/api/datastore"
gittypes "github.com/portainer/portainer/api/git/types"
"github.com/stretchr/testify/require"
)
func TestPopulateGitConfig_NilArtifactSourcesIsNoOp(t *testing.T) {
t.Parallel()
_, store := datastore.MustNewTestStore(t, false, true)
template := &portainer.CustomTemplate{ID: 1}
err := store.ViewTx(func(tx dataservices.DataStoreTx) error {
populateGitConfig(tx, template)
return nil
})
require.NoError(t, err)
require.Nil(t, template.GitConfig)
}
func TestPopulateGitConfig_EmptySourceIDsIsNoOp(t *testing.T) {
t.Parallel()
_, store := datastore.MustNewTestStore(t, false, true)
template := &portainer.CustomTemplate{
ID: 1,
ArtifactSources: &portainer.ArtifactSources{
SourceIDs: []portainer.SourceID{},
},
}
err := store.ViewTx(func(tx dataservices.DataStoreTx) error {
populateGitConfig(tx, template)
return nil
})
require.NoError(t, err)
require.Nil(t, template.GitConfig)
}
func TestPopulateGitConfig_SourceWithNilGitConfigIsNoOp(t *testing.T) {
t.Parallel()
_, store := datastore.MustNewTestStore(t, false, true)
var srcID portainer.SourceID
err := store.UpdateTx(func(tx dataservices.DataStoreTx) error {
src := &portainer.Source{Type: portainer.SourceTypeGit}
err := tx.Source().Create(src)
require.NoError(t, err)
srcID = src.ID
return nil
})
require.NoError(t, err)
template := &portainer.CustomTemplate{
ID: 1,
ArtifactSources: &portainer.ArtifactSources{
SourceIDs: []portainer.SourceID{srcID},
},
}
err = store.ViewTx(func(tx dataservices.DataStoreTx) error {
populateGitConfig(tx, template)
return nil
})
require.NoError(t, err)
require.Nil(t, template.GitConfig)
}
func TestPopulateGitConfig_PopulatesFromSourceAndArtifact(t *testing.T) {
t.Parallel()
_, store := datastore.MustNewTestStore(t, false, true)
var srcID portainer.SourceID
err := store.UpdateTx(func(tx dataservices.DataStoreTx) error {
src := &portainer.Source{
Type: portainer.SourceTypeGit,
GitConfig: &gittypes.RepoConfig{
URL: "https://github.com/example/repo",
TLSSkipVerify: true,
},
}
err := tx.Source().Create(src)
require.NoError(t, err)
srcID = src.ID
return nil
})
require.NoError(t, err)
template := &portainer.CustomTemplate{
ID: 1,
ArtifactSources: &portainer.ArtifactSources{
Artifact: portainer.Artifact{
ReferenceName: "refs/heads/main",
ConfigFilePath: "docker-compose.yml",
ConfigHash: "abc123",
},
SourceIDs: []portainer.SourceID{srcID},
},
}
err = store.ViewTx(func(tx dataservices.DataStoreTx) error {
populateGitConfig(tx, template)
return nil
})
require.NoError(t, err)
require.NotNil(t, template.GitConfig)
require.Equal(t, "https://github.com/example/repo", template.GitConfig.URL)
require.True(t, template.GitConfig.TLSSkipVerify)
require.Equal(t, "refs/heads/main", template.GitConfig.ReferenceName)
require.Equal(t, "docker-compose.yml", template.GitConfig.ConfigFilePath)
require.Equal(t, "abc123", template.GitConfig.ConfigHash)
}
func TestPopulateGitConfig_StripsPassword(t *testing.T) {
t.Parallel()
_, store := datastore.MustNewTestStore(t, false, true)
var srcID portainer.SourceID
err := store.UpdateTx(func(tx dataservices.DataStoreTx) error {
src := &portainer.Source{
Type: portainer.SourceTypeGit,
GitConfig: &gittypes.RepoConfig{
URL: "https://github.com/example/repo",
Authentication: &gittypes.GitAuthentication{
Username: "user",
Password: "secret",
},
},
}
err := tx.Source().Create(src)
require.NoError(t, err)
srcID = src.ID
return nil
})
require.NoError(t, err)
template := &portainer.CustomTemplate{
ID: 1,
ArtifactSources: &portainer.ArtifactSources{
SourceIDs: []portainer.SourceID{srcID},
},
}
err = store.ViewTx(func(tx dataservices.DataStoreTx) error {
populateGitConfig(tx, template)
return nil
})
require.NoError(t, err)
require.NotNil(t, template.GitConfig)
require.NotNil(t, template.GitConfig.Authentication)
require.Equal(t, "user", template.GitConfig.Authentication.Username)
require.Empty(t, template.GitConfig.Authentication.Password)
}