Browse Source

fix icon

master
mortezaei 10 hours ago
parent
commit
dd9878e562
  1. 101
      src/app/questions-list/[slug]/question-detail-client.test.tsx
  2. 20
      src/app/questions-list/[slug]/question-detail-client.tsx
  3. 5
      src/icons.tsx

101
src/app/questions-list/[slug]/question-detail-client.test.tsx

@ -402,4 +402,105 @@ describe("QuestionDetailClient Validation", () => {
expect(screen.getByRole("status")).toBeDefined();
expect(document.querySelector(".shimmer-bg")).toBeNull();
});
it("never renders TestIntroPage for normal profile sections", () => {
const normalSectionItem = {
slug: "personal_identity",
title: "مشخصات فردی و هویتی",
questions: [
{
id: "first_name",
title: "نام",
type: "text",
order: 1,
required: true,
isVisible: true,
private: false,
description: "",
tooltip: "",
extras: {},
options: [],
},
],
};
(convertOverviewToFrontendItems as any).mockReturnValue([
{
slug: "personal_identity",
title: "مشخصات فردی و هویتی",
questions: [],
},
]);
(useFormSectionQuery as any).mockReturnValue({
data: {
section: { cards: [] },
answers: {},
section_progress: { completion_percent: 0 },
},
isLoading: false,
});
(mapBackendSectionToFrontend as any).mockReturnValue(normalSectionItem);
const queryClient = new QueryClient({
defaultOptions: { queries: { retry: false } },
});
render(
<QueryClientProvider client={queryClient}>
<QuestionDetailClient
closeLabel="Close"
continueLabel="Continue"
description="Desc"
informationLabel="Info"
itemSlug="personal_identity"
questionsListHref="/questions-list"
title="مشخصات فردی و هویتی"
/>
</QueryClientProvider>,
);
// Question input is rendered directly
expect(screen.getByText("نام")).toBeDefined();
// TestIntroPage elements (hero image, Start button) are NOT present
expect(document.querySelector("img[src*='test-intro-hero']")).toBeNull();
expect(screen.queryByRole("button", { name: "Start" })).toBeNull();
});
it("renders TestIntroPage for personality_test assessment", () => {
(convertOverviewToFrontendItems as any).mockReturnValue([
{
slug: "personality_test",
title: "آزمون کتل",
estimate: "15 min",
questions: [],
},
]);
(useCattellQuestionsQuery as any).mockReturnValue({
data: { questions: [{ id: 1, text: "Q1", options: ["A", "B", "C"] }] },
isLoading: false,
isError: false,
});
const queryClient = new QueryClient({
defaultOptions: { queries: { retry: false } },
});
render(
<QueryClientProvider client={queryClient}>
<QuestionDetailClient
closeLabel="Close"
continueLabel="Continue"
description="Desc"
informationLabel="Info"
itemSlug="personality_test"
questionsListHref="/questions-list"
title="آزمون کتل"
/>
</QueryClientProvider>,
);
// TestIntroPage elements (Start button and title) are present
expect(screen.getAllByText("آزمون کتل").length).toBeGreaterThanOrEqual(1);
expect(document.querySelector("img[src*='test-intro-hero']")).not.toBeNull();
expect(screen.getByRole("button", { name: "Start" })).toBeDefined();
});
});

20
src/app/questions-list/[slug]/question-detail-client.tsx

@ -308,9 +308,14 @@ export default function QuestionDetailClient({
}, [itemSlug, isTestStarted, profileId]);
const isCattellSlug =
itemSlug === "personality_test" || itemSlug === "cattell_test";
itemSlug === "personality_test" ||
itemSlug === "cattell_test" ||
itemSlug === "cattell" ||
itemSlug === "personality";
const isGlasserSlug =
itemSlug === "glasser_5_needs_test" || itemSlug === "glasser_test";
itemSlug === "glasser_5_needs_test" ||
itemSlug === "glasser_test" ||
itemSlug === "glasser";
const isAssessment = isCattellSlug || isGlasserSlug;
const [isCompletedSheetOpen, setIsCompletedSheetOpen] = useState(false);
@ -365,12 +370,12 @@ export default function QuestionDetailClient({
}
return overviewItem;
}, [isAssessment, overviewItem, sectionResponse]);
const isSchemaLoading = isAssessment
? isOverviewLoading
: !sectionResponse && (isOverviewLoading || isSectionLoading);
const isSchemaError = isAssessment
? isOverviewError
: (isOverviewError || isSectionError) && !sectionResponse;
const isSchemaLoading = isAssessment
? isOverviewLoading
: !sectionResponse && !isSchemaError;
const cattellQuery = useCattellQuestionsQuery(locale, {
enabled: isCattellSlug && isTestStarted,
@ -644,7 +649,7 @@ export default function QuestionDetailClient({
return null;
}
if (item && item.questions.length === 0) {
if (isAssessment) {
if (isTestStarted) {
const isQuestionsLoading = isCattellSlug
? cattellQuery.isLoading
@ -758,8 +763,7 @@ export default function QuestionDetailClient({
);
}
const bulletKey =
item.slug === "glasser_5_needs_test" ? "glasser" : "personality";
const bulletKey = isGlasserSlug ? "glasser" : "personality";
const bullets =
bulletKey === "glasser"
? [

5
src/icons.tsx

@ -66,8 +66,9 @@ const PATHS: Record<string, string> = {
diamond: '<path d="M6 3h12l4 7-10 11L2 10z"/><path d="M2 10h20"/><path d="m12 21 4-11-4-7-4 7z"/>',
/* Documents, Media & Location */
file: '<path d="M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8Z"/><path d="M14 3v5h5"/>',
document: '<path d="M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8Z"/><path d="M14 3v5h5"/><line x1="8" y1="13" x2="16" y2="13"/><line x1="8" y1="17" x2="13" y2="17"/>',
file: '<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><path d="M14 2v6h6"/>',
document: '<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h6"/><path d="M14 2v5a1 1 0 0 0 1 1h5"/><line x1="8" y1="8" x2="11" y2="8"/><line x1="8" y1="12" x2="13" y2="12"/><line x1="8" y1="16" x2="11" y2="16"/><circle cx="17.5" cy="17.5" r="4.5"/><path d="m15.5 17.5 1.5 1.5 3-3"/>',
terms: '<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h6"/><path d="M14 2v5a1 1 0 0 0 1 1h5"/><line x1="8" y1="8" x2="11" y2="8"/><line x1="8" y1="12" x2="13" y2="12"/><line x1="8" y1="16" x2="11" y2="16"/><circle cx="17.5" cy="17.5" r="4.5"/><path d="m15.5 17.5 1.5 1.5 3-3"/>',
mapPin: '<path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/>',
upload: '<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><path d="m7 9 5-5 5 5"/><line x1="12" y1="4" x2="12" y2="16"/>',
download: '<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><path d="m7 11 5 5 5-5"/><line x1="12" y1="4" x2="12" y2="16"/>',

Loading…
Cancel
Save