package config import "testing" func TestValidatePublishTransformPolicy(t *testing.T) { tests := publishTransformPolicyCases() for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { err := ValidatePublishTransformPolicy(tt.publish, tt.transform) if tt.wantErr && err == nil { t.Fatal("ValidatePublishTransformPolicy() error = nil, want error") } if !tt.wantErr && err != nil { t.Fatalf("ValidatePublishTransformPolicy() error = %v", err) } }) } } func TestValidateChecksPublishTransformPolicy(t *testing.T) { tests := publishTransformPolicyCases() for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { cfg := Config{Pipelines: []Pipeline{{ ID: "reports", Source: Backend{ Backend: BackendLocal, Path: "/source", }, Destinations: []Destination{{ ID: "archive", Backend: BackendLocal, Path: "/destination", Publish: &tt.publish, Transform: tt.transform, }}, }}} ApplyDefaults(&cfg) err := Validate(cfg) if tt.wantErr && err == nil { t.Fatal("Validate() error = nil, want error") } if !tt.wantErr && err != nil { t.Fatalf("Validate() error = %v", err) } }) } } type publishTransformPolicyCase struct { name string publish PublishPolicy transform Transform wantErr bool } func publishTransformPolicyCases() []publishTransformPolicyCase { return []publishTransformPolicyCase{ { name: "source only allowed", publish: PublishPolicy{Source: true}, }, { name: "html only sidecar allowed", publish: PublishPolicy{HTML: true}, transform: Transform{MarkdownToHTML: &MarkdownToHTML{ Enabled: true, Mode: TransformModeSidecar, }}, }, { name: "source and html sidecar allowed", publish: PublishPolicy{Source: true, HTML: true}, transform: Transform{MarkdownToHTML: &MarkdownToHTML{ Enabled: true, Mode: TransformModeSidecar, }}, }, { name: "no outputs rejected", publish: PublishPolicy{}, wantErr: true, }, { name: "html without transform rejected", publish: PublishPolicy{HTML: true}, wantErr: true, }, { name: "html with disabled transform rejected", publish: PublishPolicy{HTML: true}, transform: Transform{MarkdownToHTML: &MarkdownToHTML{ Enabled: false, Mode: TransformModeSidecar, }}, wantErr: true, }, { name: "html with wrong mode rejected", publish: PublishPolicy{HTML: true}, transform: Transform{MarkdownToHTML: &MarkdownToHTML{ Enabled: true, Mode: "inline", }}, wantErr: true, }, { name: "enabled markdown wrong mode rejected", publish: PublishPolicy{Source: true}, transform: Transform{MarkdownToHTML: &MarkdownToHTML{ Enabled: true, Mode: "inline", }}, wantErr: true, }, { name: "disabled markdown empty mode allowed", publish: PublishPolicy{Source: true}, transform: Transform{MarkdownToHTML: &MarkdownToHTML{ Enabled: false, }}, }, { name: "disabled markdown sidecar mode allowed", publish: PublishPolicy{Source: true}, transform: Transform{MarkdownToHTML: &MarkdownToHTML{ Enabled: false, Mode: TransformModeSidecar, }}, }, { name: "disabled markdown wrong mode rejected", publish: PublishPolicy{Source: true}, transform: Transform{MarkdownToHTML: &MarkdownToHTML{ Enabled: false, Mode: "inline", }}, wantErr: true, }, } }