UNPKG

rethinkdbdash

Version:

A Node.js driver for RethinkDB with promises and a connection pool

483 lines (435 loc) 10.3 kB
var config = require(__dirname+'/config.js'); var r = require(__dirname+'/../lib')(config); var util = require(__dirname+'/util/common.js'); var assert = require('assert'); var uuid = util.uuid; var It = util.It; var dbName, tableName, result; It('`do` should work', function* (done) { try { var result = yield r.expr({a: 1}).do( function(doc) { return doc("a") }).run(); assert.equal(result, 1); done(); } catch(e) { done(e); } }) It('`r.do` should work', function* (done) { try { result = yield r.do(1, 2, function(a, b) { return a }).run(); assert.equal(result, 1); result = yield r.do(1, 2, function(a, b) { return b }).run(); assert.equal(result, 2); result = yield r.do(3).run(); assert.equal(result, 3); result = yield r.expr(4).do().run(); assert.equal(result, 4); result = yield r.do(1, 2).run() assert.deepEqual(result, 2); result = yield r.do(r.args([ r.expr(3), r.expr(4) ])).run() assert.deepEqual(result, 3); done(); } catch(e) { console.log(e) done(e); } }) It('`branch` should work', function* (done) { try { var result = yield r.branch(true, 1, 2).run(); assert.equal(result, 1); result = yield r.branch(false, 1, 2).run(); assert.equal(result, 2); result = yield r.expr(false).branch('foo', false, 'bar', 'lol').run() assert.equal(result, 'lol'); result = yield r.expr(true).branch('foo', false, 'bar', 'lol').run() assert.equal(result, 'foo'); result = yield r.expr(false).branch('foo', true, 'bar', 'lol').run() assert.equal(result, 'bar'); done(); } catch(e) { done(e); } }) It('`branch` should throw if no argument has been given', function* (done) { try{ var result = yield r.branch().run(); } catch(e) { if (e.message.match(/^`r.branch` takes at least 3 arguments, 0 provided/)) { done() } else { done(e); } } }) It('`branch` should throw if just one argument has been given', function* (done) { try{ var result = yield r.branch(true).run(); } catch(e) { if (e.message.match(/^`r.branch` takes at least 3 arguments, 1 provided/)) { done() } else { done(e); } } }) It('`branch` should throw if just two arguments have been given', function* (done) { try{ var result = yield r.branch(true, true).run(); } catch(e) { if (e.message.match(/^`r.branch` takes at least 3 arguments, 2 provided/)) { done() } else { done(e); } } }) It('`branch` is defined after a term', function* (done) { try { result = yield r.expr(true).branch(2, 3).run(); assert.equal(result, 2); result = yield r.expr(false).branch(2, 3).run(); assert.equal(result, 3); done(); } catch(e) { done(e); } }) It('`forEach` should work', function* (done) { try{ var dbName = uuid(); var tableName = uuid(); result = yield r.dbCreate(dbName).run(); assert.equal(result.dbs_created, 1) result = yield r.db(dbName).tableCreate(tableName).run(); assert.equal(result.tables_created, 1) result = yield r.expr([{foo: "bar"}, {foo: "foo"}]).forEach(function(doc) { return r.db(dbName).table(tableName).insert(doc) }).run(); assert.equal(result.inserted, 2); done(); } catch(e) { done(e); } }) It('`forEach` should throw if not given a function', function* (done) { try{ result = yield r.expr([{foo: "bar"}, {foo: "foo"}]).forEach().run(); } catch(e) { if (e.message.match(/^`forEach` takes 1 argument, 0 provided after/)) { done(); } else { done(e); } } }) It('`r.range(x)` should work', function* (done) { try { var result = yield r.range(10).run(); assert.deepEqual(result, [0,1,2,3,4,5,6,7,8,9]); done(); } catch(e) { console.log(e); done(e); } }) It('`r.range(x, y)` should work', function* (done) { try { var result = yield r.range(3,10).run(); assert.deepEqual(result, [3,4,5,6,7,8,9]); done(); } catch(e) { console.log(e); done(e); } }) It('`r.range(1,2,3)` should throw - arity', function* (done) { try { var result = yield r.range(1,2,3).run() done(new Error("Was expecting an error")); } catch(e) { if (e.message.match(/^`r.range` takes at most 2 arguments, 3 provided/) !== null) { done(); } else { done(e); } } }) It('`r.range()` should throw - arity', function* (done) { try { var result = yield r.range().run() done(new Error("Was expecting an error")); } catch(e) { if (e.message.match(/^`r.range` takes at least 1 argument, 0 provided/) !== null) { done(); } else { done(e); } } }) It('`default` should work', function* (done) { try { var result = yield r.expr({a:1})("b").default("Hello").run(); assert.equal(result, "Hello"); done(); } catch(e) { done(e); } }) It('`default` should throw if no argument has been given', function* (done) { try{ var result = yield r.expr({})("").default().run(); } catch(e) { if (e.message.match(/^`default` takes 1 argument, 0 provided after/)) { done() } else { done(e); } } }) It('`r.js` should work', function* (done) { try { var result = yield r.js("1").run(); assert.equal(result, 1); done(); } catch(e) { done(e); } }) It('`js` is not defined after a term', function* (done) { try { result = yield r.expr(1).js("foo").run(); } catch(e) { if (e.message === "`js` is not defined after:\nr.expr(1)") { done() } else { done(e) } } }) It('`js` should throw if no argument has been given', function* (done) { try{ var result = yield r.js().run(); } catch(e) { if (e.message.match(/^`r.js` takes at least 1 argument, 0 provided/)) { done() } else { done(e); } } }) It('`coerceTo` should work', function* (done) { try { var result = yield r.expr(1).coerceTo("STRING").run(); assert.equal(result, "1"); done(); } catch(e) { done(e); } }) It('`coerceTo` should throw if no argument has been given', function* (done) { try{ var result = yield r.expr(1).coerceTo().run(); } catch(e) { if (e.message.match(/^`coerceTo` takes 1 argument, 0 provided/)) { done() } else { done(e); } } }) It('`typeOf` should work', function* (done) { try { var result = yield r.expr(1).typeOf().run(); assert.equal(result, "NUMBER"); done(); } catch(e) { done(e); } }) It('`r.typeOf` should work', function* (done) { try { var result = yield r.typeOf(1).run(); assert.equal(result, "NUMBER"); done(); } catch(e) { done(e); } }) It('`json` should work', function* (done) { try { var result = yield r.json(JSON.stringify({a:1})).run(); assert.deepEqual(result, {a:1}); result = yield r.json("{}").run(); assert.deepEqual(result, {}) done(); } catch(e) { done(e); } }) It('`json` should throw if no argument has been given', function* (done) { try{ var result = yield r.json().run(); } catch(e) { if (e.message === "`r.json` takes 1 argument, 0 provided.") { done() } else { done(e); } } }) It('`json` is not defined after a term', function* (done) { try { result = yield r.expr(1).json("1").run(); } catch(e) { if (e.message.match(/^`json` is not defined after/)) { done() } else { done(e) } } }) It('`toJSON` and `toJsonString` should work', function* (done) { try { var result = yield r.expr({a:1}).toJSON().run(); assert.equal(result, '{"a":1}'); var result = yield r.expr({a:1}).toJsonString().run(); assert.equal(result, '{"a":1}'); done(); } catch(e) { done(e); } }) It('`toJSON` should throw if an argument is provided', function* (done) { try { var result = yield r.expr({a:1}).toJSON('foo').run(); done(new Error("Expecting error...")); } catch(e) { if (e.message.match(/^`toJSON` takes 0 argument, 1 provided/) !== null) { done() } else { done(e) } } }) It('`args` should work', function* (done) { try { var result = yield r.args([10, 20, 30]).run(); assert.deepEqual(result, [10, 20, 30]); result = yield r.expr({foo: 1, bar: 2, buzz: 3}).pluck(r.args(["foo", "buzz"])).run() assert.deepEqual(result, {foo: 1, buzz: 3}); done(); } catch(e) { console.log(e) done(e) } }) It('`args` should throw if an implicit var is passed inside', function* (done) { try { var cursor = yield r.table("foo").eqJoin(r.args([r.row, r.table("bar")])).run(); done(); } catch(e) { if (e.message === 'Implicit variable `r.row` cannot be used inside `r.args`.') { done(); } else { done(e); } } }) It('`http` should work', function* (done) { try { var result = yield r.http('http://google.com').run(); assert.equal(typeof result, 'string'); done(); } catch(e) { done(e) } }) It('`http` should work with options', function* (done) { try { var result = yield r.http('http://google.com', {timeout: 60}).run(); assert.equal(typeof result, 'string'); done(); } catch(e) { done(e) } }) It('`http` should throw with an unrecognized option', function* (done) { try { var result = yield r.http('http://google.com', {foo: 60}).run(); done(new Error("Expecting error...")); } catch(e) { if (e.message === "Unrecognized option `foo` in `http`. Available options are attempts <number>, redirects <number>, verify <boolean>, resultFormat: <string>, method: <string>, auth: <object>, params: <object>, header: <string>, data: <string>, page: <string/function>, pageLimit: <number>.") { done() } else { done(e) } } }) It('`r.uuid` should work', function* (done) { try { var result = yield r.uuid().run(); assert.equal(typeof result, 'string'); done(); } catch(e) { done(e) } }) It('`r.uuid("foo")` should work', function* (done) { try { var result = yield r.uuid("rethinkdbdash").run(); assert.equal(result, '291a8039-bc4b-5472-9b2a-f133254e3283'); done(); } catch(e) { done(e) } })