@ictu/testx-keywords-postgres
Version:
Keywords to test postgres db with testx
83 lines (74 loc) • 2.52 kB
JavaScript
// Generated by CoffeeScript 1.12.7
(function() {
var _, assertFailedMsg, dbclient, isObjectEqual, parseConn, printable;
dbclient = require('./postgres');
parseConn = require('pg-connection-string').parse;
_ = require('lodash');
printable = function(obj, delimiter) {
var k, v;
if (delimiter == null) {
delimiter = ', ';
}
return ((function() {
var results;
results = [];
for (k in obj) {
v = obj[k];
results.push(k + ": " + v);
}
return results;
})()).join(delimiter);
};
assertFailedMsg = function(msg, ctx) {
return msg + " in " + (printable(_.pick(ctx._meta, 'file', 'sheet', 'Row')));
};
isObjectEqual = function(result, expected, failMsg) {
var key, results;
if (typeof expected !== 'object') {
return expect(result).toBe(expected, failMsg);
} else {
if (Array.isArray(expected)) {
return _.zip(result, expected).map((function(_this) {
return function(x) {
return isObjectEqual(x[0], x[1], failMsg);
};
})(this));
} else {
results = [];
for (key in expected) {
results.push(isObjectEqual(result[key], expected[key], failMsg));
}
return results;
}
}
};
module.exports = {
'execute sql': function(args, context) {
var flow;
if (args.sql) {
flow = protractor.promise.controlFlow();
return flow.execute(function() {
var connectionString, dbPromise;
connectionString = parseConn(args['connection string'] || browser.params.postgresConnectionString);
dbPromise = dbclient.executeQuery(connectionString, args.sql);
return dbPromise.then(function(result) {
var expected, failMsg, save;
if (expected = args['expected result']) {
failMsg = assertFailedMsg("Expected the following records: " + (JSON.stringify(expected)) + " but found: " + (JSON.stringify(result)), context);
isObjectEqual(result, expected, failMsg);
}
if (save = args['save result to']) {
return context[save] = result;
}
})["catch"](function(err) {
var failMsg;
failMsg = assertFailedMsg(err, context);
throw new Error(failMsg);
});
});
} else {
throw new Error('Cannot use the "execute sql" keyword without providing "sql" parameter.');
}
}
};
}).call(this);