const fs = require('fs') const path = require('path') const should = require('should/as-function') const Index = require('../../../src/components/index/index') const fixtures = require('../../fixtures') describe('Index', function () { this.slow(1000) this.timeout(1000) var tmpdir = null before(() => { const image = fixtures.fromDisk('photo.jpg') tmpdir = fixtures.createTempStructure({ 'input/london/IMG_0001.jpg': image, 'input/newyork/IMG_0002.jpg': image }) }) it('indexes a folder', (done) => { const index = new Index(path.join(tmpdir, 'thumbsup.db')) const emitter = index.update(path.join(tmpdir, 'input')) const emitted = [] var processed = 0 var stats = null emitter.on('progress', () => ++processed) emitter.on('file', meta => emitted.push(meta)) emitter.on('stats', s => { stats = s }) emitter.on('done', result => { // check stats should(result.count).eql(2) should(stats).eql({ unchanged: 0, added: 2, modified: 0, deleted: 0, total: 2 }) // check all files were indexed const paths = emitted.map(e => e.path).sort() should(paths).eql([ 'london/IMG_0001.jpg', 'newyork/IMG_0002.jpg' ]) // check all files were sent to exiftool should(processed).eql(2) // check the path matches the SourceFile property const sourceFiles = emitted.map(e => e.metadata.SourceFile).sort() should(paths).eql(sourceFiles) done() }) }) it('can re-index with no changes', (done) => { const index = new Index(path.join(tmpdir, 'thumbsup.db')) const emitter = index.update(path.join(tmpdir, 'input')) var emitted = 0 var processed = 0 var stats = null emitter.on('progress', () => ++processed) emitter.on('file', () => ++emitted) emitter.on('stats', s => { stats = s }) emitter.on('done', result => { // check stats should(result.count).eql(2) should(stats).eql({ unchanged: 2, added: 0, modified: 0, deleted: 0, total: 2 }) // all files are emitted, but they were not processed again should(emitted).eql(2) should(processed).eql(0) done() }) }) it('can un-index a deleted file', (done) => { fs.unlinkSync(path.join(tmpdir, 'input/newyork/IMG_0002.jpg')) const index = new Index(path.join(tmpdir, 'thumbsup.db')) const emitter = index.update(path.join(tmpdir, 'input')) var emitted = 0 var processed = 0 var stats = null emitter.on('progress', () => ++processed) emitter.on('file', () => ++emitted) emitter.on('stats', s => { stats = s }) emitter.on('done', result => { // check stats should(result.count).eql(1) should(stats).eql({ unchanged: 1, added: 0, modified: 0, deleted: 1, total: 1 }) // the remaining file was emitted should(emitted).eql(1) should(processed).eql(0) done() }) }) it('can vacuum the database', () => { const index = new Index(path.join(tmpdir, 'thumbsup.db')) index.vacuum() }) })