Skip to content

Commit

Permalink
working tests!
Browse files Browse the repository at this point in the history
  • Loading branch information
JerrySievert committed Nov 29, 2013
1 parent d357e10 commit 23c9971
Show file tree
Hide file tree
Showing 6 changed files with 118 additions and 2 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node_modules
2 changes: 2 additions & 0 deletions .npmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
node_modules
data
10 changes: 9 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,15 @@ The easy way to install is to use `node.js`.

$ psql yourdb <sql/*.sql

## Importing the data
## Running Tests

Mongolike includes a test suite and a test runner.

$ test/test_runner.js -d yourdb

Additional tests can be added to `test/tests.sql`.

## Importing the Data

I have included a modest amount of data for testing and benchmarking, both for Postgres and for MongoDB (1,706,873 rows).

Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@
},
"dependencies": {
"pg": "~2.8.3",
"optimist": "~0.6.0"
"optimist": "~0.6.0",
"ansi-color": "~0.2.1"
},
"preferGlobal": "true",
"bin": {
Expand Down
Empty file removed test/import.sh
Empty file.
104 changes: 104 additions & 0 deletions test/test_runner.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
#!/usr/bin/env node

var argv = require('optimist')
.usage('Usage: $0')
.demand('d')
.alias('d', 'database')
.describe('d', 'Database to be installed in')
.default('h', 'localhost')
.alias('h', 'host')
.describe('h', 'Database host')
.default('p', '5432')
.alias('p', 'port')
.describe('u', 'User')
.default('u', 'postgres')
.alias('u', 'user')
.describe('spec', 'Use the Spec reporter')
.default('spec', false)
.argv,
pg = require('pg'),
color = require("ansi-color").set,
fs = require('fs');

var tests = fs.readFileSync(__dirname + '/tests.sql', 'utf8');

var conString = "postgres://" + argv.u + ":" + argv.p + "@" + argv.h + "/" + argv.d;

// verify connectivity
var client = new pg.Client(conString);
client.connect(function (err) {
if (err) {
console.error('could not connect to postgres', err.toString());
return;
}

runTests(client);
});

function loadTests (client) {
client.query(tests, function (err) {
if (err) {
console.error('could not load tests', err.toString());

client.end();
return;
}

runTests(client);
});
}
function runTests (client) {
client.query("SELECT mongolike_tests()", function (err, results) {
client.end();

if (err) {
console.error('test error', err.toString());

return;
}

if (results && results.rows.length) {
var data = results.rows[0];
var keys = Object.keys(data);

for (var i = 0; i < keys.length; i++) {
if (argv.spec) {
specReporter(keys[i], data[keys[i]]);
} else {
dotReporter(keys[i], data[keys[i]]);
}
}
} else {
console.log("No tests");
}
});
}

// spec reporter for detailed reporting
function specReporter (name, results) {
console.log("\n" + name + ":\n");

for (var i = 0; i < results.length; i++) {
if (results[i].status === 'pass') {
console.log(" ✓ " + color(results[i].message, "green"));
} else {
console.log(" ✗ " + color(results[i].message, "yellow"));
console.log(" » " + color("expected " + results[i].expected + ",", "yellow"));
console.log(" " + color("got " + results[i].actual + "(" + results[i].operator + ")", "yellow"));
}
}
}

// simple dot reporter
function dotReporter (name, results) {
var out = "";
for (var i = 0; i < results.length; i++) {
if (results[i].status === 'pass') {
out += color(".", "green");
} else {
out += color("✗", "red");
}
}

console.log(out);
}

0 comments on commit 23c9971

Please sign in to comment.