test-course-navigation.mjs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import assert from 'node:assert/strict';
  2. import { courseHref, parseCourseQuery } from '../app/course-navigation.ts';
  3. assert.equal(courseHref('api', '01'), '?lesson=01');
  4. assert.deepEqual(parseCourseQuery('?lesson=01'), {
  5. module: 'api',
  6. lesson: '01',
  7. });
  8. const slugs = [
  9. 'api',
  10. 'database',
  11. 'api-database',
  12. 'tasks',
  13. 'redis',
  14. 'docker',
  15. 'linux',
  16. 'troubleshooting',
  17. 'distributed',
  18. 'review',
  19. ];
  20. const urls = new Set();
  21. for (const slug of slugs) {
  22. const url = courseHref(slug, '01');
  23. urls.add(url);
  24. assert.deepEqual(parseCourseQuery(url), { module: slug, lesson: '01' });
  25. assert.deepEqual(parseCourseQuery(courseHref(slug)), {
  26. module: slug,
  27. lesson: undefined,
  28. });
  29. }
  30. assert.equal(urls.size, 10, 'same lesson IDs must not collide across modules');
  31. assert.deepEqual(parseCourseQuery(''), { module: 'home', lesson: undefined });
  32. assert.deepEqual(parseCourseQuery(courseHref('home')), {
  33. module: 'home',
  34. lesson: undefined,
  35. });
  36. assert.equal(courseHref('home'), '?');
  37. assert.deepEqual(parseCourseQuery('?module=api'), {
  38. module: 'api',
  39. lesson: undefined,
  40. });
  41. assert.deepEqual(parseCourseQuery('?module=home&lesson=01'), {
  42. module: 'home',
  43. lesson: '01',
  44. });
  45. assert.deepEqual(parseCourseQuery('?module=database&lesson=99'), {
  46. module: 'database',
  47. lesson: '99',
  48. });
  49. assert.equal(
  50. courseHref('tasks', '01&module=api'),
  51. '?module=tasks&lesson=01%26module%3Dapi',
  52. );
  53. console.log(
  54. 'Course navigation: homepage, legacy links, 10 module round-trips, overview routes and query encoding passed.',
  55. );