Files
notarius/internal/modules/dnd/shared/references_test.go

61 lines
1.9 KiB
Go

package shared
import (
"reflect"
"testing"
"gitea.maximumdirect.net/eric/notarius/internal/framework/contracts"
)
func TestReferenceMediaTypesReturnsDefensiveCopy(t *testing.T) {
want := []string{
"application/json",
"application/x-yaml",
"application/yaml",
"text/markdown",
"text/plain",
}
got := ReferenceMediaTypes()
if !reflect.DeepEqual(got, want) {
t.Fatalf("ReferenceMediaTypes() = %#v, want %#v", got, want)
}
got[0] = "changed"
if again := ReferenceMediaTypes(); again[0] != "application/json" {
t.Fatalf("ReferenceMediaTypes() reused backing storage: %#v", again)
}
}
func TestReferenceSlotsUseDescriptionsAndExpectedOrder(t *testing.T) {
descriptions := ReferenceSlotDescriptions{
Glossary: "Glossary reference",
Party: "Party reference",
Players: "Players reference",
Roster: "Roster reference",
}
got := ReferenceSlots(descriptions)
want := []contracts.ReferenceSlot{
{Name: "glossary", Description: descriptions.Glossary, AcceptedMediaTypes: ReferenceMediaTypes()},
{Name: "party", Description: descriptions.Party, AcceptedMediaTypes: ReferenceMediaTypes()},
{Name: "players", Description: descriptions.Players, AcceptedMediaTypes: ReferenceMediaTypes()},
{Name: "roster", Description: descriptions.Roster, AcceptedMediaTypes: ReferenceMediaTypes()},
}
if !reflect.DeepEqual(got, want) {
t.Fatalf("ReferenceSlots() = %#v, want %#v", got, want)
}
}
func TestReferenceSlotsReturnDefensiveCopies(t *testing.T) {
first := ReferenceSlots(ReferenceSlotDescriptions{})
second := ReferenceSlots(ReferenceSlotDescriptions{})
first[0].Name = "changed"
first[0].AcceptedMediaTypes[0] = "changed"
if second[0].Name != "glossary" {
t.Fatalf("ReferenceSlots() reused slot slice: %#v", second)
}
if second[0].AcceptedMediaTypes[0] != "application/json" {
t.Fatalf("ReferenceSlots() reused media type slice: %#v", second)
}
}