feat(ui) : improve guide navigation, signup, and commissions

This commit is contained in:
2026-10-07 04:39:57 +07:00 Unverified
parent b35c1a4471
commit 22f5f96231
31 changed files with 737 additions and 400 deletions
+31 -2
View File
@@ -27,9 +27,9 @@ vi.mock("@/db", () => ({
import {
artifactConditions, artifactProfiles, constellationConditions, extraSectionRows,
guides, guideSections, teamCompositions, teamConditions, teamMembers, weaponConditions,
catalogCharacters, catalogMaterials, guidePosterBleeding, media,
catalogCharacters, catalogMaterials, guidePosterBleeding, media, weaponRecommendations, artifactRecommendations,
} from "@/db/schema";
import { getActiveCatalog, getAdminGuideContent, listAdminTeamImportsForCharacter } from "./queries";
import { getActiveCatalog, getAdminGuideContent, getPublicGuide, listAdminTeamImportsForCharacter } from "./queries";
beforeEach(() => {
mocks.reads.length = 0;
@@ -173,3 +173,32 @@ describe("team import lookup", () => {
expect(mocks.reads).toEqual([teamCompositions, teamMembers]);
});
});
describe("public overview build summary", () => {
it("loads small recommendation reads only for published sections", async () => {
mocks.rows.set(guideSections, [{ section: { id: "weapon", slug: "weapon", kind: "weapon" }, populated: true }]);
mocks.rows.set(weaponRecommendations, [
{ name: "First", rarity: 5, refinement: "1", conditionId: "first" },
{ name: "Four-star", rarity: 4, refinement: "5", conditionId: "first" },
{ name: "Different condition", rarity: 4, refinement: "1", conditionId: "second" },
]);
const result = await getPublicGuide("test");
expect(result?.buildSummary?.weapon?.name).toBe("First");
expect(result?.buildSummary?.fourStarWeapon?.name).toBe("Four-star");
expect(mocks.reads).not.toContain(artifactProfiles);
expect(mocks.reads).not.toContain(artifactRecommendations);
expect(mocks.reads).not.toContain(teamMembers);
});
it("does not add overview recommendation reads to admin editing", async () => {
await getAdminGuideContent("test", "overview");
expect(mocks.reads).not.toContain(weaponRecommendations);
expect(mocks.reads).not.toContain(artifactProfiles);
});
it("does not disclose recommendations from hidden sections", async () => {
mocks.rows.set(guideSections, []);
mocks.rows.set(weaponRecommendations, [{ name: "Hidden", conditionId: "hidden", rarity: 5, refinement: "1" }]);
const result = await getPublicGuide("test");
expect(result?.buildSummary?.weapon).toBeNull();
expect(mocks.reads).not.toContain(weaponRecommendations);
});
});