blob: b7f94691b950dcfaf8a526d0ad561f08650322b3 [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.
define([
'app',
'api',
'addons/databases/resources',
'addons/documents/resources'
],
function (app, FauxtonAPI, Databases, Documents) {
var Verifyinstall = FauxtonAPI.addon();
var db = new Databases.Model({
id: 'verifytestdb',
name: 'verifytestdb'
});
var dbReplicate = new Databases.Model({
id: 'verifytestdb_replicate',
name: 'verifytestdb_replicate'
});
var 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) {
var deferred = FauxtonAPI.Deferred();
db.fetch()
.then(function () {
return db.destroy();
}, function (xhr) {
deferred.resolve();
})
.then(function () {
deferred.resolve();
}, function (xhr, error, reason) {
if (reason === 'Unauthorized') {
deferred.reject(xhr, error, reason);
}
});
return deferred;
},
setup: function () {
return FauxtonAPI.when([
this.setupDB(db),
this.setupDB(dbReplicate)
]);
},
testView: function () {
var deferred = FauxtonAPI.Deferred();
var promise = $.get(viewDoc.url() + '/_view/testview');
promise.then(function (resp) {
resp = _.isString(resp) ? JSON.parse(resp) : resp;
var row = resp.rows[0];
if (row.value === 6) {
return deferred.resolve();
}
var reason = {
reason: 'Values expect 6, got ' + row.value
};
deferred.reject({responseText: JSON.stringify(reason)});
}, deferred.reject);
return deferred;
},
setupView: function () {
var doc1 = new Documents.Doc({_id: 'test_doc_10', a: 1}, { database: db });
var doc2 = new Documents.Doc({_id: 'test_doc_20', a: 2}, { database: db });
var 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.when([doc1.save(), doc2.save(), doc3.save(), viewDoc.save()]);
},
setupReplicate: function () {
return $.ajax({
url: app.host + '/_replicate',
contentType: 'application/json',
type: 'POST',
dataType: 'json',
processData: false,
data: JSON.stringify({
create_target: true,
source: 'verifytestdb',
target: 'verifytestdb_replicate'
})
});
},
testReplicate: function () {
var deferred = FauxtonAPI.Deferred();
var promise = dbReplicate.fetch();
promise.then(function () {
var docCount = dbReplicate.get('doc_count');
if ( docCount === 4) {
deferred.resolve();
return;
}
var reason = {
reason: 'Replication Failed, expected 4 docs got ' + docCount
};
deferred.reject({responseText: JSON.stringify(reason)});
}, deferred.reject);
return deferred;
},
removeDBs: function () {
dbReplicate.destroy();
db.destroy();
}
};
return Verifyinstall;
});