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")) }