propagated-assets.test.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import { parseHTML } from 'linkedom';
  2. import { loadFixture } from '../../../astro/test/test-utils.js';
  3. import assert from 'node:assert/strict';
  4. import { after, before, describe, it } from 'node:test';
  5. describe('Markdoc - propagated assets', () => {
  6. let fixture;
  7. let devServer;
  8. before(async () => {
  9. fixture = await loadFixture({
  10. root: new URL('./fixtures/propagated-assets/', import.meta.url),
  11. // test suite was authored when inlineStylesheets defaulted to never
  12. build: { inlineStylesheets: 'never' },
  13. });
  14. });
  15. const modes = ['dev', 'prod'];
  16. for (const mode of modes) {
  17. describe(mode, () => {
  18. /** @type {Document} */
  19. let stylesDocument;
  20. /** @type {Document} */
  21. let scriptsDocument;
  22. before(async () => {
  23. if (mode === 'prod') {
  24. await fixture.build();
  25. stylesDocument = parseHTML(await fixture.readFile('/styles/index.html')).document;
  26. scriptsDocument = parseHTML(await fixture.readFile('/scripts/index.html')).document;
  27. } else if (mode === 'dev') {
  28. devServer = await fixture.startDevServer();
  29. const styleRes = await fixture.fetch('/styles');
  30. const scriptRes = await fixture.fetch('/scripts');
  31. stylesDocument = parseHTML(await styleRes.text()).document;
  32. scriptsDocument = parseHTML(await scriptRes.text()).document;
  33. }
  34. });
  35. after(async () => {
  36. if (mode === 'dev') devServer?.stop();
  37. });
  38. it('Bundles styles', async () => {
  39. let styleContents;
  40. if (mode === 'dev') {
  41. const styles = stylesDocument.querySelectorAll('style');
  42. assert.equal(styles.length, 1);
  43. styleContents = styles[0].textContent;
  44. } else {
  45. const links = stylesDocument.querySelectorAll('link[rel="stylesheet"]');
  46. assert.equal(links.length, 1);
  47. styleContents = await fixture.readFile(links[0].href);
  48. }
  49. assert.equal(styleContents.includes('--color-base-purple: 269, 79%;'), true);
  50. });
  51. it('[fails] Does not bleed styles to other page', async () => {
  52. if (mode === 'dev') {
  53. const styles = scriptsDocument.querySelectorAll('style');
  54. assert.equal(styles.length, 0);
  55. } else {
  56. const links = scriptsDocument.querySelectorAll('link[rel="stylesheet"]');
  57. assert.equal(links.length, 0);
  58. }
  59. });
  60. });
  61. }
  62. });