blob: 0c9f6896be4e944a13062087d6528bf3abca41b0 [file] [log] [blame]
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
import FauxtonAPI from "../../core/api";
import Helpers from "../../helpers";
import { get, post } from "../../core/ajax";
import Databases from "../databases/resources";
import Documents from "../documents/resources";
const Verifyinstall = FauxtonAPI.addon();
const db = new Databases.Model({
id: 'verifytestdb',
name: 'verifytestdb'
});
const dbReplicate = new Databases.Model({
id: 'verifytestdb_replicate',
name: 'verifytestdb_replicate'
});
let doc, viewDoc;
Verifyinstall.testProcess = {
saveDoc: function () {
doc = new Documents.Doc({_id: 'test_doc_1', a: 1}, {
database: db
});
return doc.save();
},
destroyDoc: function () {
return doc.destroy();
},
updateDoc: function () {
doc.set({b: 'hello'});
return doc.save();
},
saveDB: function () {
return db.save();
},
setupDB: function (db) {
const promise = new FauxtonAPI.Promise((resolve, reject) => {
db.fetch().then(() => {
return db.destroy();
}, () => {
resolve();
}).then(() => {
resolve();
}, (xhr, error, reason) => {
reject(new Error(reason));
});
});
return promise;
},
setup: function () {
return FauxtonAPI.Promise.all([
this.setupDB(db),
this.setupDB(dbReplicate)
]);
},
testView: function () {
let resolve, reject;
const promise = new FauxtonAPI.Promise(function(res, rej) {
resolve = res;
reject = rej;
});
const getPromise = get(viewDoc.url() + '/_view/testview').then(res => {
if (res.error) {
throw new Error(res.reason || res.error);
}
return res;
});
getPromise.then(function (resp) {
resp = _.isString(resp) ? JSON.parse(resp) : resp;
const row = resp.rows[0];
if (row.value === 6) {
resolve();
}
reject(new Error('Values expect 6, got ' + row.value));
}, reject);
return promise;
},
setupView: function () {
const doc1 = new Documents.Doc({_id: 'test_doc_10', a: 1}, { database: db });
const doc2 = new Documents.Doc({_id: 'test_doc_20', a: 2}, { database: db });
const doc3 = new Documents.Doc({_id: 'test_doc_30', a: 3}, { database: db });
viewDoc = new Documents.Doc({
_id: '_design/view_check',
views: {
'testview': {
map: 'function (doc) { emit(doc._id, doc.a); }',
reduce: '_sum'
}
}
}, {
database: db
});
return FauxtonAPI.Promise.all([doc1.save(), doc2.save(), doc3.save(), viewDoc.save()]);
},
setupReplicate: function () {
const body = {
create_target: true,
source: 'verifytestdb',
target: 'verifytestdb_replicate'
};
return post(
Helpers.getServerUrl('/_replicate'),
body
).then(res => {
if (res.error) {
throw new Error(res.reason || res.error);
}
return res;
});
},
testReplicate: function () {
const promise = new FauxtonAPI.Promise((resolve, reject) => {
dbReplicate.fetch().then(() => {
const docCount = dbReplicate.get('doc_count');
if (docCount === 4) {
resolve();
return;
}
const reason = 'Replication Failed, expected 4 docs got ' + docCount;
reject(new Error(reason));
}, reject);
});
return promise;
},
removeDBs: function () {
dbReplicate.destroy();
db.destroy();
}
};
export default Verifyinstall;