pagesGlobToRssItems.test.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import assert from 'node:assert/strict';
  2. import { describe, it } from 'node:test';
  3. import { phpFeedItem, web1FeedItem } from './test-utils.js';
  4. import { pagesGlobToRssItems } from '../dist/index.js';
  5. describe('pagesGlobToRssItems', () => {
  6. it('should generate on valid result', async () => {
  7. const globResult = {
  8. './posts/php.md': () =>
  9. new Promise((resolve) =>
  10. resolve({
  11. url: phpFeedItem.link,
  12. frontmatter: {
  13. title: phpFeedItem.title,
  14. pubDate: phpFeedItem.pubDate,
  15. description: phpFeedItem.description,
  16. },
  17. })
  18. ),
  19. './posts/nested/web1.md': () =>
  20. new Promise((resolve) =>
  21. resolve({
  22. url: web1FeedItem.link,
  23. frontmatter: {
  24. title: web1FeedItem.title,
  25. pubDate: web1FeedItem.pubDate,
  26. description: web1FeedItem.description,
  27. },
  28. })
  29. ),
  30. };
  31. const items = await pagesGlobToRssItems(globResult);
  32. const expected = [
  33. {
  34. title: phpFeedItem.title,
  35. link: phpFeedItem.link,
  36. pubDate: new Date(phpFeedItem.pubDate),
  37. description: phpFeedItem.description,
  38. },
  39. {
  40. title: web1FeedItem.title,
  41. link: web1FeedItem.link,
  42. pubDate: new Date(web1FeedItem.pubDate),
  43. description: web1FeedItem.description,
  44. },
  45. ];
  46. assert.deepEqual(
  47. items.sort((a, b) => a.pubDate - b.pubDate),
  48. expected
  49. );
  50. });
  51. it('should fail on missing "url"', () => {
  52. const globResult = {
  53. './posts/php.md': () =>
  54. new Promise((resolve) =>
  55. resolve({
  56. url: undefined,
  57. frontmatter: {
  58. pubDate: phpFeedItem.pubDate,
  59. description: phpFeedItem.description,
  60. },
  61. })
  62. ),
  63. };
  64. return assert.rejects(pagesGlobToRssItems(globResult));
  65. });
  66. it('should fail on missing "title" key and "description"', () => {
  67. const globResult = {
  68. './posts/php.md': () =>
  69. new Promise((resolve) =>
  70. resolve({
  71. url: phpFeedItem.link,
  72. frontmatter: {
  73. title: undefined,
  74. pubDate: phpFeedItem.pubDate,
  75. description: undefined,
  76. },
  77. })
  78. ),
  79. };
  80. return assert.rejects(pagesGlobToRssItems(globResult));
  81. });
  82. it('should not fail on missing "title" key if "description" is present', () => {
  83. const globResult = {
  84. './posts/php.md': () =>
  85. new Promise((resolve) =>
  86. resolve({
  87. url: phpFeedItem.link,
  88. frontmatter: {
  89. title: undefined,
  90. pubDate: phpFeedItem.pubDate,
  91. description: phpFeedItem.description,
  92. },
  93. })
  94. ),
  95. };
  96. return assert.doesNotReject(pagesGlobToRssItems(globResult));
  97. });
  98. it('should not fail on missing "description" key if "title" is present', () => {
  99. const globResult = {
  100. './posts/php.md': () =>
  101. new Promise((resolve) =>
  102. resolve({
  103. url: phpFeedItem.link,
  104. frontmatter: {
  105. title: phpFeedItem.title,
  106. pubDate: phpFeedItem.pubDate,
  107. description: undefined,
  108. },
  109. })
  110. ),
  111. };
  112. return assert.doesNotReject(pagesGlobToRssItems(globResult));
  113. });
  114. });