test-course-navigation.mjs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  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. ];
  18. const urls = new Set();
  19. for (const slug of slugs) {
  20. const url = courseHref(slug, '01');
  21. urls.add(url);
  22. assert.deepEqual(parseCourseQuery(url), { module: slug, lesson: '01' });
  23. assert.deepEqual(parseCourseQuery(courseHref(slug)), {
  24. module: slug,
  25. lesson: undefined,
  26. });
  27. }
  28. assert.equal(urls.size, 8, 'same lesson IDs must not collide across modules');
  29. assert.deepEqual(parseCourseQuery(''), { module: 'api', lesson: undefined });
  30. assert.deepEqual(parseCourseQuery('?module=database&lesson=99'), {
  31. module: 'database',
  32. lesson: '99',
  33. });
  34. assert.equal(
  35. courseHref('tasks', '01&module=api'),
  36. '?module=tasks&lesson=01%26module%3Dapi',
  37. );
  38. console.log(
  39. 'Course navigation: legacy links, 8 module round-trips, overview routes and query encoding passed.',
  40. );