diff --git a/tests/mapreduce/test.mapreduce.js b/tests/mapreduce/test.mapreduce.js index d607f32004..97a3a90477 100644 --- a/tests/mapreduce/test.mapreduce.js +++ b/tests/mapreduce/test.mapreduce.js @@ -1,11 +1,11 @@ /* global sum */ 'use strict'; -var viewTypes = ['persisted', 'temp']; +const viewTypes = ['persisted', 'temp']; viewTypes.forEach(function (viewType) { - var suiteName = 'test.mapreduce.js-' + viewType; - var adapter = testUtils.adapterType(); - var dbName = testUtils.adapterUrl(adapter, 'testdb'); + const suiteName = 'test.mapreduce.js-' + viewType; + const adapter = testUtils.adapterType(); + const dbName = testUtils.adapterUrl(adapter, 'testdb'); tests(suiteName, dbName, adapter, viewType); }); @@ -13,10 +13,10 @@ viewTypes.forEach(function (viewType) { function tests(suiteName, dbName, dbType, viewType) { describe(suiteName, function () { - var createView; + let createView; if (dbType === 'http' || viewType === 'persisted') { createView = function (db, viewObj) { - var storableViewObj = { + const storableViewObj = { map: viewObj.map.toString() }; if (viewObj.reduce) { @@ -62,76 +62,71 @@ function tests(suiteName, dbName, dbType, viewType) { return new PouchDB(dbName).destroy(); }); - it("Test basic view", function () { - var db = new PouchDB(dbName); - return createView(db, { - map: function (doc) { + it("Test basic view", async function () { + const db = new PouchDB(dbName); + const view = await createView(db, { + map: (doc) => { emit(doc.foo, doc); } - }).then(function (view) { - return db.bulkDocs({docs: [ - {foo: 'bar'}, - { _id: 'volatile', foo: 'baz' } - ]}).then(function () { - return db.get('volatile'); - }).then(function (doc) { - return db.remove(doc); - }).then(function () { - return db.query(view, {include_docs: true, reduce: false}); - }).then(function (res) { - res.rows.should.have.length(1, 'Dont include deleted documents'); - res.total_rows.should.equal(1, 'Include total_rows property.'); - res.rows.forEach(function (x) { - should.exist(x.id); - should.exist(x.key); - should.exist(x.value); - should.exist(x.value._rev); - should.exist(x.doc); - should.exist(x.doc._rev); - }); - }); + }); + + await db.bulkDocs({docs: [ + {foo: 'bar'}, + { _id: 'volatile', foo: 'baz' } + ]}); + + const doc = await db.get('volatile'); + await db.remove(doc); + const res = await db.query(view, {include_docs: true, reduce: false}); + + res.rows.should.have.length(1, 'Dont include deleted documents'); + res.total_rows.should.equal(1, 'Include total_rows property.'); + res.rows.forEach((x) => { + should.exist(x.id); + should.exist(x.key); + should.exist(x.value); + should.exist(x.value._rev); + should.exist(x.doc); + should.exist(x.doc._rev); }); }); - it("Test basic view, no emitted value", function () { - var db = new PouchDB(dbName); - return createView(db, { - map: function (doc) { - emit(doc.foo); - } - }).then(function (view) { - return db.bulkDocs({docs: [ - {foo: 'bar'}, - { _id: 'volatile', foo: 'baz' } - ]}).then(function () { - return db.get('volatile'); - }).then(function (doc) { - return db.remove(doc); - }).then(function () { - return db.query(view, {include_docs: true, reduce: false}); - }).then(function (res) { - res.rows.should.have.length(1, - 'Dont include deleted documents'); - res.total_rows.should.equal(1, 'Include total_rows property.'); - res.rows.forEach(function (x) { - should.exist(x.id); - should.exist(x.key); - should.equal(x.value, null); - should.exist(x.doc); - should.exist(x.doc._rev); - }); - }); + it("Test basic view, no emitted value", async function () { + const db = new PouchDB(dbName); + const view = await createView(db, { + map: (doc) => { + emit(doc.foo); + } + }); + + await db.bulkDocs({docs: [ + {foo: 'bar'}, + { _id: 'volatile', foo: 'baz' } + ]}); + + const doc = await db.get('volatile'); + await db.remove(doc); + const res = await db.query(view, {include_docs: true, reduce: false}); + + res.rows.should.have.length(1, 'Dont include deleted documents'); + res.total_rows.should.equal(1, 'Include total_rows property.'); + res.rows.forEach((x) => { + should.exist(x.id); + should.exist(x.key); + should.equal(x.value, null); + should.exist(x.doc); + should.exist(x.doc._rev); }); }); if (dbType === 'local' && viewType === 'temp') { it("with a closure", function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return db.bulkDocs({docs: [ {foo: 'bar'}, { _id: 'volatile', foo: 'baz' } ]}).then(function () { - var queryFun = (function (test) { + const queryFun = (function (test) { return function (doc, emit) { if (doc._id === test) { emit(doc.foo); @@ -155,10 +150,10 @@ function tests(suiteName, dbName, dbType, viewType) { if (viewType === 'temp' && dbType !== 'http') { it('Test simultaneous temp views', function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return db.put({_id: '0', foo: 1, bar: 2, baz: 3}).then(function () { return Promise.all(['foo', 'bar', 'baz'].map(function (key, i) { - var fun = 'function(doc){emit(doc.' + key + ');}'; + const fun = 'function(doc){emit(doc.' + key + ');}'; return db.query({map: fun}).then(function (res) { res.rows.should.deep.equal([{ id: '0', @@ -171,7 +166,7 @@ function tests(suiteName, dbName, dbType, viewType) { }); it("Test passing just a function", function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return db.bulkDocs({docs: [ {foo: 'bar'}, { _id: 'volatile', foo: 'baz' } @@ -197,163 +192,152 @@ function tests(suiteName, dbName, dbType, viewType) { }); } - it("Test opts.startkey/opts.endkey", function () { - var db = new PouchDB(dbName); - return createView(db, { - map: function (doc) { + it("Test opts.startkey/opts.endkey", async function () { + const db = new PouchDB(dbName); + const queryFun = await createView(db, { + map: (doc) => { emit(doc.key, doc); } - }).then(function (queryFun) { - return db.bulkDocs({docs: [ - {key: 'key1'}, - {key: 'key2'}, - {key: 'key3'}, - {key: 'key4'}, - {key: 'key5'} - ]}).then(function () { - return db.query(queryFun, {reduce: false, startkey: 'key2'}); - }).then(function (res) { - res.rows.should.have.length(4, 'Startkey is inclusive'); - return db.query(queryFun, {reduce: false, endkey: 'key3'}); - }).then(function (res) { - res.rows.should.have.length(3, 'Endkey is inclusive'); - return db.query(queryFun, { + }); + + await db.bulkDocs({docs: [ + {key: 'key1'}, + {key: 'key2'}, + {key: 'key3'}, + {key: 'key4'}, + {key: 'key5'}]}); + + let res = await db.query(queryFun, {reduce: false, startkey: 'key2'}); + res.rows.should.have.length(4, 'Startkey is inclusive'); + + res = await db.query(queryFun, {reduce: false, endkey: 'key3'}); + res.rows.should.have.length(3, 'Endkey is inclusive'); + + res = await db.query(queryFun, { reduce: false, startkey: 'key2', endkey: 'key3' - }); - }).then(function (res) { - res.rows.should.have.length(2, 'Startkey and endkey together'); - return db.query(queryFun, { + }); + res.rows.should.have.length(2, 'Startkey and endkey together'); + + res = await db.query(queryFun, { reduce: false, startkey: 'key4', endkey: 'key4' - }); - }).then(function (res) { - res.rows.should.have.length(1, 'Startkey=endkey'); - }); }); + res.rows.should.have.length(1, 'Startkey=endkey'); }); - it("#4154 opts.start_key/opts.end_key are synonyms", function () { - var db = new PouchDB(dbName); - return createView(db, { - map: function (doc) { + it("#4154 opts.start_key/opts.end_key are synonyms", async function () { + const db = new PouchDB(dbName); + const queryFun = await createView(db, { + map: (doc) => { emit(doc.key, doc); } - }).then(function (queryFun) { - return db.bulkDocs({docs: [ - {key: 'key1'}, - {key: 'key2'}, - {key: 'key3'}, - {key: 'key4'}, - {key: 'key5'} - ]}).then(function () { - return db.query(queryFun, {reduce: false, start_key: 'key2'}); - }).then(function (res) { - res.rows.should.have.length(4, 'Startkey is inclusive'); - return db.query(queryFun, {reduce: false, end_key: 'key3'}); - }).then(function (res) { - res.rows.should.have.length(3, 'Endkey is inclusive'); - return db.query(queryFun, { - reduce: false, - start_key: 'key2', - end_key: 'key3' - }); - }).then(function (res) { - res.rows.should.have.length(2, 'Startkey and endkey together'); - return db.query(queryFun, { - reduce: false, - start_key: 'key4', - end_key: 'key4' - }); - }).then(function (res) { - res.rows.should.have.length(1, 'Startkey=endkey'); - }); }); + + await db.bulkDocs({docs: [ + {key: 'key1'}, + {key: 'key2'}, + {key: 'key3'}, + {key: 'key4'}, + {key: 'key5'} + ]}); + + let res = await db.query(queryFun, {reduce: false, start_key: 'key2'}); + res.rows.should.have.length(4, 'Startkey is inclusive'); + + res = await db.query(queryFun, {reduce: false, end_key: 'key3'}); + res.rows.should.have.length(3, 'Endkey is inclusive'); + + res = await db.query(queryFun, { + reduce: false, + start_key: 'key2', + end_key: 'key3' + }); + res.rows.should.have.length(2, 'Startkey and endkey together'); + + res = await db.query(queryFun, { + reduce: false, + start_key: 'key4', + end_key: 'key4' + }); + res.rows.should.have.length(1, 'Startkey=endkey'); }); //TODO: split this to their own tests within a describe block - it("Test opts.inclusive_end = false", function () { - var db = new PouchDB(dbName); - return createView(db, { - map: function (doc) { + it("Test opts.inclusive_end = false", async function () { + const db = new PouchDB(dbName); + const queryFun = await createView(db, { + map: (doc) => { emit(doc.key, doc); } - }).then(function (queryFun) { - return db.bulkDocs({docs: [ - {key: 'key1'}, - {key: 'key2'}, - {key: 'key3'}, - {key: 'key4'}, - {key: 'key4'}, - {key: 'key5'} - ]}).then(function () { - return db.query(queryFun, { + }); + + await db.bulkDocs({docs: [ + {key: 'key1'}, + {key: 'key2'}, + {key: 'key3'}, + {key: 'key4'}, + {key: 'key4'}, + {key: 'key5'} + ]}); + + let res = await db.query(queryFun, { + reduce: false, + endkey: 'key4', + inclusive_end: false + }); + res.rows.should.have.length(3, 'endkey=key4 without ' + 'inclusive end'); + res.rows[0].key.should.equal('key1'); + res.rows[2].key.should.equal('key3'); + + res = await db.query(queryFun, { reduce: false, + startkey: 'key3', endkey: 'key4', inclusive_end: false - }); - }).then(function (resp) { - resp.rows.should.have.length(3, 'endkey=key4 without ' + - 'inclusive end'); - resp.rows[0].key.should.equal('key1'); - resp.rows[2].key.should.equal('key3'); - }) - .then(function () { - return db.query(queryFun, { - reduce: false, - startkey: 'key3', - endkey: 'key4', - inclusive_end: false - }); - }).then(function (resp) { - resp.rows.should.have.length(1, 'startkey=key3, endkey=key4 ' + - 'without inclusive end'); - resp.rows[0].key.should.equal('key3'); - }).then(function () { - return db.query(queryFun, { - reduce: false, - startkey: 'key4', - endkey: 'key1', - descending: true, - inclusive_end: false - }); - }).then(function (resp) { - resp.rows.should - .have.length(4, 'startkey=key4, endkey=key1 descending without ' + - 'inclusive end'); - resp.rows[0].key.should.equal('key4'); - }); }); + res.rows.should.have.length(1, 'startkey=key3, endkey=key4 ' + 'without inclusive end'); + res.rows[0].key.should.equal('key3'); + + res = await db.query(queryFun, { + reduce: false, + startkey: 'key4', + endkey: 'key1', + descending: true, + inclusive_end: false + }); + res.rows.should.have.length(4, 'startkey=key4, endkey=key1 descending without ' + + 'inclusive end'); + res.rows[0].key.should.equal('key4'); }); - it("Test opts.key", function () { - var db = new PouchDB(dbName); - return createView(db, { - map: function (doc) { + it("Test opts.key", async function () { + const db = new PouchDB(dbName); + const queryFun = await createView(db, { + map: (doc) => { emit(doc.key, doc); } - }).then(function (queryFun) { - return db.bulkDocs({docs: [ + }); + + await db.bulkDocs({docs: [ {key: 'key1'}, {key: 'key2'}, {key: 'key3'}, {key: 'key3'} - ]}).then(function () { - return db.query(queryFun, {reduce: false, key: 'key2'}); - }).then(function (res) { - res.rows.should.have.length(1, 'Doc with key'); - return db.query(queryFun, {reduce: false, key: 'key3'}); - }).then(function (res) { - res.rows.should.have.length(2, 'Multiple docs with key'); - }); - }); + ]}); + + let res = await db.query(queryFun, {reduce: false, key: 'key2'}); + res.rows.should.have.length(1, 'Doc with key'); + + res = await db.query(queryFun, {reduce: false, key: 'key3'}); + res.rows.should.have.length(2, 'Multiple docs with key'); }); - it("Test basic view collation", function () { + it("Test basic view collation", async function () { - var values = []; + const values = []; // special values sort before all other types values.push(null); @@ -397,36 +381,34 @@ function tests(suiteName, dbName, dbType, viewType) { // (this test might fail if used with a js engine // that doesn't preserve order) values.push({b: 2, c: 2}); - var db = new PouchDB(dbName); - return createView(db, { - map: function (doc) { - emit(doc.foo); + const db = new PouchDB(dbName); + + const queryFun = await createView(db, { + map: (doc) => { + emit(doc.foo); } - }).then(function (queryFun) { + }); - var docs = values.map(function (x, i) { - return {_id: (i).toString(), foo: x}; - }); - return db.bulkDocs({docs}).then(function () { - return db.query(queryFun, {reduce: false}); - }).then(function (res) { - res.rows.forEach(function (x, i) { - JSON.stringify(x.key).should.equal(JSON.stringify(values[i]), - 'keys collate'); - }); - return db.query(queryFun, {descending: true, reduce: false}); - }).then(function (res) { - res.rows.forEach(function (x, i) { - JSON.stringify(x.key).should.equal(JSON.stringify( - values[values.length - 1 - i]), - 'keys collate descending'); - }); - }); + const docs = values.map((x, i) => ({_id: (i).toString(), foo: x})); + + await db.bulkDocs({docs}); + + let res = await db.query(queryFun, {reduce: false}); + + res.rows.forEach((x, i) => { + JSON.stringify(x.key).should.equal(JSON.stringify(values[i]), 'keys collate'); + }); + + res = await db.query(queryFun, {descending: true, reduce: false}); + + res.rows.forEach((x, i) => { + JSON.stringify(x.key).should.equal(JSON.stringify( + values[values.length - 1 - i]), 'keys collate descending'); }); }); - it('Test complex key collation', function () { - var map = function () { + it('Test complex key collation', async function () { + const map = () => { emit(null); emit(false); emit(true); @@ -452,480 +434,394 @@ function tests(suiteName, dbName, dbType, viewType) { emit({"b":2,"a":1}); emit({"b":2,"c":2}); }; - var db = new PouchDB(dbName); - return db.bulkDocs([ + + const db = new PouchDB(dbName); + await db.bulkDocs([ { _id: '1' }, { _id: '2' } - ]).then(function () { - return createView(db, { map }); - }).then(function (queryFun) { - return db.query(queryFun).then(function (res) { - var rows = res.rows.map(function (x) { - return { - id: x.id, - key: x.key, - value: x.value - }; - }); - assert.deepEqual(rows, [ - { id: '1', key: null, value: null }, - { id: '2', key: null, value: null }, - { id: '1', key: false, value: null }, - { id: '2', key: false, value: null }, - { id: '1', key: true, value: null }, - { id: '2', key: true, value: null }, - { id: '1', key: 1, value: null }, - { id: '2', key: 1, value: null }, - { id: '1', key: 2, value: null }, - { id: '2', key: 2, value: null }, - { id: '1', key: 3, value: null }, - { id: '2', key: 3, value: null }, - { id: '1', key: 4, value: null }, - { id: '2', key: 4, value: null }, - { id: '1', key: 'a', value: null }, - { id: '2', key: 'a', value: null }, - { id: '1', key: 'aa', value: null }, - { id: '2', key: 'aa', value: null }, - { id: '1', key: 'b', value: null }, - { id: '2', key: 'b', value: null }, - { id: '1', key: 'ba', value: null }, - { id: '2', key: 'ba', value: null }, - { id: '1', key: 'bb', value: null }, - { id: '2', key: 'bb', value: null }, - { id: '1', key: [ 'a' ], value: null }, - { id: '2', key: [ 'a' ], value: null }, - { id: '1', key: [ 'b' ], value: null }, - { id: '2', key: [ 'b' ], value: null }, - { id: '1', key: [ 'b', 'c' ], value: null }, - { id: '2', key: [ 'b', 'c' ], value: null }, - { id: '1', key: [ 'b', 'c', 'a' ], value: null }, - { id: '2', key: [ 'b', 'c', 'a' ], value: null }, - { id: '1', key: [ 'b', 'd' ], value: null }, - { id: '2', key: [ 'b', 'd' ], value: null }, - { id: '1', key: [ 'b', 'd', 'e' ], value: null }, - { id: '2', key: [ 'b', 'd', 'e' ], value: null }, - { id: '1', key: { a: 1 }, value: null }, - { id: '2', key: { a: 1 }, value: null }, - { id: '1', key: { a: 2 }, value: null }, - { id: '2', key: { a: 2 }, value: null }, - { id: '1', key: { b: 1 }, value: null }, - { id: '2', key: { b: 1 }, value: null }, - { id: '1', key: { b: 2 }, value: null }, - { id: '2', key: { b: 2 }, value: null }, - { id: '1', key: { b: 2, a: 1 }, value: null }, - { id: '2', key: { b: 2, a: 1 }, value: null }, - { id: '1', key: { b: 2, c: 2 }, value: null }, - { id: '2', key: { b: 2, c: 2 }, value: null } - ]); - }); - }); + ]); + + const queryFun = await createView(db, { map }); + const res = await db.query(queryFun); + const rows = mapToRows(res); + + assert.deepEqual(rows, [ + { id: '1', key: null, value: null }, + { id: '2', key: null, value: null }, + { id: '1', key: false, value: null }, + { id: '2', key: false, value: null }, + { id: '1', key: true, value: null }, + { id: '2', key: true, value: null }, + { id: '1', key: 1, value: null }, + { id: '2', key: 1, value: null }, + { id: '1', key: 2, value: null }, + { id: '2', key: 2, value: null }, + { id: '1', key: 3, value: null }, + { id: '2', key: 3, value: null }, + { id: '1', key: 4, value: null }, + { id: '2', key: 4, value: null }, + { id: '1', key: 'a', value: null }, + { id: '2', key: 'a', value: null }, + { id: '1', key: 'aa', value: null }, + { id: '2', key: 'aa', value: null }, + { id: '1', key: 'b', value: null }, + { id: '2', key: 'b', value: null }, + { id: '1', key: 'ba', value: null }, + { id: '2', key: 'ba', value: null }, + { id: '1', key: 'bb', value: null }, + { id: '2', key: 'bb', value: null }, + { id: '1', key: [ 'a' ], value: null }, + { id: '2', key: [ 'a' ], value: null }, + { id: '1', key: [ 'b' ], value: null }, + { id: '2', key: [ 'b' ], value: null }, + { id: '1', key: [ 'b', 'c' ], value: null }, + { id: '2', key: [ 'b', 'c' ], value: null }, + { id: '1', key: [ 'b', 'c', 'a' ], value: null }, + { id: '2', key: [ 'b', 'c', 'a' ], value: null }, + { id: '1', key: [ 'b', 'd' ], value: null }, + { id: '2', key: [ 'b', 'd' ], value: null }, + { id: '1', key: [ 'b', 'd', 'e' ], value: null }, + { id: '2', key: [ 'b', 'd', 'e' ], value: null }, + { id: '1', key: { a: 1 }, value: null }, + { id: '2', key: { a: 1 }, value: null }, + { id: '1', key: { a: 2 }, value: null }, + { id: '2', key: { a: 2 }, value: null }, + { id: '1', key: { b: 1 }, value: null }, + { id: '2', key: { b: 1 }, value: null }, + { id: '1', key: { b: 2 }, value: null }, + { id: '2', key: { b: 2 }, value: null }, + { id: '1', key: { b: 2, a: 1 }, value: null }, + { id: '2', key: { b: 2, a: 1 }, value: null }, + { id: '1', key: { b: 2, c: 2 }, value: null }, + { id: '2', key: { b: 2, c: 2 }, value: null } + ]); }); - it('Test duplicate collation of objects', function () { - var db = new PouchDB(dbName); - return db.bulkDocs([ + it('Test duplicate collation of objects', async function () { + const db = new PouchDB(dbName); + await db.bulkDocs([ { _id: '1' }, { _id: '2' } - ]).then(function () { - return createView(db, { - map: function () { - emit({ a: 'a' }, { b: 'b' }); - emit({ a: 'a' }, { b: 'b' }); - } - }); - }).then(function (queryFun) { - return db.query(queryFun).then(function (res) { - var rows = res.rows.map(function (x) { - return { - id: x.id, - key: x.key, - value: x.value - }; - }); - assert.deepEqual(rows, [ - { "id": "1", "key": { "a": "a" }, "value": { b: 'b' }}, - { "id": "1", "key": { "a": "a" }, "value": { b: 'b' }}, - { "id": "2", "key": { "a": "a" }, "value": { b: 'b' }}, - { "id": "2", "key": { "a": "a" }, "value": { b: 'b' }} - ]); - }); + ]); + + const queryFun = await createView(db, { + map: () => { + emit({ a: 'a' }, { b: 'b' }); + emit({ a: 'a' }, { b: 'b' }); + } }); + + const res = await db.query(queryFun); + const rows = mapToRows(res); + + assert.deepEqual(rows, [ + { "id": "1", "key": { "a": "a" }, "value": { b: 'b' }}, + { "id": "1", "key": { "a": "a" }, "value": { b: 'b' }}, + { "id": "2", "key": { "a": "a" }, "value": { b: 'b' }}, + { "id": "2", "key": { "a": "a" }, "value": { b: 'b' }} + ]); }); - it('Test collation of undefined/null', function () { - var db = new PouchDB(dbName); - return db.bulkDocs([ + it('Test collation of undefined/null', async function () { + const db = new PouchDB(dbName); + await db.bulkDocs([ { _id: '1' }, { _id: '2' } - ]).then(function () { - return createView(db, { - map: function () { - emit(); - emit(null); - } - }); - }).then(function (queryFun) { - return db.query(queryFun).then(function (res) { - var rows = res.rows.map(function (x) { - return { - id: x.id, - key: x.key, - value: x.value - }; - }); - assert.deepEqual(rows, [ - { "id": "1", "key": null, "value": null}, - { "id": "1", "key": null, "value": null}, - { "id": "2", "key": null, "value": null}, - { "id": "2", "key": null, "value": null} - ]); - }); + ]); + + const queryFun = await createView(db, { + map: () => { + emit(); + emit(null); + } }); + + const res = await db.query(queryFun); + const rows = mapToRows(res); + + assert.deepEqual(rows, [ + { "id": "1", "key": null, "value": null}, + { "id": "1", "key": null, "value": null}, + { "id": "2", "key": null, "value": null}, + { "id": "2", "key": null, "value": null} + ]); }); - it('Test collation of null/undefined', function () { - var db = new PouchDB(dbName); - return db.bulkDocs([ + it('Test collation of null/undefined', async function () { + const db = new PouchDB(dbName); + await db.bulkDocs([ { _id: '1' }, { _id: '2' } - ]).then(function () { - return createView(db, { - map: function () { + ]); + const queryFun = await createView(db, { + map: () => { emit(null); emit(); } - }); - }).then(function (queryFun) { - return db.query(queryFun).then(function (res) { - var rows = res.rows.map(function (x) { - return { - id: x.id, - key: x.key, - value: x.value - }; - }); - assert.deepEqual(rows, [ - { "id": "1", "key": null, "value": null}, - { "id": "1", "key": null, "value": null}, - { "id": "2", "key": null, "value": null}, - { "id": "2", "key": null, "value": null} - ]); - }); }); + + const res = await db.query(queryFun); + const rows = mapToRows(res); + + assert.deepEqual(rows, [ + { "id": "1", "key": null, "value": null}, + { "id": "1", "key": null, "value": null}, + { "id": "2", "key": null, "value": null}, + { "id": "2", "key": null, "value": null} + ]); }); - it('Test duplicate collation of nulls', function () { - var db = new PouchDB(dbName); - return db.bulkDocs([ + it('Test duplicate collation of nulls', async function () { + const db = new PouchDB(dbName); + await db.bulkDocs([ { _id: '1' }, { _id: '2' } - ]).then(function () { - return createView(db, { - map: function () { + ]); + const queryFun = await createView(db, { + map: () => { emit(null); emit(null); } - }); - }).then(function (queryFun) { - return db.query(queryFun).then(function (res) { - var rows = res.rows.map(function (x) { - return { - id: x.id, - key: x.key, - value: x.value - }; - }); - assert.deepEqual(rows, [ - { "id": "1", "key": null, "value": null}, - { "id": "1", "key": null, "value": null}, - { "id": "2", "key": null, "value": null}, - { "id": "2", "key": null, "value": null} - ]); - }); }); + + const res = await db.query(queryFun); + const rows = mapToRows(res); + + assert.deepEqual(rows, [ + { "id": "1", "key": null, "value": null}, + { "id": "1", "key": null, "value": null}, + { "id": "2", "key": null, "value": null}, + { "id": "2", "key": null, "value": null} + ]); }); - it('Test duplicate collation of booleans', function () { - var db = new PouchDB(dbName); - return db.bulkDocs([ + it('Test duplicate collation of booleans', async function () { + const db = new PouchDB(dbName); + await db.bulkDocs([ { _id: '1' }, { _id: '2' } - ]).then(function () { - return createView(db, { - map: function () { - emit(true); - emit(true); - } - }); - }).then(function (queryFun) { - return db.query(queryFun).then(function (res) { - var rows = res.rows.map(function (x) { - return { - id: x.id, - key: x.key, - value: x.value - }; - }); - assert.deepEqual(rows, [ - { "id": "1", "key": true, "value": null}, - { "id": "1", "key": true, "value": null}, - { "id": "2", "key": true, "value": null}, - { "id": "2", "key": true, "value": null} - ]); - }); + ]); + + const queryFun = await createView(db, { + map: () => { + emit(true); + emit(true); + } }); + + const res = await db.query(queryFun); + const rows = mapToRows(res); + + assert.deepEqual(rows, [ + { "id": "1", "key": true, "value": null}, + { "id": "1", "key": true, "value": null}, + { "id": "2", "key": true, "value": null}, + { "id": "2", "key": true, "value": null} + ]); }); - it('Test collation of different objects', function () { - var db = new PouchDB(dbName); - return db.bulkDocs([ + it('Test collation of different objects', async function () { + const db = new PouchDB(dbName); + await db.bulkDocs([ { _id: '1' }, { _id: '2' } - ]).then(function () { - return createView(db, { - map: function () { - emit({ a: 'b' }, { a: 'a' }); - emit({ a: 'a' }, { b: 'b' }); - } - }); - }).then(function (queryFun) { - return db.query(queryFun).then(function (res) { - var rows = res.rows.map(function (x) { - return { - id: x.id, - key: x.key, - value: x.value - }; - }); - assert.deepEqual(rows, [ - { "id": "1", "key": { "a": "a" }, "value": { "b": "b" } }, - { "id": "2", "key": { "a": "a" }, "value": { "b": "b" } }, - { "id": "1", "key": { "a": "b" }, "value": { "a": "a" } }, - { "id": "2", "key": { "a": "b" }, "value": { "a": "a" } } - ]); - }); + ]); + + const queryFun = await createView(db, { + map: () => { + emit({ a: 'b' }, { a: 'a' }); + emit({ a: 'a' }, { b: 'b' }); + } }); + + const res = await db.query(queryFun); + const rows = mapToRows(res); + + assert.deepEqual(rows, [ + { "id": "1", "key": { "a": "a" }, "value": { "b": "b" } }, + { "id": "2", "key": { "a": "a" }, "value": { "b": "b" } }, + { "id": "1", "key": { "a": "b" }, "value": { "a": "a" } }, + { "id": "2", "key": { "a": "b" }, "value": { "a": "a" } } + ]); }); - it('Test collation of different objects 2', function () { - var db = new PouchDB(dbName); - return db.bulkDocs([ + it('Test collation of different objects 2', async function () { + const db = new PouchDB(dbName); + await db.bulkDocs([ { _id: '1' }, { _id: '2' } - ]).then(function () { - return createView(db, { - map: function () { - emit({ a: 'b', b: 'c' }, { a: 'a' }); - emit({ a: 'a' }, { b: 'b' }); - } - }); - }).then(function (queryFun) { - return db.query(queryFun).then(function (res) { - var rows = res.rows.map(function (x) { - return { - id: x.id, - key: x.key, - value: x.value - }; - }); - assert.deepEqual(rows, [ - { "id": "1", "key": { "a": "a" }, "value": { "b": "b" } }, - { "id": "2", "key": { "a": "a" }, "value": { "b": "b" } }, - { "id": "1", "key": { "a": "b", "b": "c" }, "value": { "a": "a" } }, - { "id": "2", "key": { "a": "b", "b": "c" }, "value": { "a": "a" } } - ]); - }); + ]); + + const queryFun = await createView(db, { + map: () => { + emit({ a: 'b', b: 'c' }, { a: 'a' }); + emit({ a: 'a' }, { b: 'b' }); + } }); + + const res = await db.query(queryFun); + const rows = mapToRows(res); + + assert.deepEqual(rows, [ + { "id": "1", "key": { "a": "a" }, "value": { "b": "b" } }, + { "id": "2", "key": { "a": "a" }, "value": { "b": "b" } }, + { "id": "1", "key": { "a": "b", "b": "c" }, "value": { "a": "a" } }, + { "id": "2", "key": { "a": "b", "b": "c" }, "value": { "a": "a" } } + ]); }); - it('Test collation of different objects 3', function () { - var db = new PouchDB(dbName); - return db.bulkDocs([ + it('Test collation of different objects 3', async function () { + const db = new PouchDB(dbName); + await db.bulkDocs([ { _id: '1' }, { _id: '2' } - ]).then(function () { - return createView(db, { - map: function () { - emit({ a: 'a' }, { b: 'b' }); - emit({ a: 'b'}, { a: 'a' }); - } - }); - }).then(function (queryFun) { - return db.query(queryFun).then(function (res) { - var rows = res.rows.map(function (x) { - return { - id: x.id, - key: x.key, - value: x.value - }; - }); - assert.deepEqual(rows, [ - { "id": "1", "key": { "a": "a" }, "value": { "b": "b" } }, - { "id": "2", "key": { "a": "a" }, "value": { "b": "b" } }, - { "id": "1", "key": { "a": "b" }, "value": { "a": "a" } }, - { "id": "2", "key": { "a": "b" }, "value": { "a": "a" } } - ]); - }); + ]); + + const queryFun = await createView(db, { + map: () => { + emit({ a: 'a' }, { b: 'b' }); + emit({ a: 'b'}, { a: 'a' }); + } }); + + const res = await db.query(queryFun); + const rows = mapToRows(res); + + assert.deepEqual(rows, [ + { "id": "1", "key": { "a": "a" }, "value": { "b": "b" } }, + { "id": "2", "key": { "a": "a" }, "value": { "b": "b" } }, + { "id": "1", "key": { "a": "b" }, "value": { "a": "a" } }, + { "id": "2", "key": { "a": "b" }, "value": { "a": "a" } } + ]); }); - it('Test collation of different objects 4', function () { - var db = new PouchDB(dbName); - return db.bulkDocs([ + it('Test collation of different objects 4', async function () { + const db = new PouchDB(dbName); + await db.bulkDocs([ { _id: '1' }, { _id: '2' } - ]).then(function () { - return createView(db, { - map: function () { - emit({ a: 'a'}); - emit({ b: 'b'}); - } - }); - }).then(function (queryFun) { - return db.query(queryFun).then(function (res) { - var rows = res.rows.map(function (x) { - return { - id: x.id, - key: x.key, - value: x.value - }; - }); - assert.deepEqual(rows, [ - { "id": "1", "key": { "a": "a" }, "value": null }, - { "id": "2", "key": { "a": "a" }, "value": null }, - { "id": "1", "key": { "b": "b" }, "value": null }, - { "id": "2", "key": { "b": "b" }, "value": null } - ]); - }); + ]); + + const queryFun = await createView(db, { + map: () => { + emit({ a: 'a'}); + emit({ b: 'b'}); + } }); + + const res = await db.query(queryFun); + const rows = mapToRows(res); + + assert.deepEqual(rows, [ + { "id": "1", "key": { "a": "a" }, "value": null }, + { "id": "2", "key": { "a": "a" }, "value": null }, + { "id": "1", "key": { "b": "b" }, "value": null }, + { "id": "2", "key": { "b": "b" }, "value": null } + ]); }); - it('Test collation of different objects 5', function () { - var db = new PouchDB(dbName); - return db.bulkDocs([ + it('Test collation of different objects 5', async function () { + const db = new PouchDB(dbName); + await db.bulkDocs([ { _id: '1' }, { _id: '2' } - ]).then(function () { - return createView(db, { - map: function () { - emit({ a: 'a'}); - emit({ a: 'a', b: 'b'}); - } - }); - }).then(function (queryFun) { - return db.query(queryFun).then(function (res) { - var rows = res.rows.map(function (x) { - return { - id: x.id, - key: x.key, - value: x.value - }; - }); - assert.deepEqual(rows, [ - { "id": "1", "key": { "a": "a" }, "value": null }, - { "id": "2", "key": { "a": "a" }, "value": null }, - { "id": "1", "key": { "a": "a", "b": "b" }, "value": null }, - { "id": "2", "key": { "a": "a", "b": "b" }, "value": null } - ]); - }); + ]); + + const queryFun = await createView(db, { + map: () => { + emit({ a: 'a'}); + emit({ a: 'a', b: 'b'}); + } }); + + const res = await db.query(queryFun); + const rows = mapToRows(res); + + assert.deepEqual(rows, [ + { "id": "1", "key": { "a": "a" }, "value": null }, + { "id": "2", "key": { "a": "a" }, "value": null }, + { "id": "1", "key": { "a": "a", "b": "b" }, "value": null }, + { "id": "2", "key": { "a": "a", "b": "b" }, "value": null } + ]); }); - it('Test collation of different objects 6', function () { - var db = new PouchDB(dbName); - return db.bulkDocs([ + it('Test collation of different objects 6', async function () { + const db = new PouchDB(dbName); + await db.bulkDocs([ { _id: '1' }, { _id: '2' } - ]).then(function () { - return createView(db, { - map: function () { - emit({ a: 'a'}); - emit({ a: 'a', b: 'b'}); - } - }); - }).then(function (queryFun) { - return db.query(queryFun).then(function (res) { - var rows = res.rows.map(function (x) { - return { - id: x.id, - key: x.key, - value: x.value - }; - }); - assert.deepEqual(rows, [ - { "id": "1", "key": { "a": "a" }, "value": null }, - { "id": "2", "key": { "a": "a" }, "value": null }, - { "id": "1", "key": { "a": "a", "b": "b" }, "value": null }, - { "id": "2", "key": { "a": "a", "b": "b" }, "value": null } - ]); - }); + ]); + + const queryFun = await createView(db, { + map: () => { + emit({ a: 'a'}); + emit({ a: 'a', b: 'b'}); + } }); + + const res = await db.query(queryFun); + const rows = mapToRows(res); + + assert.deepEqual(rows, [ + { "id": "1", "key": { "a": "a" }, "value": null }, + { "id": "2", "key": { "a": "a" }, "value": null }, + { "id": "1", "key": { "a": "a", "b": "b" }, "value": null }, + { "id": "2", "key": { "a": "a", "b": "b" }, "value": null } + ]); }); - it('Test collation of different booleans', function () { - var db = new PouchDB(dbName); - return db.bulkDocs([ + it('Test collation of different booleans', async function () { + const db = new PouchDB(dbName); + await db.bulkDocs([ { _id: '1' }, { _id: '2' } - ]).then(function () { - return createView(db, { - map: function () { + ]); + + const queryFun = await createView(db, { + map: () => { emit(true); emit(false); } }); - }).then(function (queryFun) { - return db.query(queryFun).then(function (res) { - var rows = res.rows.map(function (x) { - return { - id: x.id, - key: x.key, - value: x.value - }; - }); - assert.deepEqual(rows, [ - { "id": "1", "key": false, "value": null }, - { "id": "2", "key": false, "value": null }, - { "id": "1", "key": true, "value": null }, - { "id": "2", "key": true, "value": null } - ]); - }); - }); + + const res = await db.query(queryFun); + const rows = mapToRows(res); + + assert.deepEqual(rows, [ + { "id": "1", "key": false, "value": null }, + { "id": "2", "key": false, "value": null }, + { "id": "1", "key": true, "value": null }, + { "id": "2", "key": true, "value": null } + ]); }); - it('Test collation of different booleans 2', function () { - var db = new PouchDB(dbName); - return db.bulkDocs([ + it('Test collation of different booleans 2', async function () { + const db = new PouchDB(dbName); + await db.bulkDocs([ { _id: '1' }, { _id: '2' } - ]).then(function () { - return createView(db, { - map: function () { - emit(false); - emit(true); - } - }); - }).then(function (queryFun) { - return db.query(queryFun).then(function (res) { - var rows = res.rows.map(function (x) { - return { - id: x.id, - key: x.key, - value: x.value - }; - }); - assert.deepEqual(rows, [ - { "id": "1", "key": false, "value": null }, - { "id": "2", "key": false, "value": null }, - { "id": "1", "key": true, "value": null }, - { "id": "2", "key": true, "value": null } - ]); - }); + ]); + + const queryFun = await createView(db, { + map: () => { + emit(false); + emit(true); + } }); + + const res = await db.query(queryFun); + const rows = mapToRows(res); + + assert.deepEqual(rows, [ + { "id": "1", "key": false, "value": null }, + { "id": "2", "key": false, "value": null }, + { "id": "1", "key": true, "value": null }, + { "id": "2", "key": true, "value": null } + ]); }); it("Test joins", function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: function (doc) { if (doc.doc_id) { @@ -946,7 +842,7 @@ function tests(suiteName, dbName, dbType, viewType) { }); it("No reduce function", function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: function () { emit('key', 'val'); @@ -959,7 +855,7 @@ function tests(suiteName, dbName, dbType, viewType) { }); it("Query after db.close", function () { - var db = new PouchDB(dbName); + let db = new PouchDB(dbName); return createView(db, { map: function (doc) { emit(doc.foo, 'val'); @@ -992,7 +888,7 @@ function tests(suiteName, dbName, dbType, viewType) { }); it("Built in _sum reduce function", function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: function (doc) { emit(doc.val, 1); @@ -1016,7 +912,7 @@ function tests(suiteName, dbName, dbType, viewType) { }); it("Built in _count reduce function", function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: function (doc) { emit(doc.val, doc.val); @@ -1040,7 +936,7 @@ function tests(suiteName, dbName, dbType, viewType) { }); it("Built in _stats reduce function", function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: "function(doc){emit(doc.val, 1);}", reduce: "_stats" @@ -1146,7 +1042,7 @@ function tests(suiteName, dbName, dbType, viewType) { it("Built in _sum reduce function should throw an error with a promise", function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: "function(doc){emit(null, doc.val);}", reduce: "_sum" @@ -1165,7 +1061,7 @@ function tests(suiteName, dbName, dbType, viewType) { it("Built in _sum reduce function with num arrays should throw an error", function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: "function(doc){emit(null, doc.val);}", reduce: "_sum" @@ -1183,7 +1079,7 @@ function tests(suiteName, dbName, dbType, viewType) { }); it("Built in _sum can be used with lists of numbers", function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: "function(doc){emit(null, doc.val);}", reduce: "_sum" @@ -1207,7 +1103,7 @@ function tests(suiteName, dbName, dbType, viewType) { }); it("#6364 Recognize built in reduce functions with trailing garbage", function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: function (doc) { emit(doc.val, 1); @@ -1232,7 +1128,7 @@ function tests(suiteName, dbName, dbType, viewType) { it("Starts with _ but not a built in reduce function should throw", function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: "function(doc){emit(null, doc.val);}", reduce: "_product" @@ -1251,9 +1147,9 @@ function tests(suiteName, dbName, dbType, viewType) { if (viewType === 'temp' && dbType !== 'http') { it("No reduce function, passing just a function", function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return db.post({foo: 'bar'}).then(function () { - var queryFun = function () { + const queryFun = function () { emit('key', 'val'); }; return db.query(queryFun); @@ -1262,13 +1158,13 @@ function tests(suiteName, dbName, dbType, viewType) { } it('Query result should include _conflicts', function () { - var db2name = testUtils.adapterUrl(dbType, 'test2b'); - var cleanup = function () { + const db2name = testUtils.adapterUrl(dbType, 'test2b'); + const cleanup = function () { return new PouchDB(db2name).destroy(); }; - var doc1 = {_id: '1', foo: 'bar'}; - var doc2 = {_id: '1', foo: 'baz'}; - var db = new PouchDB(dbName); + const doc1 = {_id: '1', foo: 'bar'}; + const doc2 = {_id: '1', foo: 'baz'}; + const db = new PouchDB(dbName); return testUtils.fin(db.info().then(function () { return db.put({ _id: '_design/test', @@ -1283,9 +1179,9 @@ function tests(suiteName, dbName, dbType, viewType) { } }); }).then(function () { - var remote = new PouchDB(db2name); + const remote = new PouchDB(db2name); return remote.info().then(function () { - var replicate = testUtils.promisify(db.replicate.from, db.replicate); + const replicate = testUtils.promisify(db.replicate.from, db.replicate); return db.post(doc1).then(function () { return remote.post(doc2); }).then(function () { @@ -1302,7 +1198,7 @@ function tests(suiteName, dbName, dbType, viewType) { }), cleanup); }); - var icons = [ + const icons = [ "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAQAAAAEABcxq3DAAAC8klEQVQ4y6WTS2hcZQCFv//eO++ZpDMZZjKdZB7kNSUpeWjANikoWiMUtEigBdOFipS6Ercu3bpTKF23uGkWBUGsoBg1KRHapjU0U81rpp3ESdNMZu6dx70zc38XdSFYVz1wNmdxzuKcAy8I8RxNDfs705ne5FmX0+mXUtK0mka2kLvxRC9vAe3nGmRiCQ6reux4auDi6ZenL0wOjaa6uoKK2+kgv1O0l1dvby/8/tvVe1t/XAn6ArvZ3fyzNIBjsQS5YiH6/ul3v/z0/AcfTx8fC24+zgvV4SXccYTtYlGM9MSDMydee1W27OQPd5d+Hujure4bZRQVeLCTY2p44tJ7M2/Pjg1lOLQkXy2scP3OQ1b3Snzx3SK/PCoxOphh7q13ZqeGJy492MmhAkoyHMUlRN8b4yfnBnqSWLqJItzkXZPoWhzF4WZdjGJ6+7H0OoPxFG9OnppzCtGXCEdRZ16axu1yffjRmfPnYqEw7WIdj1OlO6wx1e0g7hckO1ReH4wSrkgUVcEfDITub6w9Gus7tqS4NAcOVfMpCFq2jdrjwxv2cG48SejPFe59/gmnyuuMHA0ien0oR1x0BgJ4XG5fwO9Hk802sm3TbFiYVhNNU1FUBYCBsRNEmiad469gYyNUgRDPipNIQKKVajo1s1F9WjqgVjZQELg9Ek3TUFNHCaXnEEiQEvkPDw4PqTfMalk3UKt1g81ioRgLRc6MxPtDbdtGKgIhBdgSKW2kLWm327SaLayGxfzCzY2vf/zms0pVLyn7lQOadbmxuHb7WrawhW220J+WKZXK6EaNsl7F0GsYep1q3eTW6grfLv90zZRyI7dfRDNtSPdE+av05PL8re+HgdlMPI2wJXrDRAACgdVusfZ4k+uLN+eXs/cvp7oitP895UQogt6oxYZiiYsnMxMXpjPjqaC/QwEoGRX71+yd7aXs3asPd/NXAm7vbv5g7//P1OHxpvsj8bMep8sPULdMY32vcKNSr/3nTC+MvwEdhUhhkKTyPgAAAEJ0RVh0Y29tbWVudABGaWxlIHNvdXJjZTogaHR0cDovL3d3dy5zc2J3aWtpLmNvbS9GaWxlOktpcmJ5SGVhZFNTQkIucG5nSbA1rwAAACV0RVh0Y3JlYXRlLWRhdGUAMjAxMC0xMi0xNFQxNjozNDoxMCswMDowMDpPBjcAAAAldEVYdG1vZGlmeS1kYXRlADIwMTAtMTAtMDdUMjA6NTA6MzYrMDA6MDCjC6s7AAAAAElFTkSuQmCC", "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAC3ElEQVQ4jX2SX2xTdRzFP/d3f5d7u7ZbGes6LyAFWSiNmbMuSqb4wgxGVMiYT/BkNPMNfV1MDAFfNDHxwWSJU4wsMsKLEhI3gmE0JHO6FTBzMrZlS3V3Qun+sG70tvePD4ZlI8BJvi/fc/LN9+QceAIanm1oa2xo7HuSRn0c0dUq5fbd2teerLRHxqzuhzjDEs+0VYSrT4vHHbAW1ZrWg9aeYweurdv3vCsTL7Yy+GmHfcb3/Qn5T49MCYMW85Dz2Vphdl6jWPLJjmAOfSN/QsFY+ZdfNic5tuUFzLEfZjOLi1Xt5C7J44VJ6V/9Up546M0NFz/Xhp070l8789elf65DH3wvFYoACK2KNiMMz79Nx9ojEZOWP/Lx1NCv/7v8fTDK0fe34QF/ZsS5rkxhAUC4ZZJeGfQgovFNPu4+KtsAYsWad+rjM1TqHvcsqNmUY59pow/HqI07b62msEtqwijzku4inXmorqXllWpxybgb3f/akVLi7lAJ60KA+gMOTTcSWKc1rgZyi1f+8joB1PPDbn85W/GzYxOL1XgJaRDoTW9ID8ysnKyK24dSh/3auoSGUuGQFxb2UzlERL19Nu12AkiArkwhA6HDT29yLi+j1s3Oih/royUZjXihYg5W7txH5EGrhI17wMy6yWRUT47m7NHVHmypcirnl8SO6pBnNiWdr4q6+kZksxI3oiDCsLwE9/LARlguIm/lXbmuif3TTjG4Ejj724RbDuleezimbHv1dW/rrTQE62ByRLC8AJ4C2SkIIiauTbsD65rYlSlYp9LlTy5muBkx/WYZgMQ++HtcsGunR33S5+Y4NKcgHFQAeGSV09PsnZtRuu05uD8LZsDDXgDXhubd0DfAaM9l7/t1FtbC871Sbk5MbdX5oHwbOs+ovVPj9C7N0VhyUfv61Q/7x0qDqyk8CnURZcdkzufbC0p7bVn77otModRkGqdefs79qOj7xgPdf3d0KpBuuY7dAAAAAElFTkSuQmCC", "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABZ0RVh0Q3JlYXRpb24gVGltZQAwMS8wNy8wOCumXF8AAAAfdEVYdFNvZnR3YXJlAE1hY3JvbWVkaWEgRmlyZXdvcmtzIDi1aNJ4AAADHElEQVQ4EYXBe0wUBADH8R/CcSccQnfcIcbrXgRixKPSMIxklU4tJOUfyflIcmVJzamTVjJrJIRa6OZ4DmGMwSoEfKIVkcTC5qNRmqxpuki3VFiIjMc33fijka3PR/o3s7/R+Hl8QTgpxz2kHHWTuC8Cf7PxlCSr/ke0Ndrc5ioPJejONHxHjfiOGAkYNuNqDMX2WEC3pCf0H2LMScbLMcciiB0KJGbcwMy7RmYOG4kdMxA7EkBsRySB6X43JM3TJD6aoT3OvOlsPxVNX+807oyJ/rtiYFgMI271mdjdEcMjhQ8jl1eNpEDdV/PugrajpZu/ejndwafvpdB/1sHtS+EM/m4BBGNTuNCawPk2B6M3jNRXRvJSmpOG4je7Gj5Yekw7spLPXe8s42xdMfXvuzh3OIHerihADP1poeuQP0f2vMbX5fmcbnHS3eDg+6oCbp+ppWjV3Iu6Lzf10fzGotnUFVmp2pBGX3sS54+7KXsribq8V/nrl2aun66gfOOLnKx0cqLqKTalP14iyaQJ7uwsH/p7oli/OJV31q7i7bREmovfYPBSE83FG1m37BVWL17I1W8cbMn1RdIz+ofpCdHBtcvnhIxXf5zLjjLI23qQ4StNjF5rpSi/ltyd0FK9k8xk23hqQuhBSW49QGlOZjwdpZ8w2NsDV9vh8klGfvuJzuoytq6cjTTlM0l+msT0kMu6u/Bw3uBHza+zaJmFwsol7G3MoaRxHbtqMslcYWNb1Qr2dxYMRSSFV0iyaoItLjrizIUf6znRuZ/EjCie3+5iXomTZw+EMb82jNQSB8996CYxI5za5gKuXDvE00/O6pXk0T3BnoiQ75r2bSNnw3JU5sWc9iCy17j441cTQzcN5Kx3kdpqxesLsXTtCxwpzyc5ztEjyaUJBkmrJR0wxHtjrQjC+XMIK2/5kjPgg/uiHXuDBUOKN5JaJK2RFKhJkrItQTe7Z8SRNTUMc6QBebx+kMfrW98obxaZQ+mwz2KTLXhA0hI9gGuuv3/TZruNDL9grDKVS5qqe8wyFC00Wdlit7MgIOBLSYma8DfYI5E1lrjnEQAAAABJRU5ErkJggg==", @@ -1310,7 +1206,7 @@ function tests(suiteName, dbName, dbType, viewType) { "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAEG0lEQVQ4EQEQBO/7AQAAAAAAAAAAAAAAAAAAAACmm0ohDxD8bwT//ksOBPAhAAAAAPL8EN8IDQLB5eQEhVpltt8AAAAAAAAAAAAAAAABAAAAAAAAAACHf0UGKSgBgygY7m/w4O8F5t71ABMaCQAPEAQAAAAAAPwEBgAMFAn74/ISnunoA3RcZ7f2AAAAAAEAAAAAh39FBjo4AZYTAOtf1sLmAvb1+gAAAAAALzsVACEn+wAAAAAA/f4G/+LcAgH9AQIA+hAZpuDfBmhaZrb1AwAAAABtaCSGHAjraf///wD47/kB9vX7AAAAAAAYHgsAERT+AAAAAAACAf0BERT/AAQHB/746/IuBRIMFfL3G8ECpppKHigY7m/68vcCHRv0AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//0ADgvzAgP//gAWBe1hUEgMOgIKDfxr9Oz3BRsiAf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHCP///zu8gMjIftYAgkD/1ID//4ABwb6Af//AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBPwBAAAAAAP0710CDgTvIQD//QAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//QD8BAYADQv//gQAAAAAAAAAAAAAAgABAf4AAAAAAAAAAAAAAAAAAAAAAAABAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//gAAAAAABPL7D+D57Owh0MQAAAAAAAD08/sAAAAAAAAAAADj2fQA8ewGAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/r1AAwECwIEAggDugsNBGcAAAAAAwMBAO7o+AAAAAAAAAAAAAgKBAAOEAUAAAAAAAAAAAAAAAAAAAAAAAAAAADz8vwA/QwRowTr6gSLHSQQYvfr9QUhJ/sA6OEEAPPy+QAAAAAAFR0IACEn+wAAAAAAAAAAAAAAAAAAAAAA4+YP/g0OAgDT3wWoAlpltt/d7BKYBAwH/uTmDf4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPL1Df798fUC+AgSqMfL9sICAAAAAOblAHXzBRSo////APTz+wD//wAAAAAAAAAAAAAAAAAAAAEBAP3+Bv/j5g/+7uL3AukDH97g3wZomJzA9wMAAAAAs7jd/kE8J7n9BwoSJSgGMQYD/wL++/8ABAUCAPb1BQDw7AIA8e8DAQAFBf/0DBqj6OgGTlpmtvUAAAAAAQAAAAAAAAAAAAAAAFFRPg1SSAwbGxv8cQn67mMHBf7/AwL/APb5AwH/DRCn294GpMLH9sKdoMD3AAAAAAAAAABEawlCEphz4AAAAABJRU5ErkJggg==" ]; - var iconDigests = [ + const iconDigests = [ "md5-Mf8m9ehZnCXC717bPkqkCA==", "md5-fdEZBYtnvr+nozYVDzzxpA==", "md5-ImDARszfC+GA3Cv9TVW4HA==", @@ -1318,13 +1214,13 @@ function tests(suiteName, dbName, dbType, viewType) { "md5-jDUyV6ySnTVANn2qq3332g==" ]; - var iconLengths = [1047, 789, 967, 527, 1108]; + const iconLengths = [1047, 789, 967, 527, 1108]; it('#190 Query works with attachments=true', function () { - var db = new PouchDB(dbName); - var docs = []; - for (var i = 0; i < 5; i++) { + const db = new PouchDB(dbName); + const docs = []; + for (let i = 0; i < 5; i++) { docs.push({ _id: i.toString(), _attachments: { @@ -1346,8 +1242,8 @@ function tests(suiteName, dbName, dbType, viewType) { include_docs: true, attachments: true }).then(function (res) { - var attachments = res.rows.map(function (row) { - var doc = row.doc; + const attachments = res.rows.map(function (row) { + const doc = row.doc; delete doc._attachments['foo.png'].revpos; return doc._attachments; }); @@ -1362,8 +1258,8 @@ function tests(suiteName, dbName, dbType, viewType) { }), 'works with attachments=true'); return db.query(queryFun, {include_docs: true}); }).then(function (res) { - var attachments = res.rows.map(function (row) { - var doc = row.doc; + const attachments = res.rows.map(function (row) { + const doc = row.doc; delete doc._attachments['foo.png'].revpos; return doc._attachments['foo.png']; }); @@ -1390,14 +1286,14 @@ function tests(suiteName, dbName, dbType, viewType) { // Need to avoid the cache to workaround // https://issues.apache.org/jira/browse/COUCHDB-2880 - var db = new PouchDB(dbName, { + const db = new PouchDB(dbName, { fetch: function (url, opts) { opts.cache = 'no-store'; return PouchDB.fetch(url, opts); } }); - var docs = []; - for (var i = 0; i < 5; i++) { + const docs = []; + for (let i = 0; i < 5; i++) { docs.push({ _id: i.toString(), _attachments: { @@ -1421,9 +1317,9 @@ function tests(suiteName, dbName, dbType, viewType) { binary: true }).then(function (res) { res.rows.forEach(function (row) { - var doc = row.doc; + const doc = row.doc; Object.keys(doc._attachments).forEach(function (attName) { - var att = doc._attachments[attName]; + const att = doc._attachments[attName]; should.not.exist(att.stub); att.data.should.not.be.a('string'); }); @@ -1436,14 +1332,14 @@ function tests(suiteName, dbName, dbType, viewType) { // Need to avoid the cache to workaround // https://issues.apache.org/jira/browse/COUCHDB-2880 - var db = new PouchDB(dbName, { + const db = new PouchDB(dbName, { fetch: function (url, opts) { opts.cache = 'no-store'; return PouchDB.fetch(url, opts); } }); - var docs = []; - for (var i = 0; i < 5; i++) { + const docs = []; + for (let i = 0; i < 5; i++) { docs.push({ _id: i.toString() }); @@ -1461,7 +1357,7 @@ function tests(suiteName, dbName, dbType, viewType) { binary: true }).then(function (res) { res.rows.forEach(function (row) { - var doc = row.doc; + const doc = row.doc; should.not.exist(doc._attachments); }); }); @@ -1469,7 +1365,7 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('#242 conflicts at the root level', function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return db.bulkDocs([ { @@ -1517,7 +1413,7 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('#242 conflicts at the root+1 level', function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return db.bulkDocs([ { @@ -1572,22 +1468,22 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('Views should include _conflicts', function () { - var db2name = testUtils.adapterUrl(dbType, 'test2'); - var cleanup = function () { + const db2name = testUtils.adapterUrl(dbType, 'test2'); + const cleanup = function () { return new PouchDB(db2name).destroy(); }; - var doc1 = {_id: '1', foo: 'bar'}; - var doc2 = {_id: '1', foo: 'baz'}; - var db = new PouchDB(dbName); + const doc1 = {_id: '1', foo: 'bar'}; + const doc2 = {_id: '1', foo: 'baz'}; + const db = new PouchDB(dbName); return testUtils.fin(db.info().then(function () { - var remote = new PouchDB(db2name); + const remote = new PouchDB(db2name); return remote.info().then(function () { return createView(db, { map : function (doc) { emit(doc._id, !!doc._conflicts); } }).then(function (queryFun) { - var replicate = testUtils.promisify(db.replicate.from, db.replicate); + const replicate = testUtils.promisify(db.replicate.from, db.replicate); return db.post(doc1).then(function () { return remote.post(doc2); }).then(function () { @@ -1606,7 +1502,7 @@ function tests(suiteName, dbName, dbType, viewType) { }); it("Test view querying with limit option", function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map : function (doc) { if (doc.foo === 'bar') { @@ -1630,7 +1526,7 @@ function tests(suiteName, dbName, dbType, viewType) { }); it("Test view querying with custom reduce function", function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: function (doc) { emit(doc.foo); @@ -1638,12 +1534,12 @@ function tests(suiteName, dbName, dbType, viewType) { reduce: function (keys, values) { if (keys) { return keys.map(function (keyId) { - var key = keyId[0]; - // var id = keyId[1]; + const key = keyId[0]; + // const id = keyId[1]; return key.join(''); }); } else { - var result = []; + const result = []; values.map(function (value) { value.map(function (v) { result.push(v); @@ -1695,7 +1591,7 @@ function tests(suiteName, dbName, dbType, viewType) { }); it("Test view querying with group_level option and reduce", function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: function (doc) { emit(doc.foo); @@ -1737,7 +1633,7 @@ function tests(suiteName, dbName, dbType, viewType) { }); it("Test view querying with invalid group_level options", function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: function (doc) { emit(doc.foo); @@ -1760,7 +1656,7 @@ function tests(suiteName, dbName, dbType, viewType) { }); it("Test view querying with limit option and reduce", function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: function (doc) { emit(doc.foo); @@ -1790,7 +1686,7 @@ function tests(suiteName, dbName, dbType, viewType) { }); it("Test view querying with invalid limit option and reduce", function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: function (doc) { emit(doc.foo); @@ -1821,11 +1717,11 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('Test unsafe object usage (#244)', function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return db.bulkDocs([ {_id: 'constructor'} ]).then(function (res) { - var rev = res[0].rev; + let rev = res[0].rev; return createView(db, { map: function (doc) { emit(doc._id); @@ -1875,8 +1771,8 @@ function tests(suiteName, dbName, dbType, viewType) { }); it("Test view querying with a skip option and reduce", function () { - var qf; - var db = new PouchDB(dbName); + let qf; + const db = new PouchDB(dbName); return createView(db, { map: function (doc) { emit(doc.foo); @@ -1907,7 +1803,7 @@ function tests(suiteName, dbName, dbType, viewType) { }); it("Test view querying with invalid skip option and reduce", function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: function (doc) { emit(doc.foo); @@ -1939,7 +1835,7 @@ function tests(suiteName, dbName, dbType, viewType) { it("Special document member _doc_id_rev should never leak outside", function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: function (doc) { if (doc.foo === 'bar') { @@ -1960,10 +1856,10 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('multiple view creations and cleanups', function () { - var db = new PouchDB(dbName); - var map = function (doc) { emit(doc.num); }; + const db = new PouchDB(dbName); + const map = function (doc) { emit(doc.num); }; function createView(name) { - var storableViewObj = { map: map.toString() }; + const storableViewObj = { map: map.toString() }; return db.put({ _id: '_design/' + name, views: { @@ -1983,19 +1879,19 @@ function tests(suiteName, dbName, dbType, viewType) { }); }); } - var attempts = []; - var numAttempts = 10; - for (var i = 0; i < numAttempts; i++) { + const attempts = []; + const numAttempts = 10; + for (let i = 0; i < numAttempts; i++) { attempts.push(sequence('test' + i)); } return Promise.all(attempts).then(function () { - var keys = []; - for (var i = 0; i < numAttempts; i++) { + const keys = []; + for (let i = 0; i < numAttempts; i++) { keys.push('_design/test' + i); } return db.allDocs({keys, include_docs : true}); }).then(function (res) { - var docs = res.rows.map(function (row) { + const docs = res.rows.map(function (row) { row.doc._deleted = true; return row.doc; }); @@ -2013,7 +1909,7 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('If reduce function returns 0, resulting value should not be null', function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: function (doc) { emit(doc.foo); @@ -2035,7 +1931,7 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('Testing skip with a view', function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map : function (doc) { emit(doc.foo); @@ -2058,13 +1954,13 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('Map documents on 0/null/undefined/empty string', function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map : function (doc) { emit(doc.num); } }).then(function (mapFunction) { - var docs = [ + const docs = [ {_id: '0', num: 0}, {_id: '1', num: 1}, {_id: 'undef' /* num is undefined */}, @@ -2090,7 +1986,7 @@ function tests(suiteName, dbName, dbType, viewType) { data.rows.should.have.length(8); // everything // keys that should all resolve to null - var emptyKeys = [null, NaN, Infinity, -Infinity]; + const emptyKeys = [null, NaN, Infinity, -Infinity]; return Promise.all(emptyKeys.map(function (emptyKey) { return db.query(mapFunction, {key: emptyKey}).then(function (data) { data.rows.map(function (row) { @@ -2103,13 +1999,13 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('Testing query with keys', function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: function (doc) { emit(doc.field); } }).then(function (queryFun) { - var opts = {include_docs: true}; + const opts = {include_docs: true}; return db.bulkDocs({ docs: [ {_id: 'doc_0', field: 0}, @@ -2204,9 +2100,9 @@ function tests(suiteName, dbName, dbType, viewType) { function ids(row) { return row.id; } - var opts = {keys: [0, 1, 2]}; - var spec; - var db = new PouchDB(dbName); + const opts = {keys: [0, 1, 2]}; + let spec; + const db = new PouchDB(dbName); return createView(db, { map: function (doc) { emit(doc.field1); @@ -2240,7 +2136,7 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('Testing multiple emissions (issue #14)', function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map : function (doc) { emit(doc.foo); @@ -2256,7 +2152,7 @@ function tests(suiteName, dbName, dbType, viewType) { {_id: 'doc2', foo : 'foo', bar : 'bar'} ] }).then(function () { - var opts = {keys: ['foo', 'bar']}; + const opts = {keys: ['foo', 'bar']}; return db.query(mapFunction, opts); }); @@ -2296,7 +2192,7 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('Testing multiple emissions (complex keys)', function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: function () { emit(['a'], 1); @@ -2323,12 +2219,12 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('Testing empty startkeys and endkeys', function () { - var opts = {startkey: null, endkey: ''}; + let opts = {startkey: null, endkey: ''}; function ids(row) { return row.id; } - var spec; - var db = new PouchDB(dbName); + let spec; + const db = new PouchDB(dbName); return createView(db, { map : function (doc) { emit(doc.field); @@ -2369,7 +2265,7 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('#238 later non-winning revisions', function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: function (doc) { @@ -2410,7 +2306,7 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('#238 later non-winning deleted revisions', function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: function (doc) { @@ -2452,7 +2348,7 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('#238 query with conflicts', function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: function (doc) { @@ -2514,12 +2410,12 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('Testing ordering with startkey/endkey/key', function () { - var opts = {startkey: '1', endkey: '4'}; + let opts = {startkey: '1', endkey: '4'}; function ids(row) { return row.id; } - var spec; - var db = new PouchDB(dbName); + let spec; + const db = new PouchDB(dbName); return createView(db, { map : function (doc) { emit(doc.field, null); @@ -2564,13 +2460,13 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('opts.keys should work with complex keys', function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: function (doc) { emit(doc.foo, doc.foo); } }).then(function (mapFunction) { - var keys = [ + const keys = [ {key: 'missing'}, ['test', 1], {key1: 'value1'}, @@ -2586,7 +2482,7 @@ function tests(suiteName, dbName, dbType, viewType) { {foo: [0, false]} ] }).then(function () { - var opts = {keys}; + const opts = {keys}; return db.query(mapFunction, opts); }).then(function (data) { data.rows.should.have.length(3); @@ -2601,7 +2497,7 @@ function tests(suiteName, dbName, dbType, viewType) { function ids(row) { return row.id; } - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map : function (doc) { emit(doc.date, null); @@ -2627,7 +2523,7 @@ function tests(suiteName, dbName, dbType, viewType) { function change(row) { return [row.key, row.doc._id, row.doc.val]; } - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: function (doc) { if (doc.join) { @@ -2649,9 +2545,9 @@ function tests(suiteName, dbName, dbType, viewType) { }); }); - it('should query correctly with a variety of criteria', function () { - var db = new PouchDB(dbName); - var ddoc = { + it('should query correctly with a constiety of criteria', function () { + const db = new PouchDB(dbName); + const ddoc = { _id: '_design/test', views: { test: { @@ -2661,9 +2557,9 @@ function tests(suiteName, dbName, dbType, viewType) { } } }; - var mapFun = 'test'; + const mapFun = 'test'; return db.put(ddoc).then(function () { - var docs = [ + const docs = [ {_id : '0'}, {_id : '1'}, {_id : '2'}, @@ -2766,17 +2662,17 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('should query correctly with skip/limit and multiple keys/values', function () { - var db = new PouchDB(dbName); - var docs = { + const db = new PouchDB(dbName); + const docs = { docs: [ {_id: 'doc1', foo : 'foo', bar : 'bar'}, {_id: 'doc2', foo : 'foo', bar : 'bar'} ] }; - var getValues = function (res) { + const getValues = function (res) { return res.value; }; - var getIds = function (res) { + const getIds = function (res) { return res.id; }; @@ -2861,8 +2757,8 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('should query correctly with undefined key/values', function () { - var db = new PouchDB(dbName); - var docs = { + const db = new PouchDB(dbName); + const docs = { docs: [ {_id: 'doc1'}, {_id: 'doc2'} @@ -2894,7 +2790,7 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('should query correctly with no docs', function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map : function () { emit(); @@ -2909,7 +2805,7 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('should query correctly with no emits', function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map : function () { } @@ -2941,7 +2837,7 @@ function tests(suiteName, dbName, dbType, viewType) { function docIds(row) { return row.doc._id; } - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map : function (doc) { emit(doc.name); @@ -3038,8 +2934,8 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('should query correctly after replicating and other ddoc', function () { - var db = new PouchDB(dbName); - var db2 = new PouchDB(testUtils.adapterUrl(dbType, 'local-other')); + const db = new PouchDB(dbName); + const db2 = new PouchDB(testUtils.adapterUrl(dbType, 'local-other')); return createView(db, { map: function (doc) { emit(doc.name); @@ -3090,13 +2986,13 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('should query correctly after many edits', function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map : function (doc) { emit(doc.name, doc.likes); } }).then(function (queryFun) { - var docs = [ + const docs = [ { _id: '1', name: 'leonardo' }, { _id: '2', name: 'michelangelo' }, { _id: '3', name: 'donatello' }, @@ -3120,18 +3016,18 @@ function tests(suiteName, dbName, dbType, viewType) { { _id: 'l', name: 'ace duck' } ]; - for (var i = 0; i < 100; i++) { + for (let i = 0; i < 100; i++) { docs.push({ _id: 'z-' + (i + 1000), // for correct string ordering name: 'random foot soldier #' + i }); } - var byId = Object.fromEntries(docs.map((doc) => [doc._id, doc])); + const byId = Object.fromEntries(docs.map((doc) => [doc._id, doc])); function update(res, docFun) { - for (var i = 0; i < res.length; i++) { - var doc = byId[res[i].id]; + for (let i = 0; i < res.length; i++) { + const doc = byId[res[i].id]; doc._rev = res[i].rev; docFun(doc); } @@ -3179,15 +3075,15 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('should query correctly with staggered seqs', function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map : function (doc) { emit(doc.name); } }).then(function (queryFun) { - var docs = []; + const docs = []; - for (var i = 0; i < 200; i++) { + for (let i = 0; i < 200; i++) { docs.push({ _id: 'doc-' + (i + 1000), // for correct string ordering name: 'gen1' @@ -3212,7 +3108,7 @@ function tests(suiteName, dbName, dbType, viewType) { doc._rev = infos.find((info) => info.id === doc._id).rev; doc.name = 'gen-4-odd'; }); - var docsToUpdate = docs.filter(function (doc, i) { + const docsToUpdate = docs.filter(function (doc, i) { return i % 2 === 1; }); docsToUpdate.reverse(); @@ -3220,8 +3116,8 @@ function tests(suiteName, dbName, dbType, viewType) { }).then(function () { return db.query(queryFun); }).then(function (res) { - var expected = docs.map(function (doc, i) { - var key = i % 2 === 1 ? 'gen-4-odd' : 'gen-3'; + const expected = docs.map(function (doc, i) { + const key = i % 2 === 1 ? 'gen-4-odd' : 'gen-3'; return {key, id: doc._id, value: null}; }); expected.sort(function (a, b) { @@ -3236,9 +3132,9 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('should handle removes/undeletes/updates', function () { - var theDoc = {name : 'bar', _id : '1'}; + const theDoc = {name : 'bar', _id : '1'}; - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: function (doc) { emit(doc.name); @@ -3284,13 +3180,13 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('should return error when multi-key fetch & group=false', function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: function (doc) { emit(doc._id); }, reduce: '_sum' }).then(function (queryFun) { - var keys = ['1', '2']; - var opts = { + const keys = ['1', '2']; + let opts = { keys, group: false }; @@ -3314,8 +3210,8 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('should handle user errors in map functions', function () { - var db = new PouchDB(dbName); - var err; + const db = new PouchDB(dbName); + let err; db.on('error', function (e) { err = e; }); return createView(db, { map : function (doc) { @@ -3334,8 +3230,8 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('should handle user errors in reduce functions', function () { - var db = new PouchDB(dbName); - var err; + const db = new PouchDB(dbName); + let err; db.on('error', function (e) { err = e; }); return createView(db, { map : function (doc) { @@ -3360,8 +3256,8 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('should handle reduce returning undefined', function () { - var db = new PouchDB(dbName); - var err; + const db = new PouchDB(dbName); + let err; db.on('error', function (e) { err = e; }); return createView(db, { map : function (doc) { @@ -3383,7 +3279,7 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('should properly query custom reduce functions', function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map : function (doc) { emit(doc.name, doc.count); @@ -3391,15 +3287,15 @@ function tests(suiteName, dbName, dbType, viewType) { reduce : function (keys, values, rereduce) { // calculate the average count per name if (!rereduce) { - var result = { + const result = { sum : sum(values), count : values.length }; result.average = result.sum / result.count; return result; } else { - var thisSum = sum(values.map(function (value) {return value.sum; })); - var thisCount = sum(values.map(function (value) {return value.count; })); + const thisSum = sum(values.map(function (value) {return value.sum; })); + const thisCount = sum(values.map(function (value) {return value.count; })); return { sum : thisSum, count : thisCount, @@ -3558,9 +3454,9 @@ function tests(suiteName, dbName, dbType, viewType) { it('should handle many doc changes', function () { - var docs = [{_id: '0'}, {_id : '1'}, {_id: '2'}]; + let docs = [{_id: '0'}, {_id : '1'}, {_id: '2'}]; - var keySets = [ + const keySets = [ [1], [2, 3], [4], @@ -3574,7 +3470,7 @@ function tests(suiteName, dbName, dbType, viewType) { [9, 3, 2, 1] ]; - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map : function (doc) { doc.keys.forEach(function (key) { @@ -3583,9 +3479,9 @@ function tests(suiteName, dbName, dbType, viewType) { } }).then(function (mapFun) { return db.bulkDocs({docs}).then(function () { - var tasks = keySets.map(function (keys, i) { + const tasks = keySets.map(function (keys, i) { return function () { - var expectedResponseKeys = []; + const expectedResponseKeys = []; return db.allDocs({ keys : ['0', '1', '2'], include_docs: true @@ -3602,16 +3498,16 @@ function tests(suiteName, dbName, dbType, viewType) { }).then(function () { return db.query(mapFun); }).then(function (res) { - var actualKeys = res.rows.map(function (x) { + const actualKeys = res.rows.map(function (x) { return x.key; }); actualKeys.should.deep.equal(expectedResponseKeys); }); }; }); - var chain = tasks.shift()(); + const chain = tasks.shift()(); function getNext() { - var task = tasks.shift(); + const task = tasks.shift(); return task && function () { return task().then(getNext()); }; @@ -3623,9 +3519,9 @@ function tests(suiteName, dbName, dbType, viewType) { it('should handle many doc changes', function () { - var docs = [{_id: '0'}, {_id : '1'}, {_id: '2'}]; + let docs = [{_id: '0'}, {_id : '1'}, {_id: '2'}]; - var keySets = [ + const keySets = [ [1], [2, 3], [4], @@ -3639,7 +3535,7 @@ function tests(suiteName, dbName, dbType, viewType) { [9, 3, 2, 1] ]; - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map : function (doc) { doc.keys.forEach(function (key) { @@ -3648,9 +3544,9 @@ function tests(suiteName, dbName, dbType, viewType) { } }).then(function (mapFun) { return db.bulkDocs({docs}).then(function () { - var tasks = keySets.map(function (keys, i) { + const tasks = keySets.map(function (keys, i) { return function () { - var expectedResponseKeys = []; + const expectedResponseKeys = []; return db.allDocs({ keys : ['0', '1', '2'], include_docs: true @@ -3669,7 +3565,7 @@ function tests(suiteName, dbName, dbType, viewType) { }).then(function () { return db.query(mapFun); }).then(function (res) { - var actualKeys = res.rows.map(function (x) { + const actualKeys = res.rows.map(function (x) { return x.key; }); actualKeys.should.deep.equal(expectedResponseKeys); @@ -3677,7 +3573,7 @@ function tests(suiteName, dbName, dbType, viewType) { }; }); function getNext() { - var task = tasks.shift(); + const task = tasks.shift(); if (task) { return task().then(getNext); } @@ -3688,12 +3584,12 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('should work with post', function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: function (doc) { emit(doc._id); } }).then(async function (mapFun) { return db.bulkDocs({docs: [{_id : 'bazbazbazb'}]}).then(function () { - var keys = ['bazbazbazb']; + const keys = ['bazbazbazb']; return db.query(mapFun, {keys}).then(function (resp) { resp.total_rows.should.equal(1); resp.rows.should.have.length(1); @@ -3706,7 +3602,7 @@ function tests(suiteName, dbName, dbType, viewType) { }); it("should accept trailing ';' in a map definition (#178)", function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: "function(doc){};\n" }).then(function (queryFun) { @@ -3719,7 +3615,7 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('should throw a 404 when no funcs found in ddoc (#181)', function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return db.put({ _id: '_design/test' }).then(function () { @@ -3733,8 +3629,8 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('should continue indexing when map eval fails (#214)', function () { - var db = new PouchDB(dbName); - var err; + const db = new PouchDB(dbName); + let err; db.on('error', function (e) { err = e; }); @@ -3772,7 +3668,7 @@ function tests(suiteName, dbName, dbType, viewType) { it('should continue indexing when map eval fails, ' + 'even without a listener (#214)', function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: function (doc) { emit(doc.foo.bar, doc); @@ -3803,9 +3699,9 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('should update the emitted value', function () { - var db = new PouchDB(dbName); - var docs = []; - for (var i = 0; i < 300; i++) { + const db = new PouchDB(dbName); + const docs = []; + for (let i = 0; i < 300; i++) { docs.push({ _id: i.toString(), name: 'foo', @@ -3817,12 +3713,12 @@ function tests(suiteName, dbName, dbType, viewType) { map: "function(doc){emit(doc.name, doc.count);};\n" }).then(function (queryFun) { return db.bulkDocs({docs}).then(function (res) { - for (var i = 0; i < res.length; i++) { + for (let i = 0; i < res.length; i++) { docs[i]._rev = res[i].rev; } return db.query(queryFun); }).then(function (res) { - var values = res.rows.map(function (x) { return x.value; }); + const values = res.rows.map(function (x) { return x.value; }); values.should.have.length(docs.length); values[0].should.equal(1); docs.forEach(function (doc) { @@ -3832,7 +3728,7 @@ function tests(suiteName, dbName, dbType, viewType) { }).then(function () { return db.query(queryFun); }).then(function (res) { - var values = res.rows.map(function (x) { return x.value; }); + const values = res.rows.map(function (x) { return x.value; }); values.should.have.length(docs.length); values[0].should.equal(2); }); @@ -3840,9 +3736,9 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('#6230 Test db.query() opts update_seq: false', function () { - var db = new PouchDB(dbName); - var docs = []; - for (var i = 0; i < 4; i++) { + const db = new PouchDB(dbName); + const docs = []; + for (let i = 0; i < 4; i++) { docs.push({ _id: i.toString(), name: 'foo', @@ -3863,9 +3759,9 @@ function tests(suiteName, dbName, dbType, viewType) { it('#6230 Test db.query() opts update_seq: true', function () { - var db = new PouchDB(dbName); - var docs = []; - for (var i = 0; i < 4; i++) { + const db = new PouchDB(dbName); + const docs = []; + for (let i = 0; i < 4; i++) { docs.push({ _id: i.toString(), name: 'foo', @@ -3888,7 +3784,7 @@ function tests(suiteName, dbName, dbType, viewType) { return false; } }); - var normSeq = normalizeSeq(result.update_seq); + const normSeq = normalizeSeq(result.update_seq); normSeq.should.be.a('number'); }); @@ -3905,9 +3801,9 @@ function tests(suiteName, dbName, dbType, viewType) { }); it('#6230 Test db.query() opts with update_seq missing', function () { - var db = new PouchDB(dbName); - var docs = []; - for (var i = 0; i < 4; i++) { + const db = new PouchDB(dbName); + const docs = []; + for (let i = 0; i < 4; i++) { docs.push({ _id: i.toString(), name: 'foo', @@ -3926,13 +3822,13 @@ function tests(suiteName, dbName, dbType, viewType) { }); it("#8370 keys queries should support skip and limit", function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map: function (doc) { emit(doc.field); } }).then(function (queryFun) { - var opts = {include_docs: true}; + const opts = {include_docs: true}; return db.bulkDocs({ docs: [ { _id: "doc_0", field: 0 }, @@ -3966,3 +3862,11 @@ function tests(suiteName, dbName, dbType, viewType) { }); }); } + +const mapToRows = (res) => { + return res.rows.map((x) => ({ + id: x.id, + key: x.key, + value: x.value + })); +}; diff --git a/tests/mapreduce/test.persisted.js b/tests/mapreduce/test.persisted.js index 6fa37690ff..3077c2ca9a 100644 --- a/tests/mapreduce/test.persisted.js +++ b/tests/mapreduce/test.persisted.js @@ -1,8 +1,8 @@ 'use strict'; describe('test.persisted.js', function () { - var dbType = testUtils.adapterType(); - var dbName = testUtils.adapterUrl(dbType, 'testdb'); + const dbType = testUtils.adapterType(); + const dbName = testUtils.adapterUrl(dbType, 'testdb'); function setTimeoutPromise(time) { return new Promise(function (resolve) { @@ -11,7 +11,7 @@ describe('test.persisted.js', function () { } function createView(db, viewObj) { - var storableViewObj = { + const storableViewObj = { map : viewObj.map.toString() }; if (viewObj.reduce) { @@ -38,8 +38,8 @@ describe('test.persisted.js', function () { }); it('Test destroyed event on auxiliary db', function () { - var db = new PouchDB(dbName); - var rev; + const db = new PouchDB(dbName); + let rev; return db.put({ _id: '_design/name', views: { @@ -82,7 +82,7 @@ describe('test.persisted.js', function () { }).then(function () { return db.viewCleanup(); }).then(function () { - var views = ['name', 'title']; + const views = ['name', 'title']; return Promise.all(views.map(function (view) { return db.query(view).then(function () { throw new Error('expected an error'); @@ -116,14 +116,14 @@ describe('test.persisted.js', function () { }); it('Returns ok for viewCleanup on empty db', function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return db.viewCleanup().then(function (res) { res.ok.should.equal(true); }); }); it('Returns ok for viewCleanup on empty db, callback style', function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return new Promise(function (resolve, reject) { db.viewCleanup(function (err, res) { if (err) { @@ -137,8 +137,8 @@ describe('test.persisted.js', function () { }); it('Returns ok for viewCleanup after modifying view', function () { - var db = new PouchDB(dbName); - var ddoc = { + const db = new PouchDB(dbName); + const ddoc = { _id: '_design/myview', views: { myview: { @@ -148,7 +148,7 @@ describe('test.persisted.js', function () { } } }; - var doc = { + const doc = { _id: 'foo', firstName: 'Foobar', lastName: 'Bazman' @@ -175,8 +175,8 @@ describe('test.persisted.js', function () { }); it('Return ok for viewCleanup after modding view, old format', function () { - var db = new PouchDB(dbName); - var ddoc = { + const db = new PouchDB(dbName); + const ddoc = { _id: '_design/myddoc', views: { myview: { @@ -186,7 +186,7 @@ describe('test.persisted.js', function () { } } }; - var doc = { + const doc = { _id: 'foo', firstName: 'Foobar', lastName: 'Bazman' @@ -213,8 +213,8 @@ describe('test.persisted.js', function () { }); it("Query non existing view throws error", function () { - var db = new PouchDB(dbName); - var doc = { + const db = new PouchDB(dbName); + const doc = { _id: '_design/barbar', views: { scores: { @@ -228,8 +228,8 @@ describe('test.persisted.js', function () { }); it("Query non-string view throws error", function () { - var db = new PouchDB(dbName); - var doc = { + const db = new PouchDB(dbName); + const doc = { _id: '_design/barbar', views: { scores: { @@ -244,21 +244,21 @@ describe('test.persisted.js', function () { it('many simultaneous persisted views', function () { this.timeout(120000); - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); - var views = []; - var doc = {_id: 'foo'}; - for (var i = 0; i < 20; i++) { + const views = []; + const doc = {_id: 'foo'}; + for (let i = 0; i < 20; i++) { views.push('foo_' + i); doc['foo_' + i] = 'bar_' + i; } return db.put(doc).then(function () { return Promise.all(views.map(function (_, i) { - var fun = "function (doc) { emit(doc.foo_" + i + ");}"; + const fun = "function (doc) { emit(doc.foo_" + i + ");}"; - var ddocId = 'theViewDoc_' + i; - var ddoc = { + const ddocId = 'theViewDoc_' + i; + const ddoc = { _id: '_design/' + ddocId, views: { theView : {map: fun} @@ -287,7 +287,7 @@ describe('test.persisted.js', function () { }); it('should error with a callback', function (done) { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); db.query('fake/thing', function (err) { should.exist(err); done(); @@ -295,7 +295,7 @@ describe('test.persisted.js', function () { }); it('should query correctly when stale', function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map : function (doc) { emit(doc.name); @@ -358,14 +358,14 @@ describe('test.persisted.js', function () { }); it('should query correctly with stale update_after', function () { - var pouch = new PouchDB(dbName); + const pouch = new PouchDB(dbName); return createView(pouch, {map: function (doc) { emit(doc.foo); }}).then(function (queryFun) { - var docs = []; + const docs = []; - for (var i = 0; i < 10; i++) { + for (let i = 0; i < 10; i++) { docs.push({foo: 'bar'}); } @@ -383,8 +383,8 @@ describe('test.persisted.js', function () { }); it('should delete duplicate indexes', function () { - var docs = []; - for (var i = 0; i < 10; i++) { + const docs = []; + for (let i = 0; i < 10; i++) { docs.push( { _id : '_design/view' + i, @@ -396,10 +396,10 @@ describe('test.persisted.js', function () { } ); } - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return db.bulkDocs({docs}).then(function (responses) { - var tasks = []; - for (var i = 0; i < docs.length; i++) { + const tasks = []; + for (let i = 0; i < docs.length; i++) { docs[i]._rev = responses[i].rev; tasks.push(db.query('view' + i + '/view')); } @@ -418,11 +418,11 @@ describe('test.persisted.js', function () { // can't test this in Node due to the vm (typeof process === 'undefined' || process.browser)) { it('issue 4967 map() called twice', function () { - var db = new PouchDB(dbName); - var globalObj = (typeof process !== 'undefined' && !process.browser) ? + const db = new PouchDB(dbName); + const globalObj = (typeof process !== 'undefined' && !process.browser) ? global : window; globalObj.__mapreduce_called = {}; - var docs = Array.apply(null, Array(5)).map(function (_, i) { + const docs = Array.apply(null, Array(5)).map(function (_, i) { return { _id: 'doc_' + i, data: Math.random().toString(36).slice(2) @@ -459,9 +459,9 @@ describe('test.persisted.js', function () { } it('test docs with reserved IDs', function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); - var docs = [ + const docs = [ {_id: 'constructor'}, {_id: 'isPrototypeOf'}, {_id: 'hasOwnProperty'}, @@ -477,7 +477,7 @@ describe('test.persisted.js', function () { return db.bulkDocs(docs).then(function () { return db.query('view/view', {include_docs: true}); }).then(function (res) { - var rows = res.rows.map(function (row) { + const rows = res.rows.map(function (row) { return { id: row.id, key: row.key, @@ -511,7 +511,7 @@ describe('test.persisted.js', function () { }); it('should handle user errors in design doc names', function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return db.put({ _id : '_design/theViewDoc' }).then(function () { @@ -540,7 +540,7 @@ describe('test.persisted.js', function () { function getKey(row) { return row.key; } - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return db.put({ _id : '_design/foo', views : { @@ -611,8 +611,8 @@ describe('test.persisted.js', function () { }); it('should allow view names without slashes', function () { - var ddocRev; - var db = new PouchDB(dbName); + let ddocRev; + const db = new PouchDB(dbName); return db.put({ _id : '_design/foo', views : { @@ -631,7 +631,7 @@ describe('test.persisted.js', function () { }); it('test 304s in Safari (issue 69)', function () { - var db = new PouchDB(dbName); + const db = new PouchDB(dbName); return createView(db, { map : function (doc) { emit(doc.name); @@ -653,16 +653,16 @@ describe('test.persisted.js', function () { }); }); - var isNode = typeof window === 'undefined'; + const isNode = typeof window === 'undefined'; if (dbType === 'local' && isNode) { it('#239 test memdown db', function () { - var destroyedDBs = []; + const destroyedDBs = []; PouchDB.on('destroyed', function (db) { destroyedDBs.push(db); }); // make sure prefixed DBs are tied to regular DBs - var db = new PouchDB(dbName, {db: require('memdown')}); + const db = new PouchDB(dbName, {db: require('memdown')}); return testUtils.fin(createView(db, { map: function (doc) { emit(doc.name); @@ -673,7 +673,7 @@ describe('test.persisted.js', function () { }).then(function (res) { res.rows.should.have.length(1); res.rows[0].key.should.equal('foo'); - var ddocId = '_design/' + queryFun.split('/')[0]; + const ddocId = '_design/' + queryFun.split('/')[0]; return db.get(ddocId); }).then(function (ddoc) { return db.remove(ddoc); @@ -682,13 +682,13 @@ describe('test.persisted.js', function () { }); }), function () { return db.destroy().then(function () { - var chain = Promise.resolve(); + let chain = Promise.resolve(); // for each of the supposedly destroyed DBs, // check that there isn't a normal DB hanging around destroyedDBs.forEach(function (dbName) { chain = chain.then(function () { - var db = new PouchDB(dbName); - var promise = db.info().then(function (info) { + const db = new PouchDB(dbName); + const promise = db.info().then(function (info) { info.update_seq.should.equal(0); }); return testUtils.fin(promise, function () { @@ -704,14 +704,14 @@ describe('test.persisted.js', function () { }); it('#239 test prefixed db', function () { - var destroyedDBs = []; + const destroyedDBs = []; PouchDB.on('destroyed', function (db) { destroyedDBs.push(db); }); // make sure prefixed DBs are tied to regular DBs require('fs').mkdirSync('./myprefix_./tmp/', { recursive:true }); // TODO: bit hacky - var db = new PouchDB(dbName, {prefix: './myprefix_'}); + const db = new PouchDB(dbName, {prefix: './myprefix_'}); return testUtils.fin(createView(db, { map: function (doc) { emit(doc.name); @@ -722,7 +722,7 @@ describe('test.persisted.js', function () { }).then(function (res) { res.rows.should.have.length(1); res.rows[0].key.should.equal('foo'); - var ddocId = '_design/' + queryFun.split('/')[0]; + const ddocId = '_design/' + queryFun.split('/')[0]; return db.get(ddocId); }).then(function (ddoc) { return db.remove(ddoc); @@ -731,13 +731,13 @@ describe('test.persisted.js', function () { }); }), function () { return db.destroy().then(function () { - var chain = Promise.resolve(); + let chain = Promise.resolve(); // for each of the supposedly destroyed DBs, // check that there isn't a normal DB hanging around destroyedDBs.forEach(function (dbName) { chain = chain.then(function () { - var db = new PouchDB(dbName); - var promise = db.info().then(function (info) { + const db = new PouchDB(dbName); + const promise = db.info().then(function (info) { info.update_seq.should.equal(0); }); return testUtils.fin(promise, function () { diff --git a/tests/mapreduce/test.views.js b/tests/mapreduce/test.views.js index 24858bd571..a5b34544d0 100644 --- a/tests/mapreduce/test.views.js +++ b/tests/mapreduce/test.views.js @@ -1,10 +1,10 @@ 'use strict'; describe('test.views.js', function () { - var dbType = testUtils.adapterType(); + const dbType = testUtils.adapterType(); if (dbType === 'http') { return; } - var dbs = {}; + const dbs = {}; beforeEach(function (done) { dbs.name = testUtils.adapterUrl(dbType, 'testdb'); @@ -18,7 +18,7 @@ describe('test.views.js', function () { it('Test basic view', function (done) { - var db = new PouchDB(dbs.name); + const db = new PouchDB(dbs.name); db.bulkDocs({ docs: [ { foo: 'bar' }, @@ -28,7 +28,7 @@ describe('test.views.js', function () { } ] }, {}, function () { - var queryFun = { + const queryFun = { map: function (doc) { emit(doc.foo, doc); } @@ -55,7 +55,7 @@ describe('test.views.js', function () { }); it('Test passing just a function', function (done) { - var db = new PouchDB(dbs.name); + const db = new PouchDB(dbs.name); db.bulkDocs({ docs: [ { foo: 'bar' }, @@ -65,7 +65,7 @@ describe('test.views.js', function () { } ] }, {}, function () { - var queryFun = function (doc) { + const queryFun = function (doc) { emit(doc.foo, doc); }; db.get('volatile', function (_, doc) { @@ -89,7 +89,7 @@ describe('test.views.js', function () { }); it('Test opts.startkey/opts.endkey', function (done) { - var db = new PouchDB(dbs.name); + const db = new PouchDB(dbs.name); db.bulkDocs({ docs: [ { key: 'key1' }, @@ -99,7 +99,7 @@ describe('test.views.js', function () { { key: 'key5' } ] }, {}, function () { - var queryFun = { + const queryFun = { map: function (doc) { emit(doc.key, doc); } @@ -135,7 +135,7 @@ describe('test.views.js', function () { }); it('Test opts.key', function (done) { - var db = new PouchDB(dbs.name); + const db = new PouchDB(dbs.name); db.bulkDocs({ docs: [ { key: 'key1' }, @@ -144,7 +144,7 @@ describe('test.views.js', function () { { key: 'key3' } ] }, {}, function () { - var queryFun = { + const queryFun = { map: function (doc) { emit(doc.key, doc); } @@ -166,7 +166,7 @@ describe('test.views.js', function () { }); it.skip('Test basic view collation', function (done) { - var values = []; + const values = []; // special values sort before all other types values.push(null); values.push(false); @@ -227,15 +227,15 @@ describe('test.views.js', function () { b: 2, c: 2 }); - var db = new PouchDB(dbs.name); - var docs = values.map(function (x, i) { + const db = new PouchDB(dbs.name); + const docs = values.map(function (x, i) { return { _id: i.toString(), foo: x }; }); db.bulkDocs({ docs }, {}, function (err) { - var queryFun = { + const queryFun = { map: function (doc) { emit(doc.foo, null); } @@ -269,7 +269,7 @@ describe('test.views.js', function () { }); it('Test joins', function (done) { - var db = new PouchDB(dbs.name); + const db = new PouchDB(dbs.name); db.bulkDocs({ docs: [ { @@ -279,7 +279,7 @@ describe('test.views.js', function () { { doc_id: 'mydoc' } ] }, {}, function () { - var queryFun = { + const queryFun = { map: function (doc) { if (doc.doc_id) { emit(doc._id, { _id: doc.doc_id }); @@ -298,9 +298,9 @@ describe('test.views.js', function () { }); it('No reduce function', function (done) { - var db = new PouchDB(dbs.name); + const db = new PouchDB(dbs.name); db.post({ foo: 'bar' }, function () { - var queryFun = { + const queryFun = { map: function () { emit('key', 'val'); } @@ -312,7 +312,7 @@ describe('test.views.js', function () { }); it('Built in _sum reduce function', function (done) { - var db = new PouchDB(dbs.name); + const db = new PouchDB(dbs.name); db.bulkDocs({ docs: [ { val: 'bar' }, @@ -320,7 +320,7 @@ describe('test.views.js', function () { { val: 'baz' } ] }, null, function () { - var queryFun = { + const queryFun = { map: function (doc) { emit(doc.val, 1); }, @@ -339,7 +339,7 @@ describe('test.views.js', function () { }); it('Built in _count reduce function', function (done) { - var db = new PouchDB(dbs.name); + const db = new PouchDB(dbs.name); db.bulkDocs({ docs: [ { val: 'bar' }, @@ -347,7 +347,7 @@ describe('test.views.js', function () { { val: 'baz' } ] }, null, function () { - var queryFun = { + const queryFun = { map: function (doc) { emit(doc.val, doc.val); }, @@ -366,7 +366,7 @@ describe('test.views.js', function () { }); it('Built in _stats reduce function', function (done) { - var db = new PouchDB(dbs.name); + const db = new PouchDB(dbs.name); db.bulkDocs({ docs: [ { val: 'bar' }, @@ -374,7 +374,7 @@ describe('test.views.js', function () { { val: 'baz' } ] }, null, function () { - var queryFun = { + const queryFun = { map: function (doc) { emit(doc.val, 1); }, @@ -384,7 +384,7 @@ describe('test.views.js', function () { reduce: true, group_level: 999 }, function (err, res) { - var stats = res.rows[0].value; + const stats = res.rows[0].value; stats.sum.should.equal(2); stats.count.should.equal(2); stats.min.should.equal(1); @@ -396,9 +396,9 @@ describe('test.views.js', function () { }); it('No reduce function, passing just a function', function (done) { - var db = new PouchDB(dbs.name); + const db = new PouchDB(dbs.name); db.post({ foo: 'bar' }, function () { - var queryFun = function () { + const queryFun = function () { emit('key', 'val'); }; db.query(queryFun, function () { @@ -408,19 +408,19 @@ describe('test.views.js', function () { }); it('Views should include _conflicts', function (done) { - var doc1 = { + const doc1 = { _id: '1', foo: 'bar' }; - var doc2 = { + const doc2 = { _id: '1', foo: 'baz' }; - var queryFun = function (doc) { + const queryFun = function (doc) { emit(doc._id, !!doc._conflicts); }; - var db = new PouchDB(dbs.name); - var remote = new PouchDB(dbs.remote); + const db = new PouchDB(dbs.name); + const remote = new PouchDB(dbs.remote); db.post(doc1, function () { remote.post(doc2, function () { db.replicate.from(remote, function () { @@ -437,7 +437,7 @@ describe('test.views.js', function () { }); it('Map only documents with _conflicts (#1000)', function (done) { - var docs1 = [ + const docs1 = [ { _id: '1', foo: 'bar' @@ -447,25 +447,25 @@ describe('test.views.js', function () { name: 'two' } ]; - var doc2 = { + const doc2 = { _id: '1', foo: 'baz' }; - var queryFun = function (doc) { + const queryFun = function (doc) { if (doc._conflicts) { emit(doc._id, doc._conflicts); } }; - var db = new PouchDB(dbs.name); - var remote = new PouchDB(dbs.remote); + const db = new PouchDB(dbs.name); + const remote = new PouchDB(dbs.remote); db.bulkDocs({ docs: docs1 }, function (err, res) { - var revId1 = res[0].rev; + const revId1 = res[0].rev; remote.post(doc2, function (err, res) { - var revId2 = res.rev; + const revId2 = res.rev; db.replicate.from(remote, function () { db.get(docs1[0]._id, { conflicts: true }, function (err, res) { - var winner = res._rev; - var looser = winner === revId1 ? revId2 : revId1; + const winner = res._rev; + const looser = winner === revId1 ? revId2 : revId1; should.exist(res._conflicts); db.query(queryFun, function (err, res) { res.rows.should.have.length(1, 'One doc with conflicts'); @@ -482,7 +482,7 @@ describe('test.views.js', function () { }); it('Test view querying with limit option', function (done) { - var db = new PouchDB(dbs.name); + const db = new PouchDB(dbs.name); db.bulkDocs({ docs: [ { foo: 'bar' }, @@ -503,8 +503,8 @@ describe('test.views.js', function () { }); it('Query non existing view returns error', function (done) { - var db = new PouchDB(dbs.name); - var doc = { + const db = new PouchDB(dbs.name); + const doc = { _id: '_design/barbar', views: { scores: @@ -525,7 +525,7 @@ describe('test.views.js', function () { }); it('Special document member _doc_id_rev', function (done) { - var db = new PouchDB(dbs.name); + const db = new PouchDB(dbs.name); db.bulkDocs({ docs: [{ foo: 'bar' }] }, null, function () { db.query(function (doc) { if (doc.foo === 'bar') { @@ -539,7 +539,7 @@ describe('test.views.js', function () { }); it('If reduce function returns 0', function (done) { - var db = new PouchDB(dbs.name); + const db = new PouchDB(dbs.name); db.bulkDocs({ docs: [{ foo: 'bar' }] }, null, function () { db.query({ map: function (doc) { @@ -556,7 +556,7 @@ describe('test.views.js', function () { }); it('Testing skip with a view', function (done) { - var db = new PouchDB(dbs.name); + const db = new PouchDB(dbs.name); db.bulkDocs({ docs: [ { foo: 'bar' }, @@ -575,7 +575,7 @@ describe('test.views.js', function () { }); it('Testing skip with allDocs', function (done) { - var db = new PouchDB(dbs.name); + const db = new PouchDB(dbs.name); db.bulkDocs({ docs: [ { foo: 'bar' }, @@ -592,8 +592,8 @@ describe('test.views.js', function () { }); it('Destroy view when db created with {name: foo}', function () { - var db = new PouchDB({name: dbs.name}); - var doc = { + const db = new PouchDB({name: dbs.name}); + const doc = { _id: '_design/index', views: { index: @@ -608,8 +608,8 @@ describe('test.views.js', function () { }); it('Map documents on 0/null/undefined/empty string', function (done) { - var db = new PouchDB(dbs.name); - var docs = [ + const db = new PouchDB(dbs.name); + const docs = [ { _id: 'doc0', num: 0 @@ -629,7 +629,7 @@ describe('test.views.js', function () { } ]; db.bulkDocs({ docs }, function () { - var mapFunction = function (doc) { + const mapFunction = function (doc) { emit(doc.num, null); }; db.query(mapFunction, { @@ -665,10 +665,10 @@ describe('test.views.js', function () { }); }); if (typeof window === 'undefined' && !process.browser) { - var fs = require('fs'); + const fs = require('fs'); it.skip("destroy using prototype", function () { - var db = new PouchDB(dbs.name + 1); - var doc = { + const db = new PouchDB(dbs.name + 1); + const doc = { _id: '_design/barbar', views: { scores: { diff --git a/tests/unit/test.mapreduce.js b/tests/unit/test.mapreduce.js index 5eab4f1a15..8d8533691c 100644 --- a/tests/unit/test.mapreduce.js +++ b/tests/unit/test.mapreduce.js @@ -6,63 +6,51 @@ var upsert = PouchDB.utils.upsert; var utils = PouchDB.utils.mapReduceUtils; describe('test.mapreduce.js-upsert', function () { - it('should throw an error if the doc errors', function () { - return upsert({ - get: function () { - return Promise.reject(new Error('a fake error!')); - } - }, 'foo') - .then(function () { + it('should throw an error if the doc errors', async function () { + try { + await upsert({ + get: () => Promise.reject(new Error('a fake error!')), + }, 'foo'); + should.fail("Expected promise to be rejected"); - }) - .catch(function (err) { + } catch (err) { err.message.should.equal("a fake error!"); - }); + } }); - it('should fulfill if the diff returns false', function () { - return upsert({ - get: function () { - return Promise.resolve({ _rev: 'xyz' }); - } - }, 'foo', function () { - return false; - }).then(function (res) { - res.updated.should.equal(false); - res.rev.should.equal('xyz'); - }); + + it('should fulfill if the diff returns false', async function () { + const res = await upsert({ + get: () => Promise.resolve({ _rev: 'xyz' }), + }, 'foo', () => false + ); + + res.updated.should.equal(false); + res.rev.should.equal('xyz'); }); - it('should put if get throws 404', function () { - return upsert({ - get: function () { - return Promise.reject({ status: 404 }); - }, - put: function () { - return Promise.resolve({ rev: 'abc' }); - } - }, 'foo', function () { - return { difference: "something" }; - }).then(function (res) { - res.updated.should.equal(true); - res.rev.should.equal('abc'); - }); + + it('should put if get throws 404', async function () { + const res = await upsert({ + get: () => Promise.reject({ status: 404 }), + put: () => Promise.resolve({ rev: 'abc' }), + }, 'foo', () => ({ difference: "something" }) + ); + + res.updated.should.equal(true); + res.rev.should.equal('abc'); }); - it('should error if it can\'t put', function () { - return upsert({ - get: function () { - return Promise.resolve({ _rev: 'xyz' }); - }, - put: function () { - return Promise.reject(new Error('falala')); - } - }, 'foo', function () { - return { difference: "something" }; - }) - .then(function () { + + it('should error if it can\'t put', async function () { + try { + await upsert({ + get: () => Promise.resolve({ _rev: 'xyz' }), + put: () => Promise.reject(new Error('falala')), + }, 'foo', () => ({ difference: "something" }) + ); + should.fail("Expected promise to be rejected"); - }) - .catch(function (err) { + } catch (err) { err.message.should.equal("falala"); - }); + } }); });