macana

Static site generator for Obsidian Vault

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
  92. 92
  93. 93
  94. 94
  95. 95
  96. 96
  97. 97
  98. 98
  99. 99
  100. 100
  101. 101
  102. 102
  103. 103
  104. 104
  105. 105
  106. 106
  107. 107
  108. 108
  109. 109
  110. 110
  111. 111
  112. 112
  113. 113
  114. 114
  115. 115
// SPDX-FileCopyrightText: 2024 Shota FUJI <pockawoooh@gmail.com>
//
// SPDX-License-Identifier: Apache-2.0

import {
	assertEquals,
	assertObjectMatch,
} from "../deps/deno.land/std/assert/mod.ts";

import { MemoryFsReader } from "../filesystem_reader/memory_fs.ts";
import { VaultParser } from "../metadata_parser/vault_parser.ts";
import { noopParser } from "../content_parser/noop.ts";
import { DefaultTreeBuilder } from "./default_tree_builder.ts";

const contentParser = noopParser;

Deno.test("Should read from top-level directory, as-is", async () => {
	const fileSystemReader = new MemoryFsReader([
		{ path: "Foo Bar/Baz Qux.md", content: "" },
		{ path: "Foo.md", content: "" },
	]);
	const metadataParser = new VaultParser();
	const builder = new DefaultTreeBuilder({ defaultLanguage: "en" });

	const tree = await builder.build({
		fileSystemReader,
		metadataParser,
		contentParser,
	});

	assertObjectMatch(tree.nodes[0], {
		metadata: {
			name: "Foo Bar",
			title: "Foo Bar",
		},
		directory: {
			name: "Foo Bar",
		},
		entries: [
			{
				metadata: {
					name: "Baz Qux",
					title: "Baz Qux",
				},
				file: {
					name: "Baz Qux.md",
				},
			},
		],
	});

	assertObjectMatch(tree.nodes[1], {
		metadata: {
			name: "Foo",
			title: "Foo",
		},
		file: {
			name: "Foo.md",
		},
	});
});

Deno.test("Should ignore files and directories matches to `ignore` callback", async () => {
	const fileSystemReader = new MemoryFsReader([
		{ path: "foo/bar/baz.md", content: "" },
		{ path: "foo/bar.md", content: "" },
		{ path: "foo.md", content: "" },
		{ path: "bar/foo.md", content: "" },
		{ path: "bar/foo/baz.md", content: "" },
	]);
	const metadataParser = new VaultParser();
	const builder = new DefaultTreeBuilder({
		defaultLanguage: "en",
		ignore(node) {
			return node.name === "foo";
		},
	});

	const tree = await builder.build({
		fileSystemReader,
		metadataParser,
		contentParser,
	});

	assertEquals(tree.nodes.length, 2);

	assertObjectMatch(tree.nodes[0], {
		metadata: {
			name: "foo",
			title: "foo",
		},
		file: { name: "foo.md" },
	});

	assertObjectMatch(tree.nodes[1], {
		metadata: {
			name: "bar",
			title: "bar",
		},
		directory: {
			name: "bar",
		},
		entries: [
			{
				metadata: {
					name: "foo",
					title: "foo",
				},
				file: {
					name: "foo.md",
				},
			},
		],
	});
});