Skip to content
This repository was archived by the owner on Nov 20, 2023. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
language: node_js
node_js:
- "0.11"
- "0.10"
10 changes: 7 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@
"licenses": [],
"repository": "https://github.com/cjwoodward/rel",
"dependencies": {
"coffee-script": "^1.7.1",
"date-utils": "0.1.8",
"coffee-script": "^1.8.0",
"date-utils": "^1.2.16",
"underscore": "1.1.6"
},
"engines": {
Expand All @@ -53,7 +53,11 @@
"directories": {
"lib": "lib"
},
"scripts": {
"test": "mocha"
},
"devDependencies": {
"vows": "git+https://github.com/snoble/vows.git#1e8fa11fdb2f67eac285cbcbcf6485eec131fa02"
"chai": "^1.9.2",
"mocha": "^2.0.1"
}
}
32 changes: 32 additions & 0 deletions test/delete-manager-test.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
assert = require('chai').assert

Table = require '../lib/table'
DeleteManager = require '../lib/delete-manager'
SqlLiteral = require('../lib/nodes/sql-literal')
Nodes = require '../lib/nodes/nodes'

describe 'Delete manager', ->
describe 'from', ->
it 'uses from', ->
table = new Table 'users'
dm = new DeleteManager()
dm.from table
assert.equal dm.toSql(), 'DELETE FROM "users"'

it 'chains', ->
table = new Table 'users'
dm = new DeleteManager()
assert.equal dm.from(table).constructor, DeleteManager

describe 'where', ->
it 'uses where values', ->
table = new Table 'users'
dm = new DeleteManager()
dm.from table
dm.where table.column('id').eq(10)
assert.equal dm.toSql(), 'DELETE FROM "users" WHERE "users"."id" = 10'

it 'chains', ->
table = new Table 'users'
dm = new DeleteManager()
assert.equal dm.where(table.column('id').eq(10)).constructor, DeleteManager
55 changes: 20 additions & 35 deletions vows/test-insert-manager.coffee → test/insert-manager-test.coffee
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
vows = require 'vows'
assert = require 'assert'
require 'date-utils'
assert = require('chai').assert

SelectManager = require '../lib/select-manager'
InsertManager = require '../lib/insert-manager'
Expand All @@ -9,38 +7,35 @@ SqlLiteral = require('../lib/nodes/sql-literal')
Rel = require('../rel')
Nodes = require '../lib/nodes/nodes'

tests = vows.describe('Inserting stuff').addBatch
'An insert manager':
'new': ->
assert.isNotNull new InsertManager()

'can create a Values node': ->
describe 'Inserting stuff', ->
describe 'An insert manager', ->
it 'can create a Values node', ->
table = new Table 'users'
manager = new InsertManager()
values = manager.createValues ['a', 'b'], ['c', 'd']

assert.equal values.left.length, ['a', 'b'].length
assert.equal values.right.length, ['c', 'd'].length

'allows sql literals': ->
it 'allows sql literals', ->
table = new Table 'users'
manager = new InsertManager()
manager.values(manager.createValues [Rel.star()], ['a'])
assert.equal manager.toSql(), 'INSERT INTO NULL VALUES (*)'

'inserts false': ->
it 'inserts false', ->
table = new Table 'users'
manager = new InsertManager()
manager.insert [[table.column('bool'), false]]
assert.equal manager.toSql(), 'INSERT INTO "users" ("bool") VALUES (false)'

'inserts null': ->
it 'inserts null', ->
table = new Table 'users'
manager = new InsertManager()
manager.insert [[table.column('id'), null]]
assert.equal manager.toSql(), 'INSERT INTO "users" ("id") VALUES (NULL)'

'inserts time': ->
it 'inserts time', ->
table = new Table 'users'
manager = new InsertManager()

Expand All @@ -50,50 +45,50 @@ tests = vows.describe('Inserting stuff').addBatch
manager.insert [[attribute, time]]
assert.equal manager.toSql(), "INSERT INTO \"users\" (\"created_at\") VALUES ('#{time.toISOString()}')"

'takes a list of lists': ->
it 'takes a list of lists', ->
table = new Table 'users'
manager = new InsertManager()
manager.into table
manager.insert [[table.column('id'), 1], [table.column('name'), 'carl']]
assert.equal manager.toSql(), 'INSERT INTO "users" ("id", "name") VALUES (1, \'carl\')'

'defaults the table': ->
it 'defaults the table', ->
table = new Table 'users'
manager = new InsertManager()
manager.insert [[table.column('id'), 1], [table.column('name'), 'carl']]
assert.equal manager.toSql(), 'INSERT INTO "users" ("id", "name") VALUES (1, \'carl\')'

'it takes an empty list': ->
it 'it takes an empty list', ->
manager = new InsertManager()
manager.insert []
assert.isNull manager.ast.values
assert.strictEqual manager.ast.values, null

'into':
'converts to sql': ->
describe 'into', ->
it 'converts to sql', ->
table = new Table 'users'
manager = new InsertManager()
manager.into table
assert.equal manager.toSql(), 'INSERT INTO "users"'

'columns':
'converts to sql': ->
describe 'columns', ->
it 'converts to sql', ->
table = new Table 'users'
manager = new InsertManager()
manager.into table
manager.columns().push table.column('id')
assert.equal manager.toSql(), 'INSERT INTO "users" ("id")'

'values':
'converts to sql': ->
describe 'values', ->
it 'converts to sql', ->
table = new Table 'users'
manager = new InsertManager()
manager.into table

manager.values(new Nodes.Values([1]))
assert.equal manager.toSql(), 'INSERT INTO "users" VALUES (1)'

'combo':
'puts shit together': ->
describe 'combo', ->
it 'puts shit together', ->
table = new Table 'users'
manager = new InsertManager()
manager.into table
Expand All @@ -103,13 +98,3 @@ tests = vows.describe('Inserting stuff').addBatch
manager.columns().push table.column('name')

assert.equal manager.toSql(), 'INSERT INTO "users" ("id", "name") VALUES (1, \'carl\')'









tests.export module
16 changes: 5 additions & 11 deletions vows/test-integration.coffee → test/integration-test.coffee
Original file line number Diff line number Diff line change
@@ -1,22 +1,16 @@
# NOTE this test runs when run on its own but not if run together in the rest of the suite.
vows = require 'vows'
assert = require 'assert'
assert = require('chai').assert

u = require 'underscore'
Rel = require '../rel'

tests = vows.describe('Integrating rel').addBatch
'it should perform a users find': ->
describe 'Integrating rel', ->
it 'should perform a users find', ->
users = new Rel.Table 'users'
assert.equal users.where(users.column('name').eq('amy')).toSql(), 'SELECT FROM "users" WHERE "users"."name" = \'amy\''

'it should run through the first example on the readme': ->
it 'should run through the first example on the readme', ->
users = new Rel.Table 'users'
assert.equal users.project(Rel.star()).toSql(), 'SELECT * FROM "users"'

'testing the or example': ->
it 'testing the or example', ->
users = new Rel.Table 'users'
users.where(users.column('name').eq('bob').or(users.column('age').lt(25)))

tests.export module

1 change: 1 addition & 0 deletions test/mocha.opts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
--compilers coffee:coffee-script/register test/*-test.coffee
11 changes: 11 additions & 0 deletions test/select-func-test.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
Rel = require '../rel'
assert = require('chai').assert

describe 'A sum function', ->
beforeEach ->
@sum = Rel.func('sum')

it 'works', ->
user = new Rel.Table 'user'
q = user.where(@sum(@sum(user.column('age')).eq(1)))
assert.equal q.toSql(), 'SELECT FROM "user" WHERE sum(sum("user"."age") = 1)'
Loading