maintenanceWikiUrls.test.ts 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. /**
  2. * Unit tests for getMaintenanceWikiUrl — model-aware wiki URL resolver.
  3. *
  4. * Covers the X2D classification (#988): X2D has hardened steel rods like
  5. * P2S, NOT carbon rods and NOT linear rails. It must resolve to the P2S
  6. * wiki pages for steel-rod-specific tasks.
  7. *
  8. * Also guards against regressions for the existing families (X1, P1, A1,
  9. * H2D, P2S) so that broadening the rod-type bucket for X2D did not
  10. * accidentally change their mappings.
  11. */
  12. import { describe, it, expect } from 'vitest';
  13. import { getMaintenanceWikiUrl } from '../../utils/maintenanceWikiUrls';
  14. describe('getMaintenanceWikiUrl', () => {
  15. describe('X2D (#988)', () => {
  16. it('resolves "Lubricate Steel Rods" to the P2S wiki page', () => {
  17. expect(getMaintenanceWikiUrl('Lubricate Steel Rods', 'X2D')).toBe(
  18. 'https://wiki.bambulab.com/en/p2s/maintenance/lubricate-x-y-z-axis',
  19. );
  20. });
  21. it('resolves "Clean Steel Rods" to the P2S wiki page', () => {
  22. expect(getMaintenanceWikiUrl('Clean Steel Rods', 'X2D')).toBe(
  23. 'https://wiki.bambulab.com/en/p2s/maintenance/lubricate-x-y-z-axis',
  24. );
  25. });
  26. it('resolves belt tension to the P2S wiki page', () => {
  27. expect(getMaintenanceWikiUrl('Check Belt Tension', 'X2D')).toBe(
  28. 'https://wiki.bambulab.com/en/p2s/maintenance/belt-tension',
  29. );
  30. });
  31. it('resolves nozzle cold pull to the P2S wiki page', () => {
  32. expect(getMaintenanceWikiUrl('Clean Nozzle/Hotend', 'X2D')).toBe(
  33. 'https://wiki.bambulab.com/en/p2s/maintenance/cold-pull-maintenance-hotend',
  34. );
  35. });
  36. it('does not return a carbon-rod wiki URL for X2D', () => {
  37. // "Clean Carbon Rods" is X1/P1-only; X2D must resolve to null so the
  38. // task button renders without a link rather than pointing at the wrong page.
  39. expect(getMaintenanceWikiUrl('Clean Carbon Rods', 'X2D')).toBeNull();
  40. });
  41. it('does not return a linear-rail wiki URL for X2D', () => {
  42. // "Lubricate Linear Rails" is A1/H2-only.
  43. expect(getMaintenanceWikiUrl('Lubricate Linear Rails', 'X2D')).toBeNull();
  44. });
  45. });
  46. describe('regression: P2S still maps to P2S wiki pages', () => {
  47. it('still resolves Lubricate Steel Rods for P2S', () => {
  48. expect(getMaintenanceWikiUrl('Lubricate Steel Rods', 'P2S')).toBe(
  49. 'https://wiki.bambulab.com/en/p2s/maintenance/lubricate-x-y-z-axis',
  50. );
  51. });
  52. it('still resolves belt tension for P2S', () => {
  53. expect(getMaintenanceWikiUrl('Check Belt Tension', 'P2S')).toBe(
  54. 'https://wiki.bambulab.com/en/p2s/maintenance/belt-tension',
  55. );
  56. });
  57. });
  58. describe('P1 belt tension (#3302)', () => {
  59. // Bambu Lab's belt page covers X1 and P1 ("X1/P1 Series Belt tensioning
  60. // procedure"); there is no P1 page of its own. The link went to the P1
  61. // series' general maintenance recommendations instead.
  62. it.each(['P1S', 'P1P', 'P1 S'])('%s links to the X1/P1 belt tensioning page', (model) => {
  63. expect(getMaintenanceWikiUrl('Check Belt Tension', model)).toBe(
  64. 'https://wiki.bambulab.com/en/x1/maintenance/belt-tension',
  65. );
  66. });
  67. });
  68. describe('regression: other families untouched', () => {
  69. it('X1C belt tension unchanged', () => {
  70. expect(getMaintenanceWikiUrl('Check Belt Tension', 'X1C')).toBe(
  71. 'https://wiki.bambulab.com/en/x1/maintenance/belt-tension',
  72. );
  73. });
  74. it('H2D belt tension unchanged', () => {
  75. expect(getMaintenanceWikiUrl('Check Belt Tension', 'H2D')).toBe(
  76. 'https://wiki.bambulab.com/en/h2/maintenance/belt-tension',
  77. );
  78. });
  79. it('A1 Mini linear rails unchanged', () => {
  80. expect(getMaintenanceWikiUrl('Lubricate Linear Rails', 'A1 Mini')).toBe(
  81. 'https://wiki.bambulab.com/en/a1-mini/maintenance/lubricate-y-axis',
  82. );
  83. });
  84. it('X1C carbon rods unchanged', () => {
  85. expect(getMaintenanceWikiUrl('Clean Carbon Rods', 'X1C')).toBe(
  86. 'https://wiki.bambulab.com/en/general/carbon-rods-clearance',
  87. );
  88. });
  89. it('P2S still does not resolve linear-rail task', () => {
  90. // Sanity check: the X2D broadening must not have widened P2S into
  91. // unrelated task categories.
  92. expect(getMaintenanceWikiUrl('Lubricate Linear Rails', 'P2S')).toBeNull();
  93. });
  94. });
  95. describe('model name normalisation', () => {
  96. it('matches X2D regardless of hyphens or spaces', () => {
  97. expect(getMaintenanceWikiUrl('Lubricate Steel Rods', 'x-2d')).toBe(
  98. 'https://wiki.bambulab.com/en/p2s/maintenance/lubricate-x-y-z-axis',
  99. );
  100. expect(getMaintenanceWikiUrl('Lubricate Steel Rods', 'x 2d')).toBe(
  101. 'https://wiki.bambulab.com/en/p2s/maintenance/lubricate-x-y-z-axis',
  102. );
  103. });
  104. it('returns null for empty model', () => {
  105. expect(getMaintenanceWikiUrl('Lubricate Steel Rods', null)).toBeNull();
  106. expect(getMaintenanceWikiUrl('Lubricate Steel Rods', '')).toBeNull();
  107. });
  108. });
  109. });