thenavisapp
Version:
This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
115 lines (100 loc) • 3.06 kB
text/typescript
import test from 'ava';
import parseLinkHeader from '../source/core/parse-link-header.js';
test('works as expected', t => {
t.deepEqual(
parseLinkHeader(
'<https://one.example.com>; rel="preconnect", <https://two.example.com>; rel="preconnect", <https://three.example.com>; rel="preconnect"',
),
[
{
reference: 'https://one.example.com',
parameters: {rel: '"preconnect"'},
},
{
reference: 'https://two.example.com',
parameters: {rel: '"preconnect"'},
},
{
reference: 'https://three.example.com',
parameters: {rel: '"preconnect"'},
},
],
);
t.deepEqual(
parseLinkHeader(
'<https://one.example.com>; rel="previous"; title="previous chapter"',
),
[
{
reference: 'https://one.example.com',
parameters: {rel: '"previous"', title: '"previous chapter"'},
},
],
);
t.deepEqual(
parseLinkHeader('</>; rel="http://example.net/foo"'),
[
{
reference: '/',
parameters: {rel: '"http://example.net/foo"'},
},
],
);
t.deepEqual(
parseLinkHeader('</terms>; rel="copyright"; anchor="#foo"'),
[
{
reference: '/terms',
parameters: {rel: '"copyright"', anchor: '"#foo"'},
},
],
);
t.deepEqual(parseLinkHeader(`</TheBook/chapter2>;
rel="previous"; title*=UTF-8'de'letztes%20Kapitel,
</TheBook/chapter4>;
rel="next"; title*=UTF-8'de'n%c3%a4chstes%20Kapitel`), [
{
reference: '/TheBook/chapter2',
parameters: {
rel: '"previous"',
// eslint-disable-next-line @typescript-eslint/quotes, @typescript-eslint/naming-convention
'title*': `UTF-8'de'letztes%20Kapitel`,
},
},
{
reference: '/TheBook/chapter4',
parameters: {
rel: '"next"',
// eslint-disable-next-line @typescript-eslint/quotes, @typescript-eslint/naming-convention
'title*': `UTF-8'de'n%c3%a4chstes%20Kapitel`,
},
},
]);
t.throws(() => parseLinkHeader('https://bad.example; rel="preconnect"'), {
message: 'Invalid format of the Link header reference: https://bad.example',
});
t.throws(() => parseLinkHeader('https://bad.example; rel'), {
message: 'Invalid format of the Link header reference: https://bad.example',
});
t.throws(() => parseLinkHeader('https://bad.example'), {
message: 'Invalid format of the Link header reference: https://bad.example',
});
t.throws(() => parseLinkHeader(''), {
message: 'Invalid format of the Link header reference: ',
});
t.throws(() => parseLinkHeader('<https://bad.example>; rel'), {
message: 'Failed to parse Link header: <https://bad.example>; rel',
});
t.throws(() => parseLinkHeader('<https://bad.example>'), {
message: 'Unexpected end of Link header parameters: ',
});
t.throws(() => parseLinkHeader('<>'), {
message: 'Unexpected end of Link header parameters: ',
});
t.throws(() => parseLinkHeader('<https://bad.example'), {
message: 'Invalid format of the Link header reference: <https://bad.example',
});
t.throws(() => parseLinkHeader('https://bad.example>'), {
message: 'Invalid format of the Link header reference: https://bad.example>',
});
});