89 lines
3.2 KiB
Go
89 lines
3.2 KiB
Go
package discovery_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/shcizo/package-updater/internal/discovery"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestParseComposeLabels_Success(t *testing.T) {
|
|
labels := map[string]string{
|
|
"com.docker.compose.project": "myapp-prod",
|
|
"com.docker.compose.service": "web",
|
|
"com.docker.compose.project.working_dir": "/home/shcizo/self-hosted/myapp-prod",
|
|
"com.docker.compose.project.config_files": "/home/shcizo/self-hosted/myapp-prod/docker-compose.yml",
|
|
"se.shcizo.auto-update": "true",
|
|
}
|
|
got, err := discovery.ParseComposeLabels(labels)
|
|
require.NoError(t, err)
|
|
require.Equal(t, "myapp-prod", got.Project)
|
|
require.Equal(t, "web", got.Service)
|
|
require.Equal(t, "/home/shcizo/self-hosted/myapp-prod", got.WorkingDir)
|
|
require.Equal(t, []string{"/home/shcizo/self-hosted/myapp-prod/docker-compose.yml"}, got.ConfigFiles)
|
|
}
|
|
|
|
func TestParseComposeLabels_MultipleConfigFiles(t *testing.T) {
|
|
labels := map[string]string{
|
|
"com.docker.compose.project": "myapp",
|
|
"com.docker.compose.service": "web",
|
|
"com.docker.compose.project.working_dir": "/srv/myapp",
|
|
"com.docker.compose.project.config_files": "/srv/myapp/docker-compose.yml,/srv/myapp/docker-compose.prod.yml",
|
|
}
|
|
got, err := discovery.ParseComposeLabels(labels)
|
|
require.NoError(t, err)
|
|
require.Equal(t, []string{
|
|
"/srv/myapp/docker-compose.yml",
|
|
"/srv/myapp/docker-compose.prod.yml",
|
|
}, got.ConfigFiles)
|
|
}
|
|
|
|
func TestParseComposeLabels_MissingFieldsError(t *testing.T) {
|
|
cases := []struct {
|
|
name string
|
|
missing string
|
|
labels map[string]string
|
|
}{
|
|
{"project", "com.docker.compose.project", map[string]string{
|
|
"com.docker.compose.service": "web",
|
|
"com.docker.compose.project.working_dir": "/x",
|
|
"com.docker.compose.project.config_files": "/x/y.yml",
|
|
}},
|
|
{"service", "com.docker.compose.service", map[string]string{
|
|
"com.docker.compose.project": "p",
|
|
"com.docker.compose.project.working_dir": "/x",
|
|
"com.docker.compose.project.config_files": "/x/y.yml",
|
|
}},
|
|
{"working_dir", "com.docker.compose.project.working_dir", map[string]string{
|
|
"com.docker.compose.project": "p",
|
|
"com.docker.compose.service": "web",
|
|
"com.docker.compose.project.config_files": "/x/y.yml",
|
|
}},
|
|
{"config_files", "com.docker.compose.project.config_files", map[string]string{
|
|
"com.docker.compose.project": "p",
|
|
"com.docker.compose.service": "web",
|
|
"com.docker.compose.project.working_dir": "/x",
|
|
}},
|
|
}
|
|
for _, c := range cases {
|
|
t.Run(c.name, func(t *testing.T) {
|
|
_, err := discovery.ParseComposeLabels(c.labels)
|
|
require.Error(t, err)
|
|
require.Contains(t, err.Error(), c.missing)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestHasOptIn(t *testing.T) {
|
|
require.True(t, discovery.HasOptIn(map[string]string{
|
|
"se.shcizo.auto-update": "true",
|
|
}, "se.shcizo.auto-update"))
|
|
require.False(t, discovery.HasOptIn(map[string]string{
|
|
"se.shcizo.auto-update": "false",
|
|
}, "se.shcizo.auto-update"))
|
|
require.False(t, discovery.HasOptIn(map[string]string{
|
|
"se.shcizo.auto-update": "TRUE",
|
|
}, "se.shcizo.auto-update"))
|
|
require.False(t, discovery.HasOptIn(map[string]string{}, "se.shcizo.auto-update"))
|
|
}
|