223 lines
8.2 KiB
JavaScript
223 lines
8.2 KiB
JavaScript
const testPackage = require('../../helpers/test-package');
|
|
const processorFactory = require('./renderLinkInfo');
|
|
const extractLinks = require('dgeni-packages/base/services/extractLinks')();
|
|
const Dgeni = require('dgeni');
|
|
|
|
describe('renderLinkInfo processor', () => {
|
|
|
|
it('should be available on the injector', () => {
|
|
const dgeni = new Dgeni([testPackage('angular-base-package')]);
|
|
const injector = dgeni.configureInjector();
|
|
const processor = injector.get('renderLinkInfo');
|
|
expect(processor.$process).toBeDefined();
|
|
});
|
|
|
|
it('should run before the correct processor', () => {
|
|
const processor = processorFactory(extractLinks);
|
|
expect(processor.$runBefore).toEqual(['convertToJsonProcessor']);
|
|
});
|
|
|
|
it('should run after the correct processor', () => {
|
|
const processor = processorFactory(extractLinks);
|
|
expect(processor.$runAfter).toEqual(['fixInternalDocumentLinks']);
|
|
});
|
|
|
|
it('should add HTML comments for links out of docs', () => {
|
|
const processor = processorFactory(extractLinks);
|
|
processor.docTypes = ['test'];
|
|
const docs = [
|
|
{ path: 'test-1', docType: 'test', renderedContent: '<a href="a/b/c"></a><a href="x/y/z"></a>' },
|
|
{ path: 'test-2', docType: 'test', renderedContent: '<a href="foo"></a><a href="bar"></a>' },
|
|
];
|
|
processor.$process(docs);
|
|
expect(docs).toEqual([
|
|
{
|
|
path: 'test-1',
|
|
docType: 'test',
|
|
renderedContent: '<a href="a/b/c"></a><a href="x/y/z"></a>\n' +
|
|
'<!-- links to this doc:\n-->\n' +
|
|
'<!-- links from this doc:\n - a/b/c\n - x/y/z\n-->'
|
|
},
|
|
{
|
|
path: 'test-2',
|
|
docType: 'test',
|
|
renderedContent: '<a href="foo"></a><a href="bar"></a>\n' +
|
|
'<!-- links to this doc:\n-->\n' +
|
|
'<!-- links from this doc:\n - bar\n - foo\n-->'
|
|
},
|
|
]);
|
|
});
|
|
|
|
it('should order links alphabetically', () => {
|
|
const processor = processorFactory(extractLinks);
|
|
processor.docTypes = ['test'];
|
|
const docs = [
|
|
{ path: 'test-1', docType: 'test', renderedContent: '<a href="orange"></a><a href="apple"></a><a href="banana"></a>' },
|
|
];
|
|
processor.$process(docs);
|
|
expect(docs).toEqual([
|
|
{
|
|
path: 'test-1',
|
|
docType: 'test',
|
|
renderedContent: '<a href="orange"></a><a href="apple"></a><a href="banana"></a>\n' +
|
|
'<!-- links to this doc:\n-->\n' +
|
|
'<!-- links from this doc:\n - apple\n - banana\n - orange\n-->'
|
|
},
|
|
]);
|
|
});
|
|
|
|
it('should list repeated links only once', () => {
|
|
const processor = processorFactory(extractLinks);
|
|
processor.docTypes = ['test'];
|
|
const docs = [
|
|
{ path: 'test-1', docType: 'test', renderedContent: '<a href="banana"></a><a href="apple"></a><a href="banana"></a>' },
|
|
];
|
|
processor.$process(docs);
|
|
expect(docs).toEqual([
|
|
{
|
|
path: 'test-1',
|
|
docType: 'test',
|
|
renderedContent: '<a href="banana"></a><a href="apple"></a><a href="banana"></a>\n' +
|
|
'<!-- links to this doc:\n-->\n' +
|
|
'<!-- links from this doc:\n - apple\n - banana\n-->'
|
|
},
|
|
]);
|
|
});
|
|
|
|
it('should list internal links before external', () => {
|
|
const processor = processorFactory(extractLinks);
|
|
processor.docTypes = ['test'];
|
|
const docs = [
|
|
{ path: 'test-1', docType: 'test', renderedContent: '<a href="https://www.google.com"></a><a href="apple"></a><a href="ftp://myfile.org"></a>' },
|
|
];
|
|
processor.$process(docs);
|
|
expect(docs).toEqual([
|
|
{
|
|
path: 'test-1',
|
|
docType: 'test',
|
|
renderedContent: '<a href="https://www.google.com"></a><a href="apple"></a><a href="ftp://myfile.org"></a>\n' +
|
|
'<!-- links to this doc:\n-->\n' +
|
|
'<!-- links from this doc:\n - apple\n - ftp://myfile.org\n - https://www.google.com\n-->'
|
|
},
|
|
]);
|
|
});
|
|
|
|
it('should ignore docs that do not have the specified docType', () => {
|
|
const processor = processorFactory(extractLinks);
|
|
processor.docTypes = ['test'];
|
|
const docs = [
|
|
{ path: 'test-1', docType: 'test', renderedContent: '<a href="a/b/c"></a><a href="x/y/z"></a>' },
|
|
{ path: 'test-2', docType: 'test2', renderedContent: '<a href="foo"></a><a href="bar"></a>' },
|
|
];
|
|
processor.$process(docs);
|
|
expect(docs).toEqual([
|
|
{
|
|
path: 'test-1',
|
|
docType: 'test',
|
|
renderedContent: '<a href="a/b/c"></a><a href="x/y/z"></a>\n' +
|
|
'<!-- links to this doc:\n-->\n' +
|
|
'<!-- links from this doc:\n - a/b/c\n - x/y/z\n-->'
|
|
},
|
|
{
|
|
path: 'test-2',
|
|
docType: 'test2',
|
|
renderedContent: '<a href="foo"></a><a href="bar"></a>'
|
|
},
|
|
]);
|
|
});
|
|
|
|
it('should add HTML comments for links into docs', () => {
|
|
const processor = processorFactory(extractLinks);
|
|
processor.docTypes = ['test'];
|
|
const docs = [
|
|
{ path: 'test-1', docType: 'test', renderedContent: '<a href="test-2"></a>' },
|
|
{ path: 'test-2', docType: 'test', renderedContent: '<a href="test-1"></a><a href="test-3"></a>' },
|
|
{ path: 'test-3', docType: 'test', renderedContent: '<a href="test-1"></a><a href="test-2"></a>' },
|
|
];
|
|
processor.$process(docs);
|
|
expect(docs).toEqual([
|
|
{
|
|
path: 'test-1',
|
|
docType: 'test',
|
|
renderedContent: '<a href="test-2"></a>\n' +
|
|
'<!-- links to this doc:\n - test-2\n - test-3\n-->\n' +
|
|
'<!-- links from this doc:\n - test-2\n-->'
|
|
},
|
|
{
|
|
path: 'test-2',
|
|
docType: 'test',
|
|
renderedContent: '<a href="test-1"></a><a href="test-3"></a>\n' +
|
|
'<!-- links to this doc:\n - test-1\n - test-3\n-->\n' +
|
|
'<!-- links from this doc:\n - test-1\n - test-3\n-->'
|
|
},
|
|
{
|
|
path: 'test-3',
|
|
docType: 'test',
|
|
renderedContent: '<a href="test-1"></a><a href="test-2"></a>\n' +
|
|
'<!-- links to this doc:\n - test-2\n-->\n' +
|
|
'<!-- links from this doc:\n - test-1\n - test-2\n-->'
|
|
},
|
|
]);
|
|
});
|
|
|
|
it('should not include links to themselves', () => {
|
|
const processor = processorFactory(extractLinks);
|
|
processor.docTypes = ['test'];
|
|
const docs = [
|
|
{ path: 'test-1', docType: 'test', renderedContent: '<a href="test-2"></a>' },
|
|
{ path: 'test-2', docType: 'test', renderedContent: '<a href="test-1"></a><a href="test-2"></a>' },
|
|
];
|
|
processor.$process(docs);
|
|
expect(docs).toEqual([
|
|
{
|
|
path: 'test-1',
|
|
docType: 'test',
|
|
renderedContent: '<a href="test-2"></a>\n' +
|
|
'<!-- links to this doc:\n - test-2\n-->\n' +
|
|
'<!-- links from this doc:\n - test-2\n-->'
|
|
},
|
|
{
|
|
path: 'test-2',
|
|
docType: 'test',
|
|
renderedContent: '<a href="test-1"></a><a href="test-2"></a>\n' +
|
|
'<!-- links to this doc:\n - test-1\n-->\n' +
|
|
'<!-- links from this doc:\n - test-1\n-->'
|
|
},
|
|
]);
|
|
});
|
|
|
|
it('should match links that contain fragments or queries', () => {
|
|
const processor = processorFactory(extractLinks);
|
|
processor.docTypes = ['test'];
|
|
const docs = [
|
|
{ path: 'test-1', docType: 'test', renderedContent: '<a href="test-2#foo"></a>' },
|
|
{ path: 'test-2', docType: 'test', renderedContent: '<a href="test-1?some-query"></a>' },
|
|
{ path: 'test-3', docType: 'test', renderedContent: '<a href="test-1?some-query#foo"></a>' },
|
|
];
|
|
processor.$process(docs);
|
|
expect(docs).toEqual([
|
|
{
|
|
path: 'test-1',
|
|
docType: 'test',
|
|
renderedContent: '<a href="test-2#foo"></a>\n' +
|
|
'<!-- links to this doc:\n - test-2\n - test-3\n-->\n' +
|
|
'<!-- links from this doc:\n - test-2#foo\n-->'
|
|
},
|
|
{
|
|
path: 'test-2',
|
|
docType: 'test',
|
|
renderedContent: '<a href="test-1?some-query"></a>\n' +
|
|
'<!-- links to this doc:\n - test-1\n-->\n' +
|
|
'<!-- links from this doc:\n - test-1?some-query\n-->'
|
|
},
|
|
{
|
|
path: 'test-3',
|
|
docType: 'test',
|
|
renderedContent: '<a href="test-1?some-query#foo"></a>\n' +
|
|
'<!-- links to this doc:\n-->\n' +
|
|
'<!-- links from this doc:\n - test-1?some-query#foo\n-->'
|
|
},
|
|
]);
|
|
});
|
|
});
|