diff options
author | Samy Pessé <samypesse@gmail.com> | 2016-04-28 15:20:25 +0200 |
---|---|---|
committer | Samy Pessé <samypesse@gmail.com> | 2016-04-28 15:20:25 +0200 |
commit | cb3ee423c976c93d35e7e7c8722787bd69cb747e (patch) | |
tree | 0093154277a7aaf5bf64afb1b3982dfefe033fe8 | |
parent | 1360a744a72fc84dacde22283a8dc2687ff6c3cb (diff) | |
download | gitbook-cb3ee423c976c93d35e7e7c8722787bd69cb747e.zip gitbook-cb3ee423c976c93d35e7e7c8722787bd69cb747e.tar.gz gitbook-cb3ee423c976c93d35e7e7c8722787bd69cb747e.tar.bz2 |
Add basic tests for json generator
-rw-r--r-- | lib/modifiers/summary/indexArticleLevels.js | 2 | ||||
-rw-r--r-- | lib/modifiers/summary/indexPartLevels.js | 2 | ||||
-rw-r--r-- | lib/modifiers/summary/unshiftArticle.js | 1 | ||||
-rw-r--r-- | lib/output/__tests__/json.js | 29 | ||||
-rw-r--r-- | lib/output/generateMock.js | 33 | ||||
-rw-r--r-- | lib/output/getModifiers.js | 2 | ||||
-rw-r--r-- | lib/parse/parseSummary.js | 10 |
7 files changed, 72 insertions, 7 deletions
diff --git a/lib/modifiers/summary/indexArticleLevels.js b/lib/modifiers/summary/indexArticleLevels.js index 02ca594..f311f74 100644 --- a/lib/modifiers/summary/indexArticleLevels.js +++ b/lib/modifiers/summary/indexArticleLevels.js @@ -8,7 +8,7 @@ */ function indexArticleLevels(article, baseLevel) { baseLevel = baseLevel || article.getLevel(); - var articles = article.getArticle(); + var articles = article.getArticles(); articles = articles.map(function(inner, i) { return indexArticleLevels(inner, baseLevel + '.' + (i + 1)); diff --git a/lib/modifiers/summary/indexPartLevels.js b/lib/modifiers/summary/indexPartLevels.js index 19ba089..d19c70a 100644 --- a/lib/modifiers/summary/indexPartLevels.js +++ b/lib/modifiers/summary/indexPartLevels.js @@ -9,7 +9,7 @@ var indexArticleLevels = require('./indexArticleLevels'); */ function indexPartLevels(part, index) { var baseLevel = String(index + 1); - var articles = part.getArticle(); + var articles = part.getArticles(); articles = articles.map(function(inner, i) { return indexArticleLevels(inner, baseLevel + '.' + (i + 1)); diff --git a/lib/modifiers/summary/unshiftArticle.js b/lib/modifiers/summary/unshiftArticle.js index 6bb97c9..3f2ae4d 100644 --- a/lib/modifiers/summary/unshiftArticle.js +++ b/lib/modifiers/summary/unshiftArticle.js @@ -18,6 +18,7 @@ function unshiftArticle(summary, article) { var articles = part.getArticles(); articles = articles.unshift(article); + part = part.set('articles', articles); parts = parts.set(0, part); summary = summary.set('parts', parts); diff --git a/lib/output/__tests__/json.js b/lib/output/__tests__/json.js new file mode 100644 index 0000000..94a0362 --- /dev/null +++ b/lib/output/__tests__/json.js @@ -0,0 +1,29 @@ +var generateMock = require('../generateMock'); +var JSONGenerator = require('../json'); + +describe('JSONGenerator', function() { + + pit('should generate a README.json', function() { + return generateMock(JSONGenerator, { + 'README.md': 'Hello World' + }) + .then(function(folder) { + expect(folder).toHaveFile('README.json'); + }); + }); + + pit('should generate a json file for each articles', function() { + return generateMock(JSONGenerator, { + 'README.md': 'Hello World', + 'SUMMARY.md': '# Summary\n\n* [Page](test/page.md)', + 'test': { + 'page.md': 'Hello 2' + } + }) + .then(function(folder) { + expect(folder).toHaveFile('README.json'); + expect(folder).toHaveFile('test/page.json'); + }); + }); +}); + diff --git a/lib/output/generateMock.js b/lib/output/generateMock.js new file mode 100644 index 0000000..b779e32 --- /dev/null +++ b/lib/output/generateMock.js @@ -0,0 +1,33 @@ +var tmp = require('tmp'); + +var Book = require('../models/book'); +var createMockFS = require('../fs/mock'); +var parseBook = require('../parse/parseBook'); +var generateBook = require('./generateBook'); + + +/** + Generate a book using JSON generator + And returns the path to the output dir. + + FOR TESTING PURPOSE ONLY + + @param {Generator} + @param {Map<String:String|Map>} files + @return {Promise<String>} +*/ +function generateMock(Generator, files) { + var fs = createMockFS(files); + var book = Book.createForFS(fs); + var dir = tmp.dirSync(); + + return parseBook(book) + .then(function(resultBook) { + return generateBook(Generator, resultBook, { + root: dir.name + }); + }) + .thenResolve(dir.name); +} + +module.exports = generateMock; diff --git a/lib/output/getModifiers.js b/lib/output/getModifiers.js index 23cfb1c..e649df6 100644 --- a/lib/output/getModifiers.js +++ b/lib/output/getModifiers.js @@ -11,7 +11,7 @@ var CODEBLOCK = 'code'; Return default modifier to prepare a page for rendering. - @return <Array> + @return {Array<Modifier>} */ function getModifiers(output, page) { var book = output.getBook(); diff --git a/lib/parse/parseSummary.js b/lib/parse/parseSummary.js index 0c07ac7..2c6186f 100644 --- a/lib/parse/parseSummary.js +++ b/lib/parse/parseSummary.js @@ -16,13 +16,15 @@ function parseSummary(book) { return parseStructureFile(book, 'summary') .spread(function(file, result) { + var summary; + if (!file) { logger.warn.ln('no summary file in this book'); - return book; + summary = Summary(); + } else { + logger.debug.ln('summary file found at', file.getPath()); + summary = Summary.createFromParts(file, result.parts); } - logger.debug.ln('summary file found at', file.getPath()); - - var summary = Summary.createFromParts(file, result.parts); // Insert readme as first entry var firstArticle = summary.getFirstArticle(); |