app/addons/verifyinstall/resources.js (127 lines of code) (raw):

// 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;