blob: d3868f0ddc2244a22330d1cce6d3d1d756a4acbe [file]
'use strict';
const MIME_OCTET = 'application/octet-stream';
function randomBrowserBlob(size) {
var buff = new ArrayBuffer(size);
var arr = new Uint8Array(buff);
for (var i = 0; i < size; i++) {
arr[i] = Math.floor(65535 * Math.random());
}
return new Blob([buff], {type: MIME_OCTET});
}
function randomBuffer(size) {
var buff = Buffer.alloc(size);
for (var i = 0; i < size; i++) {
buff.write(
String.fromCharCode(Math.floor(65535 * Math.random())),
i, 1, 'binary');
}
return buff;
}
function randomBlob(size) {
if (process.browser) {
return randomBrowserBlob(size);
} else { // node
return randomBuffer(size);
}
}
module.exports = function (PouchDB, callback) {
var utils = require('./utils');
var testCases = [
{
name: 'basic-attachments',
assertions: 1,
iterations: 1000,
setup: function (db, _, callback) {
var blob = randomBlob(50000);
db._blob = blob;
callback();
},
test: function (db, itr, doc, done) {
db.putAttachment(Math.random().toString(), 'foo.txt', db._blob,
MIME_OCTET).then(function () {
done();
}, done);
}
},
{
name: 'many-attachments-base64',
assertions: 1,
iterations: 100,
setup: function (db, _, callback) {
const doc = {
_id: 'doc1',
_attachments: {},
};
for (let i=0; i<100; ++i) {
doc._attachments['att-' + i] = {
content_type: MIME_OCTET,
data: randomBlob(50000),
};
}
db.put(doc).then(() => callback()).catch(callback);
},
test: function (db, itr, doc, done) {
db.get('doc1', {attachments: true}).then(() => done()).catch(done);
}
},
{
name: 'many-attachments-binary',
assertions: 1,
iterations: 100,
setup: function (db, _, callback) {
const doc = {
_id: 'doc1',
_attachments: {},
};
for (let i=0; i<100; ++i) {
doc._attachments['att-' + i] = {
content_type: MIME_OCTET,
data: randomBlob(50000),
};
}
db.put(doc).then(() => callback()).catch(callback);
},
test: function (db, itr, doc, done) {
db.get('doc1', {attachments: true, binary: true}).then(() => done()).catch(done);
}
},
];
utils.runTests(PouchDB, 'attachments', testCases, callback);
};