Files
narratio/internal/config/document_configkit_test.go

57 lines
1.9 KiB
Go

package config
import (
"bytes"
"os"
"path/filepath"
"strings"
"testing"
)
func TestSingleSourceDocumentsRejectConfigKitDirectives(t *testing.T) {
dir := t.TempDir()
campaignPath := filepath.Join(dir, "campaign.yml")
if err := os.WriteFile(campaignPath, []byte("configkit:\n imports: []\ncampaign_id: sample\n"), 0o644); err != nil {
t.Fatal(err)
}
tests := []struct {
name string
load func() error
}{
{name: "campaign", load: func() error { _, err := LoadCampaign(campaignPath); return err }},
{name: "session", load: func() error {
_, err := LoadSessionBytesWithOptions("session.yml", []byte("configkit:\n imports: []\nsession_id: sample\n"), SessionLoadOptions{})
return err
}},
{name: "party", load: func() error {
_, err := ParseParty([]byte("configkit:\n imports: []\nschema_version: narratio.party.v1\ncharacters: {}\n"))
return err
}},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
if err := test.load(); err == nil || !strings.Contains(err.Error(), "import.disabled") {
t.Fatalf("load error = %v, want disabled-import diagnostic", err)
}
})
}
}
func TestInspectedDocumentsEnforceConfigKitSizeLimit(t *testing.T) {
tooLarge := bytes.Repeat([]byte{' '}, int(maxConfigDocumentBytes)+1)
if _, err := LoadSessionBytesWithOptions("session.yml", tooLarge, SessionLoadOptions{}); err == nil || !strings.Contains(err.Error(), "exceeds") {
t.Fatalf("oversized session error = %v", err)
}
if _, err := ParseParty(tooLarge); err == nil || !strings.Contains(err.Error(), "exceeds") {
t.Fatalf("oversized party error = %v", err)
}
path := filepath.Join(t.TempDir(), "session.yml")
if err := os.WriteFile(path, tooLarge, 0o644); err != nil {
t.Fatal(err)
}
if _, err := LoadSession(path); err == nil || !strings.Contains(err.Error(), "limit") {
t.Fatalf("oversized local session error = %v", err)
}
}