var fs = require('fs'); var path = require('path'); describe('JSON generator', function () { describe('Basic Book', function() { var book; before(function() { return books.generate('basic', 'json') .then(function(_book) { book = _book; }); }); it('should correctly output a README.json', function() { book.should.have.file('README.json'); }); it('should output a valid json', function() { book.should.have.jsonfile('README.json'); }); describe('Page Format', function() { var page; before(function() { page = JSON.parse( fs.readFileSync( path.join(book.options.output, 'README.json'), { encoding: 'utf-8' } ) ); }); it('should contains valid section', function() { page.should.have.property('sections').with.lengthOf(1); page.sections[0].should.have.property('content').which.is.a.String(); page.sections[0].should.have.property('type', 'normal'); }); it('should contains valid progress', function() { page.should.have.property('progress'); page.progress.should.have.property('chapters').with.lengthOf(1); page.progress.should.have.property('current'); }); it('should contains no languages', function() { page.should.have.property('langs').with.lengthOf(0); }); }); }); describe('Multilingual Book', function() { var book; before(function() { return books.generate('languages', 'json') .then(function(_book) { book = _book; }); }); it('should correctly output READMEs', function() { book.should.have.file('README.json'); book.should.have.file('en/README.json'); book.should.have.file('fr/README.json'); }); it('should output valid json', function() { book.should.have.jsonfile('README.json'); book.should.have.jsonfile('en/README.json'); book.should.have.jsonfile('fr/README.json'); }); describe('Page Format', function() { var page; before(function() { page = JSON.parse( fs.readFileSync( path.join(book.options.output, 'README.json'), { encoding: 'utf-8' } ) ); }); it('should contains no languages', function() { page.should.have.property('langs').with.lengthOf(2); }); }); }); });