lightnet 4.0.0 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/package.json +11 -1
  3. package/__e2e__/admin.spec.ts +0 -20
  4. package/__e2e__/basics-fixture.ts +0 -23
  5. package/__e2e__/fixtures/basics/astro.config.mjs +0 -35
  6. package/__e2e__/fixtures/basics/node_modules/.bin/astro +0 -21
  7. package/__e2e__/fixtures/basics/node_modules/.bin/tailwind +0 -21
  8. package/__e2e__/fixtures/basics/node_modules/.bin/tailwindcss +0 -21
  9. package/__e2e__/fixtures/basics/node_modules/.bin/tsc +0 -21
  10. package/__e2e__/fixtures/basics/node_modules/.bin/tsserver +0 -21
  11. package/__e2e__/fixtures/basics/package.json +0 -22
  12. package/__e2e__/fixtures/basics/public/favicon.svg +0 -1
  13. package/__e2e__/fixtures/basics/public/files/example.pdf +0 -0
  14. package/__e2e__/fixtures/basics/src/assets/logo.png +0 -0
  15. package/__e2e__/fixtures/basics/src/content/categories/christian-living.json +0 -6
  16. package/__e2e__/fixtures/basics/src/content/categories/teens.json +0 -6
  17. package/__e2e__/fixtures/basics/src/content/categories/theology.json +0 -6
  18. package/__e2e__/fixtures/basics/src/content/media/faithful-freestyle--en.json +0 -17
  19. package/__e2e__/fixtures/basics/src/content/media/how-to-kickflip--de.json +0 -17
  20. package/__e2e__/fixtures/basics/src/content/media/images/cover.jpg +0 -0
  21. package/__e2e__/fixtures/basics/src/content/media/images/how-to-kickflip--en.webp +0 -0
  22. package/__e2e__/fixtures/basics/src/content/media/skate-sounds--en.json +0 -21
  23. package/__e2e__/fixtures/basics/src/content/media-collections/how-to-articles.json +0 -7
  24. package/__e2e__/fixtures/basics/src/content/media-types/audio.json +0 -10
  25. package/__e2e__/fixtures/basics/src/content/media-types/book.json +0 -15
  26. package/__e2e__/fixtures/basics/src/content/media-types/video.json +0 -10
  27. package/__e2e__/fixtures/basics/src/content.config.ts +0 -3
  28. package/__e2e__/fixtures/basics/src/pages/[locale]/index.astro +0 -15
  29. package/__e2e__/fixtures/basics/src/translations/de.yml +0 -1
  30. package/__e2e__/fixtures/basics/src/translations/en.yml +0 -1
  31. package/__e2e__/fixtures/basics/tailwind.config.mjs +0 -8
  32. package/__e2e__/global.teardown.ts +0 -5
  33. package/__e2e__/homepage.spec.ts +0 -123
  34. package/__e2e__/search.spec.ts +0 -14
  35. package/__tests__/astro-integration/config.spec.ts +0 -364
  36. package/__tests__/astro-integration/integration.spec.ts +0 -125
  37. package/__tests__/astro-integration/tailwind.spec.ts +0 -36
  38. package/__tests__/content/content-schema.spec.ts +0 -109
  39. package/__tests__/content/get-media-collections.spec.ts +0 -72
  40. package/__tests__/content/query-media-items.spec.ts +0 -213
  41. package/__tests__/i18n/resolve-current-locale.spec.ts +0 -65
  42. package/__tests__/i18n/translate-map.spec.ts +0 -19
  43. package/__tests__/i18n/translate.spec.ts +0 -91
  44. package/__tests__/pages/details-page/create-content-metadata.spec.ts +0 -153
  45. package/__tests__/pages/details-page/get-translations.spec.ts +0 -56
  46. package/__tests__/utils/markdown.spec.ts +0 -74
  47. package/__tests__/utils/paths.spec.ts +0 -116
  48. package/__tests__/utils/urls.spec.ts +0 -32
  49. package/playwright.config.ts +0 -31
  50. package/vitest.config.js +0 -36
@@ -1,213 +0,0 @@
1
- import { expect, test, vi } from "vitest"
2
-
3
- import type {
4
- MediaCollectionEntry,
5
- MediaItemEntry,
6
- } from "../../src/content/content-schema"
7
- import { queryMediaItems } from "../../src/content/query-media-items"
8
-
9
- vi.mock("astro:content", async () => {
10
- const { z } = await import("astro/zod")
11
-
12
- return {
13
- getCollection: vi.fn(),
14
- defineCollection: (definition: unknown) => definition,
15
- reference: () => z.object({ id: z.string(), collection: z.string() }),
16
- }
17
- })
18
-
19
- const image = {
20
- src: "/image.webp",
21
- width: 400,
22
- height: 600,
23
- format: "webp",
24
- } as const
25
-
26
- const mediaItem = ({
27
- id,
28
- title,
29
- type,
30
- language,
31
- dateCreated,
32
- categories,
33
- }: {
34
- id: string
35
- title: string
36
- type: string
37
- language: string
38
- dateCreated: string
39
- categories?: string[]
40
- }): MediaItemEntry => ({
41
- id,
42
- data: {
43
- commonId: id,
44
- title,
45
- type: { id: type, collection: "media-types" },
46
- description: "",
47
- authors: [],
48
- dateCreated,
49
- categories: categories?.map((category) => ({
50
- id: category,
51
- collection: "categories",
52
- })),
53
- language,
54
- image,
55
- content: [{ type: "upload", url: "/files/example.pdf" }],
56
- },
57
- })
58
-
59
- const mediaItems: MediaItemEntry[] = [
60
- mediaItem({
61
- id: "a",
62
- title: "Alpha",
63
- type: "book",
64
- language: "en",
65
- dateCreated: "2024-01-02",
66
- categories: ["family"],
67
- }),
68
- mediaItem({
69
- id: "b",
70
- title: "Beta",
71
- type: "book",
72
- language: "en",
73
- dateCreated: "2025-01-03",
74
- categories: ["theology"],
75
- }),
76
- mediaItem({
77
- id: "c",
78
- title: "Charlie",
79
- type: "video",
80
- language: "de",
81
- dateCreated: "2023-03-04",
82
- categories: ["theology"],
83
- }),
84
- mediaItem({
85
- id: "d",
86
- title: "Delta",
87
- type: "book",
88
- language: "en",
89
- dateCreated: "2022-01-01",
90
- }),
91
- ]
92
-
93
- const mediaCollections: MediaCollectionEntry[] = [
94
- {
95
- id: "featured",
96
- data: {
97
- label: { en: "Featured" },
98
- mediaItems: [
99
- { id: "d", collection: "media" },
100
- { id: "b", collection: "media" },
101
- { id: "a", collection: "media" },
102
- { id: "a", collection: "media" },
103
- ],
104
- },
105
- },
106
- {
107
- id: "german",
108
- data: {
109
- label: { en: "German" },
110
- mediaItems: [{ id: "c", collection: "media" }],
111
- },
112
- },
113
- ]
114
-
115
- test("Should filter by media type", async () => {
116
- const result = await queryMediaItems(
117
- Promise.resolve(mediaItems),
118
- Promise.resolve(mediaCollections),
119
- {
120
- where: { type: "book" },
121
- },
122
- )
123
-
124
- expect(result.map((item) => item.id)).toEqual(["a", "b", "d"])
125
- })
126
-
127
- test("Should combine collection and other filters using AND", async () => {
128
- const result = await queryMediaItems(
129
- Promise.resolve(mediaItems),
130
- Promise.resolve(mediaCollections),
131
- {
132
- where: {
133
- collection: "featured",
134
- language: "en",
135
- type: "book",
136
- category: "theology",
137
- },
138
- },
139
- )
140
-
141
- expect(result.map((item) => item.id)).toEqual(["b"])
142
- })
143
-
144
- test("Should keep collection order when no orderBy is set", async () => {
145
- const result = await queryMediaItems(
146
- Promise.resolve(mediaItems),
147
- Promise.resolve(mediaCollections),
148
- {
149
- where: {
150
- collection: "featured",
151
- },
152
- },
153
- )
154
-
155
- expect(result.map((item) => item.id)).toEqual(["d", "b", "a"])
156
- })
157
-
158
- test("Should override collection order when orderBy is set", async () => {
159
- const result = await queryMediaItems(
160
- Promise.resolve(mediaItems),
161
- Promise.resolve(mediaCollections),
162
- {
163
- where: {
164
- collection: "featured",
165
- },
166
- orderBy: "title",
167
- },
168
- )
169
-
170
- expect(result.map((item) => item.id)).toEqual(["a", "b", "d"])
171
- })
172
-
173
- test("Should apply limit after ordering", async () => {
174
- const result = await queryMediaItems(
175
- Promise.resolve(mediaItems),
176
- Promise.resolve(mediaCollections),
177
- {
178
- where: {
179
- collection: "featured",
180
- },
181
- limit: 2,
182
- },
183
- )
184
-
185
- expect(result.map((item) => item.id)).toEqual(["d", "b"])
186
- })
187
-
188
- test("Should return an empty list for unknown collection filters", async () => {
189
- const result = await queryMediaItems(
190
- Promise.resolve(mediaItems),
191
- Promise.resolve(mediaCollections),
192
- {
193
- where: {
194
- collection: "does-not-exist",
195
- },
196
- },
197
- )
198
-
199
- expect(result).toEqual([])
200
- })
201
-
202
- test("Should sort by dateCreated descending", async () => {
203
- const result = await queryMediaItems(
204
- Promise.resolve(mediaItems),
205
- Promise.resolve(mediaCollections),
206
- {
207
- where: { type: "book" },
208
- orderBy: "dateCreated",
209
- },
210
- )
211
-
212
- expect(result.map((item) => item.id)).toEqual(["b", "a", "d"])
213
- })
@@ -1,65 +0,0 @@
1
- import { expect, test } from "vitest"
2
-
3
- import { resolveCurrentLocaleFromPathname } from "../../src/i18n/resolve-current-locale"
4
-
5
- test("Should resolve current locale from localized path", () => {
6
- const currentLocale = resolveCurrentLocaleFromPathname({
7
- pathname: "/de/media",
8
- locales: ["en", "de"],
9
- defaultLocale: "en",
10
- })
11
-
12
- expect(currentLocale).toBe("de")
13
- })
14
-
15
- test("Should fallback to default locale for unlocalized path", () => {
16
- const currentLocale = resolveCurrentLocaleFromPathname({
17
- pathname: "/admin",
18
- locales: ["en", "de"],
19
- defaultLocale: "en",
20
- })
21
-
22
- expect(currentLocale).toBe("en")
23
- })
24
-
25
- test("Should resolve current locale from localized path under Astro base", () => {
26
- const currentLocale = resolveCurrentLocaleFromPathname({
27
- pathname: "/docs/de/media",
28
- base: "/docs",
29
- locales: ["en", "de"],
30
- defaultLocale: "en",
31
- })
32
-
33
- expect(currentLocale).toBe("de")
34
- })
35
-
36
- test("Should fallback to default locale for root path", () => {
37
- const currentLocale = resolveCurrentLocaleFromPathname({
38
- pathname: "/",
39
- locales: ["en", "de"],
40
- defaultLocale: "en",
41
- })
42
-
43
- expect(currentLocale).toBe("en")
44
- })
45
-
46
- test("Should fallback to default locale for base root path", () => {
47
- const currentLocale = resolveCurrentLocaleFromPathname({
48
- pathname: "/docs",
49
- base: "/docs",
50
- locales: ["en", "de"],
51
- defaultLocale: "en",
52
- })
53
-
54
- expect(currentLocale).toBe("en")
55
- })
56
-
57
- test("Should fallback to default locale for unsupported locale-like segment", () => {
58
- const currentLocale = resolveCurrentLocaleFromPathname({
59
- pathname: "/de-AT/media",
60
- locales: ["en", "de"],
61
- defaultLocale: "en",
62
- })
63
-
64
- expect(currentLocale).toBe("en")
65
- })
@@ -1,19 +0,0 @@
1
- import { expect, test } from "vitest"
2
-
3
- import { useTranslateMap } from "../../src/i18n/translate-map"
4
-
5
- const tMap = useTranslateMap("de")
6
-
7
- test("Should resolve the localized value for the current locale", () => {
8
- expect(tMap({ en: "Hello", de: "Hallo" }, { path: ["title"] })).toBe("Hallo")
9
- })
10
-
11
- test("Should fallback to default locale when current locale is missing", () => {
12
- expect(tMap({ en: "Hello" }, { path: ["title"] })).toBe("Hello")
13
- })
14
-
15
- test("Should include the context path in missing translation errors", () => {
16
- expect(() =>
17
- tMap({ fr: "Bonjour" }, { path: ["content", 0, "label"] }),
18
- ).toThrow('Missing translation map value for "content.0.label"')
19
- })
@@ -1,91 +0,0 @@
1
- import { expect, test, vi } from "vitest"
2
-
3
- const importTranslate = async () => import("../../src/i18n/translate")
4
- const importTranslations = async () => import("../../src/i18n/translations")
5
-
6
- test("Should load built-in translations for non-default site locales", async () => {
7
- const { useTranslate } = await importTranslate()
8
- const t = await useTranslate("de")
9
- expect(t("ln.search.title")).toBe("Suche")
10
- expect(t("ln.header.select-language")).toBe("Sprache auswählen")
11
- })
12
-
13
- test("Should fail on missing translation key", async () => {
14
- const { useTranslate } = await importTranslate()
15
- const t = await useTranslate("de")
16
- expect(() => t("x.missing-translation")).toThrow(
17
- "Missing translation: 'x.missing-translation' is undefined for language 'de'.",
18
- )
19
- })
20
-
21
- test("Should not load user translations for missing locale file", async () => {
22
- const { loadTranslations } = await importTranslations()
23
- const translations = await loadTranslations("en")
24
- expect(translations["home.all-items"]).toBeUndefined()
25
- expect(translations["ln.search.title"]).toBe("Search")
26
- })
27
-
28
- test("Should fallback to configured fallback languages for missing keys", async () => {
29
- vi.resetModules()
30
- vi.doMock("../../src/i18n/translations", async () => {
31
- const actual = await vi.importActual<
32
- typeof import("../../src/i18n/translations")
33
- >("../../src/i18n/translations")
34
-
35
- return {
36
- ...actual,
37
- loadTranslations: vi.fn(async (bcp47: string) => {
38
- if (bcp47 === "de") {
39
- return {}
40
- }
41
- if (bcp47 === "en") {
42
- return {
43
- "x.fallback-only": "Fallback value",
44
- }
45
- }
46
- return {}
47
- }),
48
- }
49
- })
50
-
51
- const { useTranslate } = await importTranslate()
52
- const t = await useTranslate("de")
53
- expect(t("x.fallback-only")).toBe("Fallback value")
54
-
55
- vi.doUnmock("../../src/i18n/translations")
56
- vi.resetModules()
57
- })
58
-
59
- test("Should allow translations whose value matches the key", async () => {
60
- vi.resetModules()
61
- vi.doMock("../../src/i18n/translations", async () => {
62
- const actual = await vi.importActual<
63
- typeof import("../../src/i18n/translations")
64
- >("../../src/i18n/translations")
65
-
66
- return {
67
- ...actual,
68
- loadTranslations: vi.fn(async (bcp47: string) => {
69
- if (bcp47 === "de") {
70
- return {
71
- "ln.search.title": "Suche",
72
- "x.same-as-value": "x.same-as-value",
73
- }
74
- }
75
- if (bcp47 === "en") {
76
- return {
77
- "ln.search.title": "Search",
78
- }
79
- }
80
- return {}
81
- }),
82
- }
83
- })
84
-
85
- const { useTranslate } = await importTranslate()
86
- const t = await useTranslate("de")
87
- expect(t("x.same-as-value")).toBe("x.same-as-value")
88
-
89
- vi.doUnmock("../../src/i18n/translations")
90
- vi.resetModules()
91
- })
@@ -1,153 +0,0 @@
1
- import { expect, test } from "vitest"
2
-
3
- import { useTranslateMap } from "../../../src/i18n/translate-map"
4
- import { createContentMetadata } from "../../../src/pages/details-page/utils/create-content-metadata"
5
-
6
- const tMap = useTranslateMap("en")
7
- const tMapDe = useTranslateMap("de")
8
-
9
- test("Should create complete content metadata", () => {
10
- expect(
11
- createContentMetadata({ url: "https://some.host/some.pDf" }, tMap, {
12
- path: ["content", 0],
13
- }),
14
- ).toEqual({
15
- url: "https://some.host/some.pDf",
16
- canBeOpened: true,
17
- type: "text",
18
- target: "_blank",
19
- labelText: "some",
20
- isExternal: true,
21
- extension: "pdf",
22
- })
23
- })
24
- ;[
25
- {
26
- url: "https://youtube.com/watch?v=k2exixc",
27
- expected: {
28
- canBeOpened: true,
29
- target: "_blank",
30
- labelText: "youtube.com",
31
- isExternal: true,
32
- extension: "",
33
- type: "link",
34
- },
35
- },
36
- {
37
- url: "https://wikipedia.org",
38
- expected: {
39
- canBeOpened: true,
40
- target: "_blank",
41
- labelText: "wikipedia.org",
42
- isExternal: true,
43
- extension: "",
44
- type: "link",
45
- },
46
- },
47
- {
48
- url: "https://some.host/some.pDf",
49
- expected: {
50
- canBeOpened: true,
51
- type: "text",
52
- target: "_blank",
53
- labelText: "some",
54
- isExternal: true,
55
- extension: "pdf",
56
- },
57
- },
58
- {
59
- url: "https://some.host/some.unknown",
60
- expected: {
61
- type: "link",
62
- canBeOpened: false,
63
- target: "_blank",
64
- labelText: "some",
65
- isExternal: true,
66
- extension: "unknown",
67
- },
68
- },
69
- {
70
- url: "/files/my.pdf",
71
- expected: {
72
- canBeOpened: true,
73
- type: "text",
74
- target: "_self",
75
- labelText: "my",
76
- isExternal: false,
77
- extension: "pdf",
78
- },
79
- },
80
- {
81
- url: "/paths/my-id",
82
- expected: {
83
- canBeOpened: true,
84
- target: "_self",
85
- labelText: "my-id",
86
- isExternal: false,
87
- extension: "",
88
- type: "link",
89
- },
90
- },
91
- {
92
- url: "/files/my.unknown",
93
- expected: {
94
- canBeOpened: false,
95
- target: "_self",
96
- labelText: "my",
97
- isExternal: false,
98
- type: "link",
99
- extension: "unknown",
100
- },
101
- },
102
- {
103
- url: "/some.zip",
104
- expected: {
105
- canBeOpened: false,
106
- target: "_self",
107
- labelText: "some",
108
- isExternal: false,
109
- extension: "zip",
110
- type: "package",
111
- },
112
- },
113
- {
114
- url: "/some.zip",
115
- label: { en: "foo" },
116
- expected: {
117
- labelText: "foo",
118
- isExternal: false,
119
- extension: "zip",
120
- type: "package",
121
- },
122
- },
123
- ].forEach(({ url, expected, label }) => {
124
- test(`Should create content metadata for url '${url}' ${label !== undefined ? `and label '${label}'` : ""}`, () => {
125
- expect(
126
- createContentMetadata({ url, label }, tMap, {
127
- path: ["content", 0],
128
- }),
129
- ).toMatchObject(expected)
130
- })
131
- })
132
-
133
- test("Should override name with input", () => {
134
- expect(
135
- createContentMetadata(
136
- { url: "/path/to/a.file", label: { en: "My file" } },
137
- tMap,
138
- { path: ["content", 0] },
139
- ),
140
- ).toMatchObject({ labelText: "My file" })
141
- })
142
-
143
- test("Should resolve localized content labels by locale", () => {
144
- const result = createContentMetadata(
145
- {
146
- url: "/files/book.pdf",
147
- label: { en: "Read", de: "Lesen" },
148
- },
149
- tMapDe,
150
- { path: ["content", 0] },
151
- )
152
- expect(result.labelText).toBe("Lesen")
153
- })
@@ -1,56 +0,0 @@
1
- import { beforeEach, expect, test, vi } from "vitest"
2
-
3
- const mocks = vi.hoisted(() => ({
4
- getMediaItems: vi.fn(),
5
- getMediaItem: vi.fn(),
6
- }))
7
-
8
- vi.mock("../../../src/content/get-media-items", () => ({
9
- getMediaItems: mocks.getMediaItems,
10
- getMediaItem: mocks.getMediaItem,
11
- }))
12
-
13
- beforeEach(() => {
14
- vi.resetModules()
15
- vi.clearAllMocks()
16
- })
17
-
18
- test("Should return empty translations when commonId is missing", async () => {
19
- mocks.getMediaItems.mockResolvedValue([
20
- { id: "book-en", data: { commonId: "book", language: "en" } },
21
- { id: "book-de", data: { commonId: "book", language: "de" } },
22
- ])
23
- mocks.getMediaItem.mockResolvedValue({
24
- id: "standalone-en",
25
- data: { language: "en" },
26
- })
27
-
28
- const { getTranslations } =
29
- await import("../../../src/pages/details-page/utils/get-translations")
30
- const result = await getTranslations("standalone-en")
31
-
32
- expect(result).toEqual([])
33
- })
34
-
35
- test("Should return sorted translations and ignore unique or missing commonId", async () => {
36
- mocks.getMediaItems.mockResolvedValue([
37
- { id: "book-de", data: { commonId: "book", language: "de" } },
38
- { id: "book-en", data: { commonId: "book", language: "en" } },
39
- { id: "book-es", data: { commonId: "book", language: "es" } },
40
- { id: "guide-en", data: { commonId: "guide", language: "en" } },
41
- { id: "standalone-fr", data: { language: "fr" } },
42
- ])
43
- mocks.getMediaItem.mockResolvedValue({
44
- id: "book-en",
45
- data: { commonId: "book", language: "en" },
46
- })
47
-
48
- const { getTranslations } =
49
- await import("../../../src/pages/details-page/utils/get-translations")
50
- const result = await getTranslations("book-en")
51
-
52
- expect(result).toEqual([
53
- { id: "book-de", language: "de" },
54
- { id: "book-es", language: "es" },
55
- ])
56
- })
@@ -1,74 +0,0 @@
1
- import { expect, test } from "vitest"
2
-
3
- import { markdownToText } from "../../src/utils/markdown"
4
-
5
- test("Should remove '\\' to force new lines", () => {
6
- expect(markdownToText("a\\\nb\\ \nc")).toBe("a\nb \nc")
7
- })
8
-
9
- test("Should remove <br> to force new lines", () => {
10
- expect(markdownToText("a <br> b<br>\nc")).toBe("a b \nc")
11
- })
12
-
13
- test("Should remove double white space", () => {
14
- expect(markdownToText("a b")).toBe("a b")
15
- })
16
-
17
- test("Should remove triple white space", () => {
18
- expect(markdownToText("a b")).toBe("a b")
19
- })
20
-
21
- test("Should remove escape character '\\'", () => {
22
- // eslint-disable-next-line no-useless-escape
23
- expect(markdownToText("a \\\* \\\# b")).toBe("a * # b")
24
- })
25
-
26
- test("Should remove headers", () => {
27
- expect(markdownToText("# H1\n## H2 words#")).toBe("H1\nH2 words#")
28
- })
29
-
30
- test("Should remove underline", () => {
31
- expect(markdownToText("Some <u>underlined</u> Words /u >")).toBe(
32
- "Some underlined Words /u >",
33
- )
34
- })
35
-
36
- test("Should remove encoded space", () => {
37
- expect(markdownToText("Text&#x20;with&#x20;space&#x20;")).toBe(
38
- "Text with space ",
39
- )
40
- })
41
-
42
- test("Should remove inline modifiers", async () => {
43
- expect(markdownToText("this is **some bold** and _italic_ text")).toBe(
44
- "this is some bold and italic text",
45
- )
46
- })
47
-
48
- test("Should remove code blocks", async () => {
49
- expect(markdownToText("some\n```js \ncode\n```\n")).toBe("some\ncode\n")
50
- })
51
-
52
- test("Should remove list", () => {
53
- expect(markdownToText("- this is **bold**\n- this is normal")).toBe(
54
- "this is bold\nthis is normal",
55
- )
56
- })
57
-
58
- test("Should convert links", () => {
59
- expect(markdownToText("some [link](https://link.com?foo)")).toBe("some link")
60
- })
61
-
62
- test("Should remove images", () => {
63
- expect(markdownToText("![a image](my-image.jpg)")).toBe("a image")
64
- })
65
-
66
- test("Should remove block quotes", () => {
67
- expect(markdownToText("> block quote\n>more quote")).toBe(
68
- "block quote\nmore quote",
69
- )
70
- })
71
-
72
- test("Should return undefined when markdown is undefined", () => {
73
- expect(markdownToText(undefined)).toBeUndefined()
74
- })