Wiki List Support
This commit is contained in:
@@ -311,6 +311,99 @@ func TestWikiTemplateEachBlockRendersExplicitClassProgressionTable(t *testing.T)
|
||||
}
|
||||
}
|
||||
|
||||
func TestWikiTemplateEachBlockRendersClassSkillsAsIndividualListItems(t *testing.T) {
|
||||
ctx := &wikiContext{
|
||||
wikiDataProviders: map[string]wikiDataProviderDefinition{
|
||||
"ClassSkills": {Source: "class_skills"},
|
||||
},
|
||||
classSkillTables: map[string]wikiTable{
|
||||
"classes/skills:fighter": {
|
||||
Rows: []map[string]any{
|
||||
{"SkillIndex": "1", "ClassSkill": "1"},
|
||||
{"SkillIndex": "2", "ClassSkill": "1"},
|
||||
{"SkillIndex": "3", "ClassSkill": "0"},
|
||||
},
|
||||
},
|
||||
},
|
||||
skillIDToKey: map[int]string{
|
||||
1: "skills:athletics",
|
||||
2: "skills:parry",
|
||||
3: "skills:secret",
|
||||
},
|
||||
skillRows: map[string]map[string]any{
|
||||
"skills:athletics": {"Name": "Athletics"},
|
||||
"skills:parry": {"Name": "Parry"},
|
||||
"skills:secret": {"Name": "Secret"},
|
||||
},
|
||||
}
|
||||
page := wikiTemplatePage{
|
||||
PageID: "classes:fighter",
|
||||
Category: "classes",
|
||||
Key: "classes:fighter",
|
||||
Title: "Fighter",
|
||||
Row: map[string]any{
|
||||
"SkillsTable": map[string]any{"table": "classes/skills:fighter"},
|
||||
},
|
||||
}
|
||||
|
||||
template := `<ul class="wiki-list wiki-class-skills">
|
||||
{{#each ClassSkills}}
|
||||
<li>{{SkillKey|link:SkillName|wiki}}</li>
|
||||
{{/each}}
|
||||
</ul>`
|
||||
|
||||
got, err := ctx.renderWikiTemplateString("classes.html", template, page)
|
||||
if err != nil {
|
||||
t.Fatalf("render template: %v", err)
|
||||
}
|
||||
for _, want := range []string{
|
||||
`<li>[[skills/athletics|Athletics]]</li>`,
|
||||
`<li>[[skills/parry|Parry]]</li>`,
|
||||
} {
|
||||
if !strings.Contains(got, want) {
|
||||
t.Fatalf("expected rendered output to contain %q:\n%s", want, got)
|
||||
}
|
||||
}
|
||||
for _, reject := range []string{"Athletics, ", "Secret"} {
|
||||
if strings.Contains(got, reject) {
|
||||
t.Fatalf("expected rendered output not to contain %q:\n%s", reject, got)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestWikiTemplateListFilterRendersSliceAsListItems(t *testing.T) {
|
||||
ctx := &wikiContext{}
|
||||
page := wikiTemplatePage{
|
||||
PageID: "classes:fighter",
|
||||
Category: "classes",
|
||||
Key: "classes:fighter",
|
||||
Title: "Fighter",
|
||||
Row: map[string]any{
|
||||
"GrantedFeats": []string{
|
||||
"[[feat/literate|Literate]]",
|
||||
"[[feat/armor-proficiency-light|Armor Proficiency (light)]]",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
got, err := ctx.renderWikiTemplateString("classes.html", `<td>{{GrantedFeats|list:"wiki-list wiki-inline-list"}}</td>`, page)
|
||||
if err != nil {
|
||||
t.Fatalf("render template: %v", err)
|
||||
}
|
||||
for _, want := range []string{
|
||||
`<td><ul class="wiki-list wiki-inline-list">`,
|
||||
`<li>[[feat/literate|Literate]]</li>`,
|
||||
`<li>[[feat/armor-proficiency-light|Armor Proficiency (light)]]</li>`,
|
||||
} {
|
||||
if !strings.Contains(got, want) {
|
||||
t.Fatalf("expected rendered output to contain %q:\n%s", want, got)
|
||||
}
|
||||
}
|
||||
if strings.Contains(got, "Literate]], [[") {
|
||||
t.Fatalf("expected list filter not to render comma-separated links:\n%s", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestWikiTemplateCanRenderRacialFactsAndFeatListInHTML(t *testing.T) {
|
||||
ctx := &wikiContext{
|
||||
wikiDataProviders: map[string]wikiDataProviderDefinition{
|
||||
|
||||
Reference in New Issue
Block a user