85 lines
2.5 KiB
Go
85 lines
2.5 KiB
Go
package app
|
|
|
|
import (
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"gitea.maximumdirect.net/eric/narratio/internal/config"
|
|
)
|
|
|
|
func TestResolveCampaignConfigPathCampaignFileWins(t *testing.T) {
|
|
explicit := filepath.Join(t.TempDir(), "custom-campaign.yml")
|
|
got, err := resolveCampaignConfigPath(&config.PipelineConfig{}, "", explicit)
|
|
if err != nil {
|
|
t.Fatalf("resolveCampaignConfigPath() error = %v", err)
|
|
}
|
|
if got != explicit {
|
|
t.Fatalf("path = %q, want explicit path %q", got, explicit)
|
|
}
|
|
}
|
|
|
|
func TestResolveCampaignConfigPathUsesSelectedCampaignID(t *testing.T) {
|
|
dir := t.TempDir()
|
|
pipelineCfg := &config.PipelineConfig{}
|
|
pipelineCfg.Campaigns.Root = dir
|
|
|
|
got, err := resolveCampaignConfigPath(pipelineCfg, "icewind", "")
|
|
if err != nil {
|
|
t.Fatalf("resolveCampaignConfigPath() error = %v", err)
|
|
}
|
|
want := filepath.Join(dir, "icewind", "campaign.yml")
|
|
if got != filepath.Clean(want) {
|
|
t.Fatalf("path = %q, want %q", got, filepath.Clean(want))
|
|
}
|
|
}
|
|
|
|
func TestResolveCampaignConfigPathUsesDefaultCampaignID(t *testing.T) {
|
|
dir := t.TempDir()
|
|
pipelineCfg := &config.PipelineConfig{}
|
|
pipelineCfg.Campaigns.Root = dir
|
|
pipelineCfg.Campaigns.DefaultCampaignID = "dilfs"
|
|
|
|
got, err := resolveCampaignConfigPath(pipelineCfg, "", "")
|
|
if err != nil {
|
|
t.Fatalf("resolveCampaignConfigPath() error = %v", err)
|
|
}
|
|
want := filepath.Join(dir, "dilfs", "campaign.yml")
|
|
if got != filepath.Clean(want) {
|
|
t.Fatalf("path = %q, want %q", got, filepath.Clean(want))
|
|
}
|
|
}
|
|
|
|
func TestResolveCampaignConfigPathRejectsCampaignIDAndFile(t *testing.T) {
|
|
_, err := resolveCampaignConfigPath(&config.PipelineConfig{}, "dilfs", filepath.Join(t.TempDir(), "campaign.yml"))
|
|
if err == nil {
|
|
t.Fatal("expected error, got nil")
|
|
}
|
|
if !strings.Contains(err.Error(), "mutually exclusive") {
|
|
t.Fatalf("error = %q, want mutual exclusion", err.Error())
|
|
}
|
|
}
|
|
|
|
func TestResolveCampaignConfigPathRequiresCampaignSelection(t *testing.T) {
|
|
_, err := resolveCampaignConfigPath(&config.PipelineConfig{}, "", "")
|
|
if err == nil {
|
|
t.Fatal("expected error, got nil")
|
|
}
|
|
if !strings.Contains(err.Error(), "no campaign selected") {
|
|
t.Fatalf("error = %q, want missing selection guidance", err.Error())
|
|
}
|
|
}
|
|
|
|
func TestResolveCampaignConfigPathRejectsPathLikeCampaignID(t *testing.T) {
|
|
pipelineCfg := &config.PipelineConfig{}
|
|
pipelineCfg.Campaigns.Root = t.TempDir()
|
|
|
|
_, err := resolveCampaignConfigPath(pipelineCfg, "../icewind", "")
|
|
if err == nil {
|
|
t.Fatal("expected error, got nil")
|
|
}
|
|
if !strings.Contains(err.Error(), "single path segment") {
|
|
t.Fatalf("error = %q, want path segment guidance", err.Error())
|
|
}
|
|
}
|