blob: e56c45aaa3dbbfe3eb7dc0912eeccd9e609e3776 [file] [log] [blame]
import assert from 'assert';
import {unlinkSync, readFileSync } from 'fs';
import {mockNodeIsOnline} from './helpers.js';
import savetofile, {cli} from '../src/savetofile.js';
import nmo from '../src/nmo.js';
import nock from 'nock';
import zlib from 'zlib';
import { createConfigFile } from './common';
describe('savetofile', () => {
createConfigFile();
beforeEach(() => {
return nmo
.load({nmoconf: __dirname + '/fixtures/randomini'});
});
describe('cli', () => {
it('Returns error for empty params', () => {
cli().catch(err => {
assert.ok(/Usage/.test(err.message));
});
});
it('Returns error for missing file', () => {
cli('a url').catch(err => {
assert.ok(/Usage/.test(err.message));
});
});
it('returns error with type EUSAGE for any error', () => {
cli('http://127.0.0.1:5555', 'the-db', 'a-file')
.catch(err => {
assert.deepEqual(err.type, 'EUSAGE');
});
});
});
describe('savetofile', () => {
const file1 = __dirname + '/fixtures/delete-me-please.json';
const file2 = __dirname + '/fixtures/savetofiletest.json';
const file3 = __dirname + '/fixtures/savetofiletest.json';
function deleteFile (file) {
//try and delete file. Its ok if it fails
try {
unlinkSync(file);
} catch (e) {
}
}
afterEach(() => {
deleteFile(file1);
deleteFile(file2);
deleteFile(file3);
deleteFile(file3 + '.gzip');
});
it('get all docs for db', () => {
const url = 'http://127.0.1.20';
mockNodeIsOnline(url);
nock(url)
.get('/test-db/_all_docs?include_docs=true')
.reply(200, []);
return savetofile(url, 'test-db', file1);
});
it('saves contents to file', () => {
const resp = {
'total_rows':2,
'offset':0,
'rows':[
{
'id':'0461444c-e60a-457d-a4bb-b8d811853f21',
'key':'0461444c-e60a-457d-a4bb-b8d811853f21',
'value':{'rev':'1-090ec379aecccc97f8d02bc024ba28e5'},
'doc':{
'_id':'0461444c-e60a-457d-a4bb-b8d811853f21',
'_rev':'1-090ec379aecccc97f8d02bc024ba28e5',
'name': 'Garren'
}
},
{
'id':'0461444c-e60a-457d-a4bb-b8d811853123',
'key':'0461444c-e60a-457d-a4bb-b8d811853123',
'value':{'rev':'1-090ec379aecccc97f8d02bc024ba123'},
'doc':{
'_id':'0461444c-e60a-457d-a4bb-b8d811853f21',
'_rev':'1-090ec379aecccc97f8d02bc024ba28e5',
'name': 'Robert'
}
}
]
};
const url = 'http://127.0.1.20';
mockNodeIsOnline(url);
nock(url)
.get('/test-db/_all_docs?include_docs=true')
.reply(200, resp);
return savetofile(url, 'test-db', file2)
.then(() => {
const fileContents = readFileSync(file2, 'utf8');
var rows = resp.rows.map(row => row.doc);
assert.deepEqual(JSON.parse(fileContents), rows);
});
});
it('saves contents to file and zips with --zip', done => {
const resp = {
'total_rows':2,
'offset':0,
'rows':[
{
'id':'0461444c-e60a-457d-a4bb-b8d811853f21',
'key':'0461444c-e60a-457d-a4bb-b8d811853f21',
'value':{'rev':'1-090ec379aecccc97f8d02bc024ba28e5'},
'doc':{
'_id':'0461444c-e60a-457d-a4bb-b8d811853f21',
'_rev':'1-090ec379aecccc97f8d02bc024ba28e5',
'name': 'Garren'
}
},
{
'id':'0461444c-e60a-457d-a4bb-b8d811853123',
'key':'0461444c-e60a-457d-a4bb-b8d811853123',
'value':{'rev':'1-090ec379aecccc97f8d02bc024ba123'},
'doc':{
'_id':'0461444c-e60a-457d-a4bb-b8d811853f21',
'_rev':'1-090ec379aecccc97f8d02bc024ba28e5',
'name': 'Robert'
}
}
]
};
const url = 'http://127.0.1.20';
mockNodeIsOnline(url);
nock(url)
.get('/test-db/_all_docs?include_docs=true')
.reply(200, resp);
nmo
.load({nmoconf: __dirname + '/fixtures/randomini', compress: true})
.then(() => {
savetofile(url, 'test-db', file3)
.then(() => {
zlib.unzip(readFileSync(file3 + '.gzip'), function (err, fileContents) {
const rows = resp.rows.map(row => row.doc);
assert.deepEqual(JSON.parse(fileContents.toString()), rows);
done();
});
});
});
});
});
});