summaryrefslogtreecommitdiffstats
path: root/test/mock.js
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2016-01-22 21:04:36 +0100
committerSamy Pessé <samypesse@gmail.com>2016-01-22 21:04:36 +0100
commit877f2e477b010f9f37a9044606f110a90f077680 (patch)
tree5cd61cf3b00ba10dc6110535ed9fdf67d8baba72 /test/mock.js
parentc8e2fc0e57d223c01a51d6ee186fc1662cd74d13 (diff)
downloadgitbook-877f2e477b010f9f37a9044606f110a90f077680.zip
gitbook-877f2e477b010f9f37a9044606f110a90f077680.tar.gz
gitbook-877f2e477b010f9f37a9044606f110a90f077680.tar.bz2
Start rewrite
Diffstat (limited to 'test/mock.js')
-rw-r--r--test/mock.js61
1 files changed, 61 insertions, 0 deletions
diff --git a/test/mock.js b/test/mock.js
new file mode 100644
index 0000000..f562fa9
--- /dev/null
+++ b/test/mock.js
@@ -0,0 +1,61 @@
+var Q = require('q');
+var _ = require('lodash');
+var tmp = require('tmp');
+var path = require('path');
+
+require('should');
+require('should-promised');
+
+var Book = require('../').Book;
+var NodeFS = require('../lib/fs/node');
+
+// Create filesystem instance for testing
+var fs = new NodeFS();
+
+function setupFS(fs, rootFolder, files) {
+ return _.chain(_.pairs(files))
+ .sortBy(0)
+ .reduce(function(prev, pair) {
+ return prev.then(function() {
+ var filename = path.resolve(rootFolder, pair[0]);
+ var buf = pair[1];
+
+ if (_.isObject(buf)) buf = JSON.stringify(buf);
+ if (_.isString(buf)) buf = new Buffer(buf, 'utf-8');
+
+ return fs.write(filename, buf);
+ });
+ }, Q())
+ .value()
+ .then(function() {
+ return fs;
+ });
+}
+
+// Setup a mock book for testing using a map of files
+function setupBook(files, opts) {
+ opts = opts || {};
+
+ return Q.nfcall(tmp.dir.bind(tmp)).get(0)
+ .then(function(folder) {
+ opts.fs = fs;
+ opts.root = folder;
+ return setupFS(fs, folder, files);
+ })
+ .then(function(fs) {
+ return new Book(opts);
+ });
+}
+
+// Setup a book with default README/SUMMARY
+function setupDefaultBook(files, opts) {
+ return setupBook(_.defaults(files || {}, {
+ 'README.md': 'Hello',
+ 'SUMMARY.md': '# Summary'
+ }), opts);
+}
+
+module.exports = {
+ setupBook: setupBook,
+ setupDefaultBook: setupDefaultBook
+};