import { assert, layer } from "@effect/vitest"; import { Effect } from "effect"; import { RenderService, RenderServiceLive } from "~/features/render/lib/service"; layer(RenderServiceLive)("render", (it) => { it.effect("markdown to html with GFM features", () => Effect.gen(function* () { const render = yield* RenderService; const result = yield* render.toHtml("# Hello\n\n**bold** and `code`"); assert.include(result.html, "

"); assert.include(result.html, "bold"); assert.include(result.html, "code"); }), ); it.effect("markdown with YAML frontmatter extracts metadata", () => Effect.gen(function* () { const render = yield* RenderService; const result = yield* render.toHtml( "---\ntitle: My Note\ntags: [foo, bar]\n---\n\n# Content", ); assert.isOk(result.frontmatter); assert.strictEqual((result.frontmatter as any).title, "My Note"); assert.include(result.html, "

Content

"); }), ); it.effect("markdown with wikilinks", () => Effect.gen(function* () { const render = yield* RenderService; const result = yield* render.toHtml("See [[Other Note]] for details."); assert.include(result.html, "Other Note"); }), ); it.effect("markdown with code block gets expressive code treatment", () => Effect.gen(function* () { const render = yield* RenderService; const result = yield* render.toHtml("```ts\nconst x = 1;\n```"); assert.include(result.html, "const x = 1"); }), ); it.effect("mdx with Callout component", () => Effect.gen(function* () { const render = yield* RenderService; const result = yield* render.toMdx( 'Be careful', ); assert.include(result.html, "Heads up"); assert.include(result.html, "Be careful"); }), ); it.effect("mdx with EmbeddedHtml component", () => Effect.gen(function* () { const render = yield* RenderService; const result = yield* render.toMdx(''); assert.include(result.html, "raw"); }), ); it.effect("malformed mdx returns RenderError", () => Effect.gen(function* () { const render = yield* RenderService; const result = yield* Effect.exit(render.toMdx("{invalid mdx syntax <<<")); assert.strictEqual(result._tag, "Failure"); }), ); });