diff --git a/lib/index.js b/lib/index.js index 5b7fb74..13e1050 100644 --- a/lib/index.js +++ b/lib/index.js @@ -481,20 +481,27 @@ async function hyperlink( ) { const originalUrl = asset.url; - try { - asset.fileName += '.html'; - await asset.load(); - - reportTest({ - ...loadReport, - ok: true, + const prettyUrl = asset.url.replace(/(\?|#|$)/, '.html$1'); + let prettyAsset = ag.findAssets({ url: prettyUrl })[0]; + if (!prettyAsset) { + prettyAsset = ag.addAsset({ + url: prettyUrl, }); - asset.url = originalUrl; + } + try { + await prettyAsset.load(); + asset.isRedirect = true; + asset.fileRedirectTargetUrl = prettyUrl; } catch (err) { reportTest(failedLoadReport); - asset.url = originalUrl; return; } + + reportTest({ + ...loadReport, + ok: true, + }); + asset.url = originalUrl; } else { reportTest(failedLoadReport); return; diff --git a/test/index.js b/test/index.js index 955128f..14dc936 100644 --- a/test/index.js +++ b/test/index.js @@ -2893,8 +2893,8 @@ describe('hyperlink', function () { ); expect(t.close(), 'to satisfy', { - count: 5, - pass: 5, + count: 7, + pass: 7, fail: 0, skip: 0, todo: 0, @@ -2932,6 +2932,30 @@ describe('hyperlink', function () { }); }); }); + + // Regression test for https://github.com/Munter/hyperlink/issues/182 + it('should not break when discovering a second pretty link to a page that has already been processed', async function () { + const t = new TapRender(); + sinon.spy(t, 'push'); + await hyperlink( + { + recursive: true, + root: pathModule.resolve( + __dirname, + '..', + 'testdata', + 'prettyUrlIssue182' + ), + inputUrls: ['index.html'], + pretty: true, + }, + t + ); + + expect(t.close(), 'to satisfy', { + fail: 0, + }); + }); }); it('should resolve local srcset images as internal', async function () { diff --git a/testdata/prettyUrlIssue182/index.html b/testdata/prettyUrlIssue182/index.html new file mode 100644 index 0000000..d0db99e --- /dev/null +++ b/testdata/prettyUrlIssue182/index.html @@ -0,0 +1,8 @@ + + + + + + Set Designer + + diff --git a/testdata/prettyUrlIssue182/set-designer.html b/testdata/prettyUrlIssue182/set-designer.html new file mode 100644 index 0000000..d0db99e --- /dev/null +++ b/testdata/prettyUrlIssue182/set-designer.html @@ -0,0 +1,8 @@ + + + + + + Set Designer + +