Extract custom hooks for reusable logic
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
import { renderHook } from "@testing-library/react";
|
||||
import { describe, test, expect } from "vitest";
|
||||
import { useSchemaData } from "../../../app/hooks/useSchemaData";
|
||||
|
||||
describe("useSchemaData", () => {
|
||||
test("generates Organization schema", () => {
|
||||
const { result } = renderHook(() =>
|
||||
useSchemaData({
|
||||
type: "Organization",
|
||||
name: "Test Org",
|
||||
url: "https://example.com",
|
||||
email: "test@example.com",
|
||||
sameAs: ["https://twitter.com/test"],
|
||||
}),
|
||||
);
|
||||
|
||||
expect(result.current).toEqual({
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Organization",
|
||||
name: "Test Org",
|
||||
url: "https://example.com",
|
||||
email: "test@example.com",
|
||||
sameAs: ["https://twitter.com/test"],
|
||||
});
|
||||
});
|
||||
|
||||
test("generates WebSite schema", () => {
|
||||
const { result } = renderHook(() =>
|
||||
useSchemaData({
|
||||
type: "WebSite",
|
||||
name: "Test Site",
|
||||
url: "https://example.com",
|
||||
potentialAction: {
|
||||
target: "https://example.com/search?q={search_term_string}",
|
||||
"query-input": "required name=search_term_string",
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
expect(result.current).toEqual({
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebSite",
|
||||
name: "Test Site",
|
||||
url: "https://example.com",
|
||||
potentialAction: {
|
||||
"@type": "SearchAction",
|
||||
target: "https://example.com/search?q={search_term_string}",
|
||||
"query-input": "required name=search_term_string",
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
test("generates HowTo schema", () => {
|
||||
const { result } = renderHook(() =>
|
||||
useSchemaData({
|
||||
type: "HowTo",
|
||||
name: "How to test",
|
||||
description: "Test description",
|
||||
steps: [
|
||||
{ name: "Step 1", text: "Do this" },
|
||||
{ name: "Step 2", text: "Do that" },
|
||||
],
|
||||
}),
|
||||
);
|
||||
|
||||
expect(result.current).toEqual({
|
||||
"@context": "https://schema.org",
|
||||
"@type": "HowTo",
|
||||
name: "How to test",
|
||||
description: "Test description",
|
||||
step: [
|
||||
{
|
||||
"@type": "HowToStep",
|
||||
position: 1,
|
||||
name: "Step 1",
|
||||
text: "Do this",
|
||||
},
|
||||
{
|
||||
"@type": "HowToStep",
|
||||
position: 2,
|
||||
name: "Step 2",
|
||||
text: "Do that",
|
||||
},
|
||||
],
|
||||
});
|
||||
});
|
||||
|
||||
test("generates BreadcrumbList schema", () => {
|
||||
const { result } = renderHook(() =>
|
||||
useSchemaData({
|
||||
type: "BreadcrumbList",
|
||||
items: [
|
||||
{ name: "Home", url: "https://example.com" },
|
||||
{ name: "Page", url: "https://example.com/page" },
|
||||
],
|
||||
}),
|
||||
);
|
||||
|
||||
expect(result.current).toEqual({
|
||||
"@context": "https://schema.org",
|
||||
"@type": "BreadcrumbList",
|
||||
itemListElement: [
|
||||
{
|
||||
"@type": "ListItem",
|
||||
position: 1,
|
||||
name: "Home",
|
||||
item: "https://example.com",
|
||||
},
|
||||
{
|
||||
"@type": "ListItem",
|
||||
position: 2,
|
||||
name: "Page",
|
||||
item: "https://example.com/page",
|
||||
},
|
||||
],
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user