const debug = require('debug') const glob = require('glob') const path = require('path') const should = require('should/as-function') const fixtures = require('../fixtures') const index = require('../../src/index') describe('Full integration', function () { this.slow(5000) this.timeout(5000) var tmpdir = null var options = null before(() => { const image = fixtures.fromDisk('photo.jpg') tmpdir = fixtures.createTempStructure({ 'input/london/IMG_0001.jpg': image, 'input/london/IMG_0002.jpg': image, 'input/newyork/day 1/IMG_0003.jpg': image, 'input/newyork/day 2/IMG_0004.jpg': image }) options = { input: path.join(tmpdir, 'input'), output: path.join(tmpdir, 'output'), title: 'Photo album', theme: 'classic', log: 'info' } }) // Listr uses control.log() to print progress // But so does Mocha to print test results // So we override it for the duration of the integration test beforeEach(() => { console.logOld = console.log console.log = debug('thumbsup:info') debug.reset() }) afterEach(() => { console.log = console.logOld }) it('builds the gallery from scratch', function (testDone) { index.build(options, err => { // Reset the logger ASAP to print the test status console.log = console.logOld // Check for any errors should(err).eql(null) debug.assertNotContains('thumbsup:error') // Check the contents of the output folder const actualFiles = actualStructure(options.output) // Database assertExist(actualFiles, [ 'thumbsup.db' ]) // Albums assertExist(actualFiles, [ 'index.html', 'london.html', 'newyork-day-1.html', 'newyork-day-2.html' ]) // Thumbnails assertExist(actualFiles, [ 'media/thumbs/london/IMG_0001.jpg', 'media/thumbs/london/IMG_0002.jpg', 'media/thumbs/newyork/day 1/IMG_0003.jpg', 'media/thumbs/newyork/day 2/IMG_0004.jpg' ]) // Large versions assertExist(actualFiles, [ 'media/large/london/IMG_0001.jpg', 'media/large/london/IMG_0002.jpg', 'media/large/newyork/day 1/IMG_0003.jpg', 'media/large/newyork/day 2/IMG_0004.jpg' ]) testDone() }) }) it('builds the gallery a second time (nothing to do)', function (testDone) { index.build(options, err => { // Reset the logger ASAP to print the test status console.log = console.logOld should(err).eql(null) testDone() }) }) }) function actualStructure (dir) { return glob.sync('**/*', { cwd: dir, ignore: 'public', nodir: true, nonull: false }) } function assertExist (actual, expected) { const missing = expected.filter(f => actual.indexOf(f) === -1) should([]).eql(missing) }