Files
community-rule/tests/integration/ContentProcessing.integration.test.js
T
2025-09-12 10:44:45 -06:00

99 lines
2.7 KiB
JavaScript

import { describe, it, expect, vi, beforeEach } from "vitest";
import fs from "fs";
import path from "path";
// Mock fs and path modules
vi.mock("fs");
vi.mock("path");
// Import the content processing functions
import { getBlogPostFiles, markdownToHtml } from "../../lib/content";
describe("Content Processing Integration", () => {
beforeEach(() => {
vi.clearAllMocks();
});
describe("File System Integration", () => {
it("should read blog post files from content directory", () => {
const mockFiles = ["post1.md", "post2.md", "image.png", "post3.md"];
fs.readdirSync.mockReturnValue(mockFiles);
const result = getBlogPostFiles();
expect(fs.readdirSync).toHaveBeenCalledWith(
path.join(process.cwd(), "content/blog")
);
expect(result).toEqual(["post1.md", "post2.md", "post3.md"]);
});
it("should handle directory read errors gracefully", () => {
fs.readdirSync.mockImplementation(() => {
throw new Error("Directory not found");
});
const result = getBlogPostFiles();
expect(result).toEqual([]);
});
it("should filter out non-markdown files", () => {
const mockFiles = [
"post1.md",
"post2.mdx",
"image.png",
"post3.md",
"readme.txt",
];
fs.readdirSync.mockReturnValue(mockFiles);
const result = getBlogPostFiles();
expect(result).toEqual(["post1.md", "post2.mdx", "post3.md"]);
});
});
describe("Markdown to HTML Integration", () => {
it("should convert markdown to HTML with proper formatting", () => {
const markdown = `# Main Title
## Subtitle
This is a paragraph with **bold** and *italic* text.
- List item 1
- List item 2
[Link text](https://example.com)`;
const result = markdownToHtml(markdown);
expect(result).toContain("<h1>Main Title</h1>");
expect(result).toContain("<h2>Subtitle</h2>");
expect(result).toContain("<strong>bold</strong>");
expect(result).toContain("<em>italic</em>");
expect(result).toContain('<a href="https://example.com">Link text</a>');
});
it("should handle empty markdown gracefully", () => {
const result = markdownToHtml("");
expect(result).toBe("");
});
it("should handle markdown with special characters", () => {
const markdown = `# Title with Special Characters: & < > " '
Content with **bold** and *italic* text.`;
const result = markdownToHtml(markdown);
expect(result).toContain(
"<h1>Title with Special Characters: & < > \" '</h1>"
);
expect(result).toContain("<strong>bold</strong>");
expect(result).toContain("<em>italic</em>");
});
});
});