diff --git a/internal/topdata/wiki_native.go b/internal/topdata/wiki_native.go index 0dd39a3..c239455 100644 --- a/internal/topdata/wiki_native.go +++ b/internal/topdata/wiki_native.go @@ -26,7 +26,7 @@ const ( legacyWikiRootDirName = ".wiki" wikiPagesDirName = "pages" wikiStateFileName = "state.json" - wikiGeneratorVersion = "nodebb-tiptap-html-v2" + wikiGeneratorVersion = "nodebb-tiptap-html-v3" wikiGeneratedStatus = "generated" wikiSkippedStatus = "skipped" ) @@ -266,6 +266,9 @@ func wikiStatusPagesEnabled(cfg project.TopDataWikiConfig) bool { } func wikiCachedPagesAreCurrent(outputDir string, state wikiStateDocument) bool { + if state.Version != wikiGeneratorVersion { + return false + } if state.Pages <= 0 { return false } diff --git a/internal/topdata/wiki_native_test.go b/internal/topdata/wiki_native_test.go index 459e2c6..21905a7 100644 --- a/internal/topdata/wiki_native_test.go +++ b/internal/topdata/wiki_native_test.go @@ -180,6 +180,62 @@ func TestBuildWikiRegeneratesMissingCachedPages(t *testing.T) { } } +func TestBuildWikiRegeneratesOldGeneratorCache(t *testing.T) { + root := testProjectRoot(t) + mkdirAll(t, filepath.Join(root, "topdata", "data", "skills")) + writeFile(t, filepath.Join(root, "topdata", "base_dialog.json"), "{}\n") + writeFile(t, filepath.Join(root, "topdata", "data", "skills", "base.json"), `{ + "output": "skills.2da", + "columns": ["Label", "Name", "Description", "HideFromLevelUp", "Untrained", "KeyAbility", "ArmorCheckPenalty", "Constant"], + "rows": [ + { + "id": 0, + "key": "skills:athletics", + "Label": "Athletics", + "Name": {"tlk": {"key": "skills:athletics.name", "text": "Athletics"}}, + "Description": {"tlk": {"key": "skills:athletics.description", "text": "Ability: Strength."}}, + "HideFromLevelUp": "0", + "Untrained": "1", + "KeyAbility": "STR", + "ArmorCheckPenalty": "1", + "Constant": "SKILL_ATHLETICS" + } + ] +}`+"\n") + writeFile(t, filepath.Join(root, "topdata", "data", "skills", "lock.json"), `{"skills:athletics":0}`+"\n") + + proj := testProject(root) + proj.Config.TopData.ReferenceBuilder = "" + if _, err := BuildNative(proj, nil); err != nil { + t.Fatalf("BuildNative failed: %v", err) + } + + statePath := filepath.Join(root, ".cache", "wiki", "state.json") + state, err := loadWikiState(statePath) + if err != nil { + t.Fatalf("read state: %v", err) + } + state.Version = "nodebb-tiptap-html-v2" + if err := saveWikiState(statePath, state); err != nil { + t.Fatalf("save old-version state: %v", err) + } + + result, err := BuildWikiWithOptions(proj, BuildWikiOptions{}, nil) + if err != nil { + t.Fatalf("BuildWikiWithOptions failed: %v", err) + } + if result.Status != wikiGeneratedStatus { + t.Fatalf("expected old generator cache to regenerate, got wiki status %q", result.Status) + } + refreshed, err := loadWikiState(statePath) + if err != nil { + t.Fatalf("read refreshed state: %v", err) + } + if refreshed.Version != wikiGeneratorVersion { + t.Fatalf("expected refreshed generator version %q, got %q", wikiGeneratorVersion, refreshed.Version) + } +} + func TestRenderNodeBBManagedHTMLPreservesHeadinglessTemplateHTML(t *testing.T) { source := strings.TrimSpace(`
This is generated.