mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-09-23 19:06:31 +00:00
Add tests for link resolution
This commit is contained in:
@@ -1,10 +1,70 @@
|
||||
jest.autoMockOff();
|
||||
|
||||
var path = require('path');
|
||||
var cheerio = require('cheerio');
|
||||
|
||||
describe('resolveLinks', function() {
|
||||
var resolveLinks = require('../resolveLinks');
|
||||
|
||||
function resolveFileBasic(href) {
|
||||
return href;
|
||||
}
|
||||
|
||||
function resolveFileCustom(href) {
|
||||
if (path.extname(href) == '.md') {
|
||||
return href.slice(0, -3) + '.html';
|
||||
}
|
||||
|
||||
return href;
|
||||
}
|
||||
|
||||
describe('Absolute path', function() {
|
||||
var TEST = '<p>This is a <a href="/test/cool.md"></a></p>';
|
||||
|
||||
pit('should resolve path starting by "/" in root directory', function() {
|
||||
var $ = cheerio.load(TEST);
|
||||
|
||||
return resolveLinks('hello.md', resolveFileBasic, $)
|
||||
.then(function() {
|
||||
var link = $('a');
|
||||
expect(link.attr('href')).toBe('test/cool.md');
|
||||
});
|
||||
});
|
||||
|
||||
pit('should resolve path starting by "/" in child directory', function() {
|
||||
var $ = cheerio.load(TEST);
|
||||
|
||||
return resolveLinks('afolder/hello.md', resolveFileBasic, $)
|
||||
.then(function() {
|
||||
var link = $('a');
|
||||
expect(link.attr('href')).toBe('../test/cool.md');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('Custom Resolver', function() {
|
||||
var TEST = '<p>This is a <a href="/test/cool.md"></a> <a href="afile.png"></a></p>';
|
||||
|
||||
pit('should resolve path correctly for absolute path', function() {
|
||||
var $ = cheerio.load(TEST);
|
||||
|
||||
return resolveLinks('hello.md', resolveFileCustom, $)
|
||||
.then(function() {
|
||||
var link = $('a').first();
|
||||
expect(link.attr('href')).toBe('test/cool.html');
|
||||
});
|
||||
});
|
||||
|
||||
pit('should resolve path correctly for absolute path (2)', function() {
|
||||
var $ = cheerio.load(TEST);
|
||||
|
||||
return resolveLinks('afodler/hello.md', resolveFileCustom, $)
|
||||
.then(function() {
|
||||
var link = $('a').first();
|
||||
expect(link.attr('href')).toBe('../test/cool.html');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
@@ -17,13 +17,13 @@ function resolveLinks(currentFile, resolveFile, $) {
|
||||
return editHTMLElement($, 'a', function($a) {
|
||||
var href = $a.attr('href');
|
||||
|
||||
if (location.isExternal(href)) {
|
||||
if (LocationUtils.isExternal(href)) {
|
||||
$a.attr('_target', 'blank');
|
||||
return;
|
||||
}
|
||||
|
||||
// Calcul absolute path for this
|
||||
href = LocationUtils.toAbsolute(href, currentDirectory, currentDirectory);
|
||||
href = LocationUtils.toAbsolute(href, currentDirectory, '.');
|
||||
|
||||
// Resolve file
|
||||
href = resolveFile(href);
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
jest.autoMockOff();
|
||||
|
||||
describe('LocationUtils', function() {
|
||||
var LocationUtils = require('../location');
|
||||
|
||||
describe('toAbsolute', function() {
|
||||
|
||||
it('should resolve path starting by "/" in root directory', function() {
|
||||
expect(
|
||||
LocationUtils.toAbsolute('/test/hello.md', './', './')
|
||||
).toBe('test/hello.md');
|
||||
});
|
||||
|
||||
it('should resolve path starting by "/" in child directory', function() {
|
||||
expect(
|
||||
LocationUtils.toAbsolute('/test/hello.md', './hello', './')
|
||||
).toBe('test/hello.md');
|
||||
});
|
||||
|
||||
it('should resolve path starting by "/" in child directory, with same output directory', function() {
|
||||
expect(
|
||||
LocationUtils.toAbsolute('/test/hello.md', './hello', './hello')
|
||||
).toBe('../test/hello.md');
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user