Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
public
/
sequelize
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
不要怂,就是干,撸起袖子干!
Commit ed4aa9fe
authored
Nov 15, 2013
by
Sascha Depold
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
moved tests into the right scope
1 parent
5a8a6800
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
871 additions
and
869 deletions
test/dao-factory.test.js
test/dao-factory.test.js
View file @
ed4aa9f
...
...
@@ -1514,648 +1514,587 @@ describe(Support.getTestDialectTeaser("DAOFactory"), function () {
})
})
describe
(
'special where conditions/smartWhere object'
,
function
()
{
beforeEach
(
function
(
done
)
{
var
self
=
this
describe
(
'find'
,
function
()
{
it
(
'supports transactions'
,
function
(
done
)
{
Support
.
prepareTransactionTest
(
dialect
,
this
.
sequelize
,
function
(
sequelize
)
{
var
User
=
sequelize
.
define
(
'User'
,
{
username
:
Sequelize
.
STRING
})
this
.
User
.
bulkCreate
([
{
username
:
'boo'
,
intVal
:
5
,
theDate
:
'2013-01-01 12:00'
},
{
username
:
'boo2'
,
intVal
:
10
,
theDate
:
'2013-01-10 12:00'
}
]).
success
(
function
(
user2
)
{
User
.
sync
({
force
:
true
}).
success
(
function
()
{
sequelize
.
transaction
(
function
(
t
)
{
User
.
create
({
username
:
'foo'
},
{
transaction
:
t
}).
success
(
function
()
{
User
.
find
({
username
:
'foo'
}).
success
(
function
(
user1
)
{
User
.
find
({
username
:
'foo'
},
{
transaction
:
t
}).
success
(
function
(
user2
)
{
expect
(
user1
).
to
.
be
.
null
expect
(
user2
).
to
.
not
.
be
.
null
t
.
rollback
().
success
(
function
()
{
done
()
})
})
it
(
'should be able to find rows where attribute is in a list of values'
,
function
(
done
)
{
this
.
User
.
findAll
({
where
:
{
username
:
[
'boo'
,
'boo2'
]
}
}).
success
(
function
(
users
){
expect
(
users
).
to
.
have
.
length
(
2
);
done
()
});
})
})
})
})
})
})
it
(
'should not break when trying to find rows using an array of primary keys'
,
function
(
done
)
{
this
.
User
.
findAll
({
where
:
{
id
:
[
1
,
2
,
3
]
describe
(
'general / basic function'
,
function
()
{
beforeEach
(
function
(
done
)
{
var
self
=
this
this
.
User
.
create
({
username
:
'barfooz'
}).
success
(
function
(
user
)
{
self
.
UserPrimary
=
self
.
sequelize
.
define
(
'UserPrimary'
,
{
specialkey
:
{
type
:
DataTypes
.
STRING
,
primaryKey
:
true
}
}).
success
(
function
(
users
){
done
();
});
})
it
(
'should be able to find a row using like'
,
function
(
done
)
{
this
.
User
.
findAll
({
where
:
{
username
:
{
like
:
'%2'
}
}
}).
success
(
function
(
users
)
{
expect
(
users
).
to
.
be
.
an
.
instanceof
(
Array
)
expect
(
users
).
to
.
have
.
length
(
1
)
expect
(
users
[
0
].
username
).
to
.
equal
(
'boo2'
)
expect
(
users
[
0
].
intVal
).
to
.
equal
(
10
)
self
.
UserPrimary
.
sync
({
force
:
true
}).
success
(
function
()
{
self
.
UserPrimary
.
create
({
specialkey
:
'a string'
}).
success
(
function
()
{
self
.
user
=
user
done
()
})
})
it
(
'should be able to find a row using not like'
,
function
(
done
)
{
this
.
User
.
findAll
({
where
:
{
username
:
{
nlike
:
'%2'
}
}
}).
success
(
function
(
users
)
{
expect
(
users
).
to
.
be
.
an
.
instanceof
(
Array
)
expect
(
users
).
to
.
have
.
length
(
1
)
expect
(
users
[
0
].
username
).
to
.
equal
(
'boo'
)
expect
(
users
[
0
].
intVal
).
to
.
equal
(
5
)
done
()
})
})
it
(
'should be able to find a row between a certain date using the between shortcut'
,
function
(
done
)
{
this
.
User
.
findAll
({
where
:
{
theDate
:
{
'..'
:
[
'2013-01-02'
,
'2013-01-11'
]
}
}
}).
success
(
function
(
users
)
{
expect
(
users
[
0
].
username
).
to
.
equal
(
'boo2'
)
expect
(
users
[
0
].
intVal
).
to
.
equal
(
10
)
it
(
'does not modify the passed arguments'
,
function
(
done
)
{
var
options
=
{
where
:
[
'specialkey = ?'
,
'awesome'
]}
this
.
UserPrimary
.
find
(
options
).
success
(
function
(
user
)
{
expect
(
options
).
to
.
deep
.
equal
({
where
:
[
'specialkey = ?'
,
'awesome'
]})
done
()
})
})
it
(
'should be able to find a row not between a certain integer using the not between shortcut'
,
function
(
done
)
{
this
.
User
.
findAll
({
where
:
{
intVal
:
{
'!..'
:
[
8
,
10
]
}
}
}).
success
(
function
(
users
)
{
expect
(
users
[
0
].
username
).
to
.
equal
(
'boo'
)
expect
(
users
[
0
].
intVal
).
to
.
equal
(
5
)
it
(
'doesn\'t throw an error when entering in a non integer value for a specified primary field'
,
function
(
done
)
{
this
.
UserPrimary
.
find
(
'a string'
).
success
(
function
(
user
)
{
expect
(
user
.
specialkey
).
to
.
equal
(
'a string'
)
done
()
})
})
it
(
'should be able to handle false/true values just fine...'
,
function
(
done
)
{
var
User
=
this
.
User
,
escapeChar
=
(
dialect
===
"postgres"
)
?
'"'
:
'`'
User
.
bulkCreate
([
{
username
:
'boo5'
,
aBool
:
false
},
{
username
:
'boo6'
,
aBool
:
true
}
]).
success
(
function
()
{
User
.
all
({
where
:
[
escapeChar
+
'aBool'
+
escapeChar
+
' = ?'
,
false
]}).
success
(
function
(
users
)
{
expect
(
users
).
to
.
have
.
length
(
1
)
expect
(
users
[
0
].
username
).
to
.
equal
(
'boo5'
)
User
.
all
({
where
:
[
escapeChar
+
'aBool'
+
escapeChar
+
' = ?'
,
true
]}).
success
(
function
(
_users
)
{
expect
(
_users
).
to
.
have
.
length
(
1
)
expect
(
_users
[
0
].
username
).
to
.
equal
(
'boo6'
)
it
(
'doesn\'t throw an error when entering in a non integer value'
,
function
(
done
)
{
this
.
User
.
find
(
'a string value'
).
success
(
function
(
user
)
{
expect
(
user
).
to
.
be
.
null
done
()
})
})
it
(
'returns a single dao'
,
function
(
done
)
{
var
self
=
this
this
.
User
.
find
(
this
.
user
.
id
).
success
(
function
(
user
)
{
expect
(
Array
.
isArray
(
user
)).
to
.
not
.
be
.
ok
expect
(
user
.
id
).
to
.
equal
(
self
.
user
.
id
)
expect
(
user
.
id
).
to
.
equal
(
1
)
done
()
})
})
it
(
'should be able to handle false/true values through associations as well...'
,
function
(
done
)
{
var
User
=
this
.
User
,
escapeChar
=
(
dialect
===
"postgres"
)
?
'"'
:
'`'
var
Passports
=
this
.
sequelize
.
define
(
'Passports'
,
{
isActive
:
Sequelize
.
BOOLEAN
it
(
'returns a single dao given a string id'
,
function
(
done
)
{
var
self
=
this
this
.
User
.
find
(
this
.
user
.
id
+
''
).
success
(
function
(
user
)
{
expect
(
Array
.
isArray
(
user
)).
to
.
not
.
be
.
ok
expect
(
user
.
id
).
to
.
equal
(
self
.
user
.
id
)
expect
(
user
.
id
).
to
.
equal
(
1
)
done
()
})
})
User
.
hasMany
(
Passports
)
Passports
.
belongsTo
(
User
)
User
.
sync
({
force
:
true
}).
success
(
function
()
{
Passports
.
sync
({
force
:
true
}).
success
(
function
()
{
User
.
bulkCreate
([
{
username
:
'boo5'
,
aBool
:
false
},
{
username
:
'boo6'
,
aBool
:
true
}
]).
success
(
function
()
{
Passports
.
bulkCreate
([
{
isActive
:
true
},
{
isActive
:
false
}
]).
success
(
function
()
{
User
.
find
(
1
).
success
(
function
(
user
)
{
Passports
.
find
(
1
).
success
(
function
(
passport
)
{
user
.
setPassports
([
passport
]).
success
(
function
()
{
User
.
find
(
2
).
success
(
function
(
_user
)
{
Passports
.
find
(
2
).
success
(
function
(
_passport
)
{
_user
.
setPassports
([
_passport
]).
success
(
function
()
{
_user
.
getPassports
({
where
:
[
escapeChar
+
'isActive'
+
escapeChar
+
' = ?'
,
false
]}).
success
(
function
(
theFalsePassport
)
{
user
.
getPassports
({
where
:
[
escapeChar
+
'isActive'
+
escapeChar
+
' = ?'
,
true
]}).
success
(
function
(
theTruePassport
)
{
expect
(
theFalsePassport
).
to
.
have
.
length
(
1
)
expect
(
theFalsePassport
[
0
].
isActive
).
to
.
be
.
false
expect
(
theTruePassport
).
to
.
have
.
length
(
1
)
expect
(
theTruePassport
[
0
].
isActive
).
to
.
be
.
true
it
(
"should make aliased attributes available"
,
function
(
done
)
{
this
.
User
.
find
({
where
:
{
id
:
1
},
attributes
:
[
'id'
,
[
'username'
,
'name'
]]
}).
success
(
function
(
user
)
{
expect
(
user
.
name
).
to
.
equal
(
'barfooz'
)
done
()
})
})
it
(
"should not try to convert boolean values if they are not selected"
,
function
(
done
)
{
var
UserWithBoolean
=
this
.
sequelize
.
define
(
'UserBoolean'
,
{
active
:
Sequelize
.
BOOLEAN
})
UserWithBoolean
.
sync
({
force
:
true
}).
success
(
function
()
{
UserWithBoolean
.
create
({
active
:
true
}).
success
(
function
(
user
)
{
UserWithBoolean
.
find
({
where
:
{
id
:
user
.
id
},
attributes
:
[
'id'
]
}).
success
(
function
(
user
)
{
expect
(
user
.
active
).
not
.
to
.
exist
done
()
})
})
})
})
it
(
'finds a specific user via where option'
,
function
(
done
)
{
this
.
User
.
find
({
where
:
{
username
:
'barfooz'
}
}).
success
(
function
(
user
)
{
expect
(
user
.
username
).
to
.
equal
(
'barfooz'
)
done
()
})
})
it
(
"doesn't find a user if conditions are not matching"
,
function
(
done
)
{
this
.
User
.
find
({
where
:
{
username
:
'foo'
}
}).
success
(
function
(
user
)
{
expect
(
user
).
to
.
be
.
null
done
()
})
})
it
(
'allows sql logging'
,
function
(
done
)
{
this
.
User
.
find
({
where
:
{
username
:
'foo'
}
}).
on
(
'sql'
,
function
(
sql
)
{
expect
(
sql
).
to
.
exist
expect
(
sql
.
toUpperCase
().
indexOf
(
"SELECT"
)).
to
.
be
.
above
(
-
1
)
done
()
})
})
it
(
'should be able to return a record with primaryKey being null for new inserts'
,
function
(
done
)
{
var
Session
=
this
.
sequelize
.
define
(
'Session'
,
{
token
:
{
type
:
DataTypes
.
TEXT
,
allowNull
:
false
},
lastUpdate
:
{
type
:
DataTypes
.
DATE
,
allowNull
:
false
}
},
{
charset
:
'utf8'
,
collate
:
'utf8_general_ci'
,
omitNull
:
true
it
(
'ignores passed limit option'
,
function
(
done
)
{
this
.
User
.
find
({
limit
:
10
}).
success
(
function
(
user
)
{
// it returns an object instead of an array
expect
(
Array
.
isArray
(
user
)).
to
.
not
.
be
.
ok
expect
(
user
.
hasOwnProperty
(
'username'
)).
to
.
be
.
ok
done
()
})
,
User
=
this
.
sequelize
.
define
(
'User'
,
{
name
:
{
type
:
DataTypes
.
STRING
,
allowNull
:
false
,
unique
:
true
},
password
:
{
type
:
DataTypes
.
STRING
,
allowNull
:
false
},
isAdmin
:
{
type
:
DataTypes
.
BOOLEAN
,
allowNull
:
false
,
defaultValue
:
false
}
},
{
charset
:
'utf8'
,
collate
:
'utf8_general_ci'
})
User
.
hasMany
(
Session
,
{
as
:
'Sessions'
})
Session
.
belongsTo
(
User
)
Session
.
sync
({
force
:
true
}).
success
(
function
()
{
User
.
sync
({
force
:
true
}).
success
(
function
()
{
User
.
create
({
name
:
'Name1'
,
password
:
'123'
,
isAdmin
:
false
}).
success
(
function
(
user
)
{
var
sess
=
Session
.
build
({
lastUpdate
:
new
Date
(),
token
:
'123'
it
(
'finds entries via primary keys'
,
function
(
done
)
{
var
self
=
this
,
UserPrimary
=
self
.
sequelize
.
define
(
'UserWithPrimaryKey'
,
{
identifier
:
{
type
:
Sequelize
.
STRING
,
primaryKey
:
true
},
name
:
Sequelize
.
STRING
})
user
.
addSession
(
sess
).
success
(
function
(
u
)
{
expect
(
u
.
token
).
to
.
equal
(
'123'
)
UserPrimary
.
sync
({
force
:
true
}).
success
(
function
()
{
UserPrimary
.
create
({
identifier
:
'an identifier'
,
name
:
'John'
}).
success
(
function
(
u
)
{
expect
(
u
.
id
).
not
.
to
.
exist
UserPrimary
.
find
(
'an identifier'
).
success
(
function
(
u2
)
{
expect
(
u2
.
identifier
).
to
.
equal
(
'an identifier'
)
expect
(
u2
.
name
).
to
.
equal
(
'John'
)
done
()
})
})
})
})
})
it
(
'should be able to find a row between a certain date'
,
function
(
done
)
{
this
.
User
.
findAll
({
where
:
{
theDate
:
{
between
:
[
'2013-01-02'
,
'2013-01-11'
]
}
}
}).
success
(
function
(
users
)
{
expect
(
users
[
0
].
username
).
to
.
equal
(
'boo2'
)
expect
(
users
[
0
].
intVal
).
to
.
equal
(
10
)
done
()
})
it
(
'finds entries via a string primary key called id'
,
function
(
done
)
{
var
self
=
this
,
UserPrimary
=
self
.
sequelize
.
define
(
'UserWithPrimaryKey'
,
{
id
:
{
type
:
Sequelize
.
STRING
,
primaryKey
:
true
},
name
:
Sequelize
.
STRING
})
it
(
'should be able to find a row between a certain date and an additional where clause'
,
function
(
done
)
{
this
.
User
.
findAll
({
where
:
{
theDate
:
{
between
:
[
'2013-01-02'
,
'2013-01-11'
]
},
intVal
:
10
}
}).
success
(
function
(
users
)
{
expect
(
users
[
0
].
username
).
to
.
equal
(
'boo2'
)
expect
(
users
[
0
].
intVal
).
to
.
equal
(
10
)
UserPrimary
.
sync
({
force
:
true
}).
success
(
function
()
{
UserPrimary
.
create
({
id
:
'a string based id'
,
name
:
'Johnno'
}).
success
(
function
(
u
)
{
UserPrimary
.
find
(
'a string based id'
).
success
(
function
(
u2
)
{
expect
(
u2
.
id
).
to
.
equal
(
'a string based id'
)
expect
(
u2
.
name
).
to
.
equal
(
'Johnno'
)
done
()
})
})
it
(
'should be able to find a row not between a certain integer'
,
function
(
done
)
{
this
.
User
.
findAll
({
where
:
{
intVal
:
{
nbetween
:
[
8
,
10
]
}
}
}).
success
(
function
(
users
)
{
expect
(
users
[
0
].
username
).
to
.
equal
(
'boo'
)
expect
(
users
[
0
].
intVal
).
to
.
equal
(
5
)
done
()
})
})
it
(
'should be able to find a row using not between and between logic'
,
function
(
done
)
{
this
.
User
.
findAll
({
where
:
{
theDate
:
{
between
:
[
'2012-12-10'
,
'2013-01-02'
],
nbetween
:
[
'2013-01-04'
,
'2013-01-20'
]
}
}
}).
success
(
function
(
users
)
{
expect
(
users
[
0
].
username
).
to
.
equal
(
'boo'
)
expect
(
users
[
0
].
intVal
).
to
.
equal
(
5
)
done
()
})
})
it
(
'should be able to find a row using not between and between logic with dates'
,
function
(
done
)
{
this
.
User
.
findAll
({
where
:
{
theDate
:
{
between
:
[
new
Date
(
'2012-12-10'
),
new
Date
(
'2013-01-02'
)],
nbetween
:
[
new
Date
(
'2013-01-04'
),
new
Date
(
'2013-01-20'
)]
}
}
}).
success
(
function
(
users
)
{
expect
(
users
[
0
].
username
).
to
.
equal
(
'boo'
)
expect
(
users
[
0
].
intVal
).
to
.
equal
(
5
)
it
(
'returns the selected fields as instance.selectedValues'
,
function
(
done
)
{
var
self
=
this
this
.
User
.
create
({
username
:
'JohnXOXOXO'
}).
success
(
function
()
{
self
.
User
.
find
({
where
:
{
username
:
'JohnXOXOXO'
},
attributes
:
[
'username'
]
}).
success
(
function
(
user
)
{
expect
(
user
.
selectedValues
).
to
.
have
.
property
(
'username'
,
'JohnXOXOXO'
)
done
()
})
})
it
(
'should be able to find a row using greater than or equal to logic with dates'
,
function
(
done
)
{
this
.
User
.
findAll
({
where
:
{
theDate
:
{
gte
:
new
Date
(
'2013-01-09'
)
}
}
}).
success
(
function
(
users
)
{
expect
(
users
[
0
].
username
).
to
.
equal
(
'boo2'
)
expect
(
users
[
0
].
intVal
).
to
.
equal
(
10
)
done
()
})
it
(
'returns the selected fields and all fields of the included table as instance.selectedValues'
,
function
(
done
)
{
var
self
=
this
self
.
Mission
=
self
.
sequelize
.
define
(
'Mission'
,
{
title
:
{
type
:
Sequelize
.
STRING
,
defaultValue
:
'a mission!!'
},
foo
:
{
type
:
Sequelize
.
INTEGER
,
defaultValue
:
2
},
})
it
(
'should be able to find a row using greater than or equal to'
,
function
(
done
)
{
this
.
User
.
find
({
where
:
{
intVal
:
{
gte
:
6
}
}
self
.
Mission
.
belongsTo
(
self
.
User
)
self
.
User
.
hasMany
(
self
.
Mission
)
self
.
Mission
.
sync
({
force
:
true
}).
success
(
function
()
{
self
.
Mission
.
create
().
success
(
function
(
mission
)
{
self
.
User
.
create
({
username
:
'John DOE'
}).
success
(
function
(
user
)
{
mission
.
setUser
(
user
).
success
(
function
()
{
self
.
User
.
find
({
where
:
{
username
:
'John DOE'
},
attributes
:
[
'username'
],
include
:
[
self
.
Mission
]
}).
success
(
function
(
user
)
{
expect
(
user
.
username
).
to
.
equal
(
'boo2'
)
expect
(
user
.
intVal
).
to
.
equal
(
10
)
expect
(
user
.
selectedValues
).
to
.
deep
.
equal
({
username
:
'John DOE'
})
done
()
})
})
it
(
'should be able to find a row using greater than'
,
function
(
done
)
{
this
.
User
.
find
({
where
:
{
intVal
:
{
gt
:
5
}
}
}).
success
(
function
(
user
)
{
expect
(
user
.
username
).
to
.
equal
(
'boo2'
)
expect
(
user
.
intVal
).
to
.
equal
(
10
)
done
()
})
})
it
(
'should be able to find a row using lesser than or equal to'
,
function
(
done
)
{
this
.
User
.
find
({
where
:
{
intVal
:
{
lte
:
5
}
}
}).
success
(
function
(
user
)
{
expect
(
user
.
username
).
to
.
equal
(
'boo'
)
expect
(
user
.
intVal
).
to
.
equal
(
5
)
done
()
})
})
it
(
'should be able to find a row using lesser than'
,
function
(
done
)
{
this
.
User
.
find
({
where
:
{
intVal
:
{
lt
:
6
}
}
it
(
'returns the selected fields for both the base table and the included table as instance.selectedValues'
,
function
(
done
)
{
var
self
=
this
self
.
Mission
=
self
.
sequelize
.
define
(
'Mission'
,
{
title
:
{
type
:
Sequelize
.
STRING
,
defaultValue
:
'another mission!!'
},
foo
:
{
type
:
Sequelize
.
INTEGER
,
defaultValue
:
4
},
})
self
.
Mission
.
belongsTo
(
self
.
User
)
self
.
User
.
hasMany
(
self
.
Mission
)
self
.
Mission
.
sync
({
force
:
true
}).
success
(
function
()
{
self
.
Mission
.
create
().
success
(
function
(
mission
)
{
self
.
User
.
create
({
username
:
'Brain Picker'
}).
success
(
function
(
user
)
{
mission
.
setUser
(
user
).
success
(
function
()
{
self
.
User
.
find
({
where
:
{
username
:
'Brain Picker'
},
attributes
:
[
'username'
],
include
:
[{
model
:
self
.
Mission
,
as
:
self
.
Mission
.
tableName
,
attributes
:
[
'title'
]}]
}).
success
(
function
(
user
)
{
expect
(
user
.
username
).
to
.
equal
(
'boo'
)
expect
(
user
.
intVal
).
to
.
equal
(
5
)
expect
(
user
.
selectedValues
).
to
.
deep
.
equal
({
username
:
'Brain Picker'
})
expect
(
user
.
missions
[
0
].
selectedValues
).
to
.
deep
.
equal
({
id
:
1
,
title
:
'another mission!!'
})
expect
(
user
.
missions
[
0
].
foo
).
not
.
to
.
exist
done
()
})
})
it
(
'should have no problem finding a row using lesser and greater than'
,
function
(
done
)
{
this
.
User
.
findAll
({
where
:
{
intVal
:
{
lt
:
6
,
gt
:
4
}
}
}).
success
(
function
(
users
)
{
expect
(
users
[
0
].
username
).
to
.
equal
(
'boo'
)
expect
(
users
[
0
].
intVal
).
to
.
equal
(
5
)
done
()
})
})
it
(
'should be able to find a row using not equal to logic'
,
function
(
done
)
{
this
.
User
.
find
({
where
:
{
intVal
:
{
ne
:
10
}
}
}).
success
(
function
(
user
)
{
expect
(
user
.
username
).
to
.
equal
(
'boo'
)
expect
(
user
.
intVal
).
to
.
equal
(
5
)
done
()
})
})
it
(
'should be able to find multiple users with any of the special where logic properties'
,
function
(
done
)
{
this
.
User
.
findAll
({
where
:
{
intVal
:
{
lte
:
10
}
}
}).
success
(
function
(
users
)
{
expect
(
users
[
0
].
username
).
to
.
equal
(
'boo'
)
expect
(
users
[
0
].
intVal
).
to
.
equal
(
5
)
expect
(
users
[
1
].
username
).
to
.
equal
(
'boo2'
)
expect
(
users
[
1
].
intVal
).
to
.
equal
(
10
)
it
(
'always honors ZERO as primary key'
,
function
(
_done
)
{
var
self
=
this
,
permutations
=
[
0
,
'0'
,
{
where
:
{
id
:
0
}},
{
where
:
{
id
:
'0'
}}
]
,
done
=
_
.
after
(
2
*
permutations
.
length
,
_done
)
this
.
User
.
bulkCreate
([{
username
:
'jack'
},
{
username
:
'jack'
}]).
success
(
function
()
{
permutations
.
forEach
(
function
(
perm
)
{
self
.
User
.
find
(
perm
).
done
(
function
(
err
,
user
)
{
expect
(
err
).
to
.
be
.
null
expect
(
user
).
to
.
be
.
null
done
()
}).
on
(
'sql'
,
function
(
s
)
{
expect
(
s
.
indexOf
(
0
)).
not
.
to
.
equal
(
-
1
)
done
()
})
})
})
})
describe
(
'find'
,
function
()
{
it
(
'supports transactions'
,
function
(
done
)
{
Support
.
prepareTransactionTest
(
dialect
,
this
.
sequelize
,
function
(
sequelize
)
{
var
User
=
sequelize
.
define
(
'User'
,
{
username
:
Sequelize
.
STRING
})
it
(
'should allow us to find IDs using capital letters'
,
function
(
done
)
{
var
User
=
this
.
sequelize
.
define
(
'User'
+
config
.
rand
(),
{
ID
:
{
type
:
Sequelize
.
INTEGER
,
primaryKey
:
true
,
autoIncrement
:
true
},
Login
:
{
type
:
Sequelize
.
STRING
}
})
User
.
sync
({
force
:
true
}).
success
(
function
()
{
sequelize
.
transaction
(
function
(
t
)
{
User
.
create
({
username
:
'foo'
},
{
transaction
:
t
}).
success
(
function
()
{
User
.
find
({
username
:
'foo'
}).
success
(
function
(
user1
)
{
User
.
find
({
username
:
'foo'
},
{
transaction
:
t
}).
success
(
function
(
user2
)
{
expect
(
user1
).
to
.
be
.
null
expect
(
user2
).
to
.
not
.
be
.
null
t
.
rollback
().
success
(
function
()
{
User
.
create
({
Login
:
'foo'
}).
success
(
function
()
{
User
.
find
(
1
).
success
(
function
(
user
)
{
expect
(
user
).
to
.
exist
expect
(
user
.
ID
).
to
.
equal
(
1
)
done
()
})
})
})
})
})
})
})
})
describe
(
'
general / basic function
'
,
function
()
{
describe
(
'
eager loading
'
,
function
()
{
beforeEach
(
function
(
done
)
{
var
self
=
this
this
.
User
.
create
({
username
:
'barfooz'
}).
success
(
function
(
user
)
{
self
.
UserPrimary
=
self
.
sequelize
.
define
(
'UserPrimary'
,
{
specialkey
:
{
type
:
DataTypes
.
STRING
,
primaryKey
:
true
}
})
self
.
Task
=
self
.
sequelize
.
define
(
'Task'
,
{
title
:
Sequelize
.
STRING
})
self
.
Worker
=
self
.
sequelize
.
define
(
'Worker'
,
{
name
:
Sequelize
.
STRING
})
self
.
UserPrimary
.
sync
({
force
:
true
}).
success
(
function
()
{
self
.
UserPrimary
.
create
({
specialkey
:
'a string'
}).
success
(
function
()
{
self
.
user
=
user
done
()
this
.
init
=
function
(
callback
)
{
self
.
Task
.
sync
({
force
:
true
}).
success
(
function
()
{
self
.
Worker
.
sync
({
force
:
true
}).
success
(
function
()
{
self
.
Worker
.
create
({
name
:
'worker'
}).
success
(
function
(
worker
)
{
self
.
Task
.
create
({
title
:
'homework'
}).
success
(
function
(
task
)
{
self
.
worker
=
worker
self
.
task
=
task
callback
()
})
})
})
})
it
(
'does not modify the passed arguments'
,
function
(
done
)
{
var
options
=
{
where
:
[
'specialkey = ?'
,
'awesome'
]}
this
.
UserPrimary
.
find
(
options
).
success
(
function
(
user
)
{
expect
(
options
).
to
.
deep
.
equal
({
where
:
[
'specialkey = ?'
,
'awesome'
]})
}
done
()
})
})
it
(
'doesn\'t throw an error when entering in a non integer value for a specified primary field'
,
function
(
done
)
{
this
.
UserPrimary
.
find
(
'a string'
).
success
(
function
(
user
)
{
expect
(
user
.
specialkey
).
to
.
equal
(
'a string'
)
describe
(
'belongsTo'
,
function
()
{
describe
(
'generic'
,
function
()
{
it
(
'throws an error about unexpected input if include contains a non-object'
,
function
(
done
)
{
var
self
=
this
expect
(
function
()
{
self
.
Worker
.
find
({
include
:
[
1
]
})
}).
to
.
throw
(
Error
,
'Include unexpected. Element has to be either an instance of DAOFactory or an object.'
)
done
()
})
})
it
(
'doesn\'t throw an error when entering in a non integer value'
,
function
(
done
)
{
this
.
User
.
find
(
'a string value'
).
success
(
function
(
user
)
{
expect
(
user
).
to
.
be
.
null
it
(
'throws an error about missing attributes if include contains an object with daoFactory'
,
function
(
done
)
{
var
self
=
this
expect
(
function
()
{
self
.
Worker
.
find
({
include
:
[
{
daoFactory
:
self
.
Worker
}
]
})
}).
to
.
throw
(
Error
,
'Include malformed. Expected attributes: daoFactory, as!'
)
done
()
})
})
it
(
'returns a single dao
'
,
function
(
done
)
{
it
(
'throws an error if included DaoFactory is not associated
'
,
function
(
done
)
{
var
self
=
this
this
.
User
.
find
(
this
.
user
.
id
).
success
(
function
(
user
)
{
expect
(
Array
.
isArray
(
user
)).
to
.
not
.
be
.
ok
expect
(
user
.
id
).
to
.
equal
(
self
.
user
.
id
)
expect
(
user
.
id
).
to
.
equal
(
1
)
expect
(
function
()
{
self
.
Worker
.
find
({
include
:
[
self
.
Task
]
})
}).
to
.
throw
(
Error
,
'Task is not associated to Worker!'
)
done
()
})
})
it
(
'returns a single dao given a string id
'
,
function
(
done
)
{
it
(
'returns the associated worker via task.worker
'
,
function
(
done
)
{
var
self
=
this
this
.
User
.
find
(
this
.
user
.
id
+
''
).
success
(
function
(
user
)
{
expect
(
Array
.
isArray
(
user
)).
to
.
not
.
be
.
ok
expect
(
user
.
id
).
to
.
equal
(
self
.
user
.
id
)
expect
(
user
.
id
).
to
.
equal
(
1
)
this
.
Task
.
belongsTo
(
this
.
Worker
)
this
.
init
(
function
()
{
self
.
task
.
setWorker
(
self
.
worker
).
success
(
function
()
{
self
.
Task
.
find
({
where
:
{
title
:
'homework'
},
include
:
[
self
.
Worker
]
}).
complete
(
function
(
err
,
task
)
{
expect
(
err
).
to
.
be
.
null
expect
(
task
).
to
.
exist
expect
(
task
.
worker
).
to
.
exist
expect
(
task
.
worker
.
name
).
to
.
equal
(
'worker'
)
done
()
})
})
it
(
"should make aliased attributes available"
,
function
(
done
)
{
this
.
User
.
find
({
where
:
{
id
:
1
},
attributes
:
[
'id'
,
[
'username'
,
'name'
]]
}).
success
(
function
(
user
)
{
expect
(
user
.
name
).
to
.
equal
(
'barfooz'
)
done
()
})
})
it
(
"should not try to convert boolean values if they are not selected"
,
function
(
done
)
{
var
UserWithBoolean
=
this
.
sequelize
.
define
(
'UserBoolean'
,
{
active
:
Sequelize
.
BOOLEAN
})
UserWithBoolean
.
sync
({
force
:
true
}).
success
(
function
()
{
UserWithBoolean
.
create
({
active
:
true
}).
success
(
function
(
user
)
{
UserWithBoolean
.
find
({
where
:
{
id
:
user
.
id
},
attributes
:
[
'id'
]
}).
success
(
function
(
user
)
{
expect
(
user
.
active
).
not
.
to
.
exist
it
(
'returns the private and public ip'
,
function
(
done
)
{
var
self
=
Object
.
create
(
this
)
self
.
Domain
=
self
.
sequelize
.
define
(
'Domain'
,
{
ip
:
Sequelize
.
STRING
})
self
.
Environment
=
self
.
sequelize
.
define
(
'Environment'
,
{
name
:
Sequelize
.
STRING
})
self
.
Environment
.
belongsTo
(
self
.
Domain
,
{
as
:
'PrivateDomain'
,
foreignKey
:
'privateDomainId'
})
.
belongsTo
(
self
.
Domain
,
{
as
:
'PublicDomain'
,
foreignKey
:
'publicDomainId'
})
self
.
Domain
.
sync
({
force
:
true
}).
success
(
function
()
{
self
.
Environment
.
sync
({
force
:
true
}).
success
(
function
()
{
self
.
Domain
.
create
({
ip
:
'192.168.0.1'
}).
success
(
function
(
privateIp
)
{
self
.
Domain
.
create
({
ip
:
'91.65.189.19'
}).
success
(
function
(
publicIp
)
{
self
.
Environment
.
create
({
name
:
'environment'
}).
success
(
function
(
env
)
{
env
.
setPrivateDomain
(
privateIp
).
success
(
function
()
{
env
.
setPublicDomain
(
publicIp
).
success
(
function
()
{
self
.
Environment
.
find
({
where
:
{
name
:
'environment'
},
include
:
[
{
daoFactory
:
self
.
Domain
,
as
:
'PrivateDomain'
},
{
daoFactory
:
self
.
Domain
,
as
:
'PublicDomain'
}
]
}).
complete
(
function
(
err
,
environment
)
{
expect
(
err
).
to
.
be
.
null
expect
(
environment
).
to
.
exist
expect
(
environment
.
privateDomain
).
to
.
exist
expect
(
environment
.
privateDomain
.
ip
).
to
.
equal
(
'192.168.0.1'
)
expect
(
environment
.
publicDomain
).
to
.
exist
expect
(
environment
.
publicDomain
.
ip
).
to
.
equal
(
'91.65.189.19'
)
done
()
})
})
})
})
it
(
'finds a specific user via where option'
,
function
(
done
)
{
this
.
User
.
find
({
where
:
{
username
:
'barfooz'
}
}).
success
(
function
(
user
)
{
expect
(
user
.
username
).
to
.
equal
(
'barfooz'
)
done
()
})
})
it
(
"doesn't find a user if conditions are not matching"
,
function
(
done
)
{
this
.
User
.
find
({
where
:
{
username
:
'foo'
}
}).
success
(
function
(
user
)
{
expect
(
user
).
to
.
be
.
null
done
()
})
})
})
it
(
'allows sql logging'
,
function
(
done
)
{
this
.
User
.
find
({
where
:
{
username
:
'foo'
}
}).
on
(
'sql'
,
function
(
sql
)
{
expect
(
sql
).
to
.
exist
expect
(
sql
.
toUpperCase
().
indexOf
(
"SELECT"
)).
to
.
be
.
above
(
-
1
)
done
()
it
(
'eager loads with non-id primary keys'
,
function
(
done
)
{
var
self
=
this
self
.
User
=
self
.
sequelize
.
define
(
'UserPKeagerbelong'
,
{
username
:
{
type
:
Sequelize
.
STRING
,
primaryKey
:
true
}
})
self
.
Group
=
self
.
sequelize
.
define
(
'GroupPKeagerbelong'
,
{
name
:
{
type
:
Sequelize
.
STRING
,
primaryKey
:
true
}
})
self
.
User
.
belongsTo
(
self
.
Group
)
it
(
'ignores passed limit option'
,
function
(
done
)
{
this
.
User
.
find
({
limit
:
10
}).
success
(
function
(
user
)
{
// it returns an object instead of an array
expect
(
Array
.
isArray
(
user
)).
to
.
not
.
be
.
ok
expect
(
user
.
hasOwnProperty
(
'username'
)).
to
.
be
.
ok
self
.
sequelize
.
sync
({
force
:
true
}).
success
(
function
()
{
self
.
User
.
create
({
username
:
'someone'
,
GroupPKeagerbelongId
:
'people'
}).
success
(
function
()
{
self
.
Group
.
create
({
name
:
'people'
}).
success
(
function
()
{
self
.
User
.
find
({
where
:
{
username
:
'someone'
},
include
:
[
self
.
Group
]
}).
complete
(
function
(
err
,
someUser
)
{
expect
(
err
).
to
.
be
.
null
expect
(
someUser
).
to
.
exist
expect
(
someUser
.
username
).
to
.
equal
(
'someone'
)
expect
(
someUser
.
groupPKeagerbelong
.
name
).
to
.
equal
(
'people'
)
done
()
})
})
})
})
})
it
(
'finds entries via primary keys'
,
function
(
done
)
{
var
self
=
this
,
UserPrimary
=
self
.
sequelize
.
define
(
'UserWithPrimaryKey'
,
{
identifier
:
{
type
:
Sequelize
.
STRING
,
primaryKey
:
true
},
name
:
Sequelize
.
STRING
it
(
'getting parent data in many to one relationship'
,
function
(
done
)
{
var
self
=
this
;
var
User
=
self
.
sequelize
.
define
(
'User'
,
{
id
:
{
type
:
Sequelize
.
INTEGER
,
autoIncrement
:
true
,
primaryKey
:
true
},
username
:
{
type
:
Sequelize
.
STRING
}
})
UserPrimary
.
sync
({
force
:
true
}).
success
(
function
()
{
UserPrimary
.
create
({
identifier
:
'an identifier'
,
name
:
'John'
}).
success
(
function
(
u
)
{
expect
(
u
.
id
).
not
.
to
.
exist
var
Message
=
self
.
sequelize
.
define
(
'Message'
,
{
id
:
{
type
:
Sequelize
.
INTEGER
,
autoIncrement
:
true
,
primaryKey
:
true
},
user_id
:
{
type
:
Sequelize
.
INTEGER
},
message
:
{
type
:
Sequelize
.
STRING
}
})
User
.
hasMany
(
Message
)
Message
.
belongsTo
(
User
,
{
foreignKey
:
'user_id'
})
Message
.
sync
({
force
:
true
}).
success
(
function
()
{
User
.
sync
({
force
:
true
}).
success
(
function
()
{
User
.
create
({
username
:
'test_testerson'
}).
success
(
function
(
user
)
{
Message
.
create
({
user_id
:
user
.
id
,
message
:
'hi there!'
}).
success
(
function
(
message
)
{
Message
.
create
({
user_id
:
user
.
id
,
message
:
'a second message'
}).
success
(
function
(
message
)
{
Message
.
findAll
({
where
:
{
user_id
:
user
.
id
},
attributes
:
[
'user_id'
,
'message'
],
include
:
[{
model
:
User
,
as
:
User
.
tableName
,
attributes
:
[
'username'
]
}]
}).
success
(
function
(
messages
)
{
expect
(
messages
.
length
).
to
.
equal
(
2
);
expect
(
messages
[
0
].
message
).
to
.
equal
(
'hi there!'
);
expect
(
messages
[
0
].
user
.
username
).
to
.
equal
(
'test_testerson'
);
expect
(
messages
[
1
].
message
).
to
.
equal
(
'a second message'
);
expect
(
messages
[
1
].
user
.
username
).
to
.
equal
(
'test_testerson'
);
UserPrimary
.
find
(
'an identifier'
).
success
(
function
(
u2
)
{
expect
(
u2
.
identifier
).
to
.
equal
(
'an identifier'
)
expect
(
u2
.
name
).
to
.
equal
(
'John'
)
done
()
})
})
})
})
it
(
'finds entries via a string primary key called id'
,
function
(
done
)
{
var
self
=
this
,
UserPrimary
=
self
.
sequelize
.
define
(
'UserWithPrimaryKey'
,
{
id
:
{
type
:
Sequelize
.
STRING
,
primaryKey
:
true
},
name
:
Sequelize
.
STRING
})
})
UserPrimary
.
sync
({
force
:
true
}).
success
(
function
()
{
UserPrimary
.
create
({
id
:
'a string based id'
,
name
:
'Johnno'
}).
success
(
function
(
u
)
{
UserPrimary
.
find
(
'a string based id'
).
success
(
function
(
u2
)
{
expect
(
u2
.
id
).
to
.
equal
(
'a string based id'
)
expect
(
u2
.
name
).
to
.
equal
(
'Johnno'
)
})
it
(
'allows mulitple assocations of the same model with different alias'
,
function
(
done
)
{
var
self
=
this
this
.
Worker
.
belongsTo
(
this
.
Task
,
{
as
:
'ToDo'
})
this
.
Worker
.
belongsTo
(
this
.
Task
,
{
as
:
'DoTo'
})
this
.
init
(
function
()
{
self
.
Worker
.
find
({
include
:
[
{
model
:
self
.
Task
,
as
:
'ToDo'
},
{
model
:
self
.
Task
,
as
:
'DoTo'
}
]
}).
success
(
function
()
{
// Just being able to include both shows that this test works, so no assertions needed
done
()
})
})
})
})
it
(
'returns the selected fields as instance.selectedValues'
,
function
(
done
)
{
describe
(
'hasOne'
,
function
()
{
beforeEach
(
function
(
done
)
{
var
self
=
this
this
.
User
.
create
({
username
:
'JohnXOXOXO'
}).
success
(
function
()
{
self
.
User
.
find
({
where
:
{
username
:
'JohnXOXOXO'
},
attributes
:
[
'username'
]
}).
success
(
function
(
user
)
{
expect
(
user
.
selectedValues
).
to
.
have
.
property
(
'username'
,
'JohnXOXOXO'
)
this
.
Worker
.
hasOne
(
this
.
Task
)
this
.
init
(
function
()
{
self
.
worker
.
setTask
(
self
.
task
).
success
(
function
()
{
done
()
})
})
})
it
(
'returns the selected fields and all fields of the included table as instance.selectedValues
'
,
function
(
done
)
{
it
(
'throws an error if included DaoFactory is not associated
'
,
function
(
done
)
{
var
self
=
this
self
.
Mission
=
self
.
sequelize
.
define
(
'Mission'
,
{
title
:
{
type
:
Sequelize
.
STRING
,
defaultValue
:
'a mission!!'
},
foo
:
{
type
:
Sequelize
.
INTEGER
,
defaultValue
:
2
},
expect
(
function
()
{
self
.
Task
.
find
({
include
:
[
self
.
Worker
]
})
}).
to
.
throw
(
Error
,
'Worker is not associated to Task!'
)
done
()
})
self
.
Mission
.
belongsTo
(
self
.
User
)
self
.
User
.
hasMany
(
self
.
Mission
)
self
.
Mission
.
sync
({
force
:
true
}).
success
(
function
()
{
self
.
Mission
.
create
().
success
(
function
(
mission
)
{
self
.
User
.
create
({
username
:
'John DOE'
}).
success
(
function
(
user
)
{
mission
.
setUser
(
user
).
success
(
function
()
{
self
.
User
.
find
({
where
:
{
username
:
'John DOE'
},
attributes
:
[
'username'
],
include
:
[
self
.
Mission
]
}).
success
(
function
(
user
)
{
expect
(
user
.
selectedValues
).
to
.
deep
.
equal
({
username
:
'John DOE'
})
it
(
'returns the associated task via worker.task'
,
function
(
done
)
{
this
.
Worker
.
find
({
where
:
{
name
:
'worker'
},
include
:
[
this
.
Task
]
}).
complete
(
function
(
err
,
worker
)
{
expect
(
err
).
to
.
be
.
null
expect
(
worker
).
to
.
exist
expect
(
worker
.
task
).
to
.
exist
expect
(
worker
.
task
.
title
).
to
.
equal
(
'homework'
)
done
()
})
})
})
})
})
})
it
(
'returns the selected fields for both the base table and the included table as instance.selectedValue
s'
,
function
(
done
)
{
it
(
'eager loads with non-id primary key
s'
,
function
(
done
)
{
var
self
=
this
self
.
Mission
=
self
.
sequelize
.
define
(
'Mission'
,
{
title
:
{
type
:
Sequelize
.
STRING
,
defaultValue
:
'another mission!!'
},
foo
:
{
type
:
Sequelize
.
INTEGER
,
defaultValue
:
4
},
self
.
User
=
self
.
sequelize
.
define
(
'UserPKeagerone'
,
{
username
:
{
type
:
Sequelize
.
STRING
,
primaryKey
:
true
}
})
self
.
Group
=
self
.
sequelize
.
define
(
'GroupPKeagerone'
,
{
name
:
{
type
:
Sequelize
.
STRING
,
primaryKey
:
true
}
})
self
.
Group
.
hasOne
(
self
.
User
)
self
.
Mission
.
belongsTo
(
self
.
User
)
self
.
User
.
hasMany
(
self
.
Mission
)
self
.
Mission
.
sync
({
force
:
true
}).
success
(
function
()
{
self
.
Mission
.
create
().
success
(
function
(
mission
)
{
self
.
User
.
create
({
username
:
'Brain Picker'
}).
success
(
function
(
user
)
{
mission
.
setUser
(
user
).
success
(
function
()
{
self
.
User
.
find
({
where
:
{
username
:
'Brain Picker'
},
attributes
:
[
'username'
],
include
:
[{
model
:
self
.
Mission
,
as
:
self
.
Mission
.
tableName
,
attributes
:
[
'title'
]}]
}).
success
(
function
(
user
)
{
expect
(
user
.
selectedValues
).
to
.
deep
.
equal
({
username
:
'Brain Picker'
})
expect
(
user
.
missions
[
0
].
selectedValues
).
to
.
deep
.
equal
({
id
:
1
,
title
:
'another mission!!'
})
expect
(
user
.
missions
[
0
].
foo
).
not
.
to
.
exist
self
.
sequelize
.
sync
({
force
:
true
}).
success
(
function
()
{
self
.
User
.
create
({
username
:
'someone'
,
GroupPKeageroneId
:
'people'
}).
success
(
function
()
{
self
.
Group
.
create
({
name
:
'people'
}).
success
(
function
()
{
self
.
Group
.
find
({
where
:
{
name
:
'people'
},
include
:
[
self
.
User
]
}).
complete
(
function
(
err
,
someGroup
)
{
expect
(
err
).
to
.
be
.
null
expect
(
someGroup
).
to
.
exist
expect
(
someGroup
.
name
).
to
.
equal
(
'people'
)
expect
(
someGroup
.
userPKeagerone
.
username
).
to
.
equal
(
'someone'
)
done
()
})
})
...
...
@@ -2164,256 +2103,209 @@ describe(Support.getTestDialectTeaser("DAOFactory"), function () {
})
})
it
(
'always honors ZERO as primary key'
,
function
(
_done
)
{
describe
(
'hasOne with alias'
,
function
()
{
it
(
'throws an error if included DaoFactory is not referenced by alias'
,
function
(
done
)
{
var
self
=
this
,
permutations
=
[
0
,
'0'
,
{
where
:
{
id
:
0
}},
{
where
:
{
id
:
'0'
}}
]
,
done
=
_
.
after
(
2
*
permutations
.
length
,
_done
)
this
.
User
.
bulkCreate
([{
username
:
'jack'
},
{
username
:
'jack'
}]).
success
(
function
()
{
permutations
.
forEach
(
function
(
perm
)
{
self
.
User
.
find
(
perm
).
done
(
function
(
err
,
user
)
{
expect
(
err
).
to
.
be
.
null
expect
(
user
).
to
.
be
.
null
done
()
}).
on
(
'sql'
,
function
(
s
)
{
expect
(
s
.
indexOf
(
0
)).
not
.
to
.
equal
(
-
1
)
expect
(
function
()
{
self
.
Worker
.
find
({
include
:
[
self
.
Task
]
})
}).
to
.
throw
(
Error
,
'Task is not associated to Worker!'
)
done
()
})
describe
(
'alias'
,
function
(
done
)
{
beforeEach
(
function
(
done
)
{
var
self
=
this
this
.
Worker
.
hasOne
(
this
.
Task
,
{
as
:
'ToDo'
})
this
.
init
(
function
()
{
self
.
worker
.
setToDo
(
self
.
task
).
success
(
function
()
{
done
()
})
})
})
it
(
'should allow us to find IDs using capital letters'
,
function
(
done
)
{
var
User
=
this
.
sequelize
.
define
(
'User'
+
config
.
rand
(),
{
ID
:
{
type
:
Sequelize
.
INTEGER
,
primaryKey
:
true
,
autoIncrement
:
true
},
Login
:
{
type
:
Sequelize
.
STRING
}
it
(
'throws an error if alias is not associated'
,
function
(
done
)
{
var
self
=
this
expect
(
function
()
{
self
.
Worker
.
find
({
include
:
[
{
daoFactory
:
self
.
Task
,
as
:
'Work'
}
]
})
}).
to
.
throw
(
Error
,
'Task (Work) is not associated to Worker!'
)
done
()
})
User
.
sync
({
force
:
true
}).
success
(
function
()
{
User
.
create
({
Login
:
'foo'
}).
success
(
function
()
{
User
.
find
(
1
).
success
(
function
(
user
)
{
expect
(
user
).
to
.
exist
expect
(
user
.
ID
).
to
.
equal
(
1
)
it
(
'returns the associated task via worker.task'
,
function
(
done
)
{
this
.
Worker
.
find
({
where
:
{
name
:
'worker'
},
include
:
[
{
daoFactory
:
this
.
Task
,
as
:
'ToDo'
}
]
}).
complete
(
function
(
err
,
worker
)
{
expect
(
err
).
to
.
be
.
null
expect
(
worker
).
to
.
exist
expect
(
worker
.
toDo
).
to
.
exist
expect
(
worker
.
toDo
.
title
).
to
.
equal
(
'homework'
)
done
()
})
})
})
it
(
'returns the associated task via worker.task when daoFactory is aliased with model'
,
function
(
done
)
{
this
.
Worker
.
find
({
where
:
{
name
:
'worker'
},
include
:
[
{
model
:
this
.
Task
,
as
:
'ToDo'
}
]
}).
complete
(
function
(
err
,
worker
)
{
expect
(
worker
.
toDo
.
title
).
to
.
equal
(
'homework'
)
done
()
})
})
describe
(
'eager loading'
,
function
()
{
beforeEach
(
function
(
done
)
{
it
(
'allows mulitple assocations of the same model with different alias'
,
function
(
done
)
{
var
self
=
this
self
.
Task
=
self
.
sequelize
.
define
(
'Task'
,
{
title
:
Sequelize
.
STRING
})
self
.
Worker
=
self
.
sequelize
.
define
(
'Worker'
,
{
name
:
Sequelize
.
STRING
})
this
.
init
=
function
(
callback
)
{
self
.
Task
.
sync
({
force
:
true
}).
success
(
function
()
{
self
.
Worker
.
sync
({
force
:
true
}).
success
(
function
()
{
self
.
Worker
.
create
({
name
:
'worker'
}).
success
(
function
(
worker
)
{
self
.
Task
.
create
({
title
:
'homework'
}).
success
(
function
(
task
)
{
self
.
worker
=
worker
self
.
task
=
task
callback
()
this
.
Worker
.
hasOne
(
this
.
Task
,
{
as
:
'DoTo'
})
this
.
init
(
function
()
{
self
.
Worker
.
find
({
include
:
[
{
model
:
self
.
Task
,
as
:
'ToDo'
},
{
model
:
self
.
Task
,
as
:
'DoTo'
}
]
}).
success
(
function
()
{
// Just being able to include both shows that this test works, so no assertions needed
done
()
})
})
})
})
}
done
()
})
describe
(
'belongsTo'
,
function
()
{
describe
(
'generic'
,
function
()
{
it
(
'throws an error about unexpected input if include contains a non-object'
,
function
(
done
)
{
describe
(
'hasMany'
,
function
()
{
beforeEach
(
function
(
done
)
{
var
self
=
this
expect
(
function
()
{
self
.
Worker
.
find
({
include
:
[
1
]
})
}).
to
.
throw
(
Error
,
'Include unexpected. Element has to be either an instance of DAOFactory or an object.'
)
this
.
Worker
.
hasMany
(
this
.
Task
)
this
.
init
(
function
()
{
self
.
worker
.
setTasks
([
self
.
task
]).
success
(
function
()
{
done
()
})
})
})
it
(
'throws an error about missing attributes if include contains an object with daoFactory
'
,
function
(
done
)
{
it
(
'throws an error if included DaoFactory is not associated
'
,
function
(
done
)
{
var
self
=
this
expect
(
function
()
{
self
.
Worker
.
find
({
include
:
[
{
daoFactory
:
self
.
Worker
}
]
})
}).
to
.
throw
(
Error
,
'Include malformed. Expected attributes: daoFactory, as
!'
)
self
.
Task
.
find
({
include
:
[
self
.
Worker
]
})
}).
to
.
throw
(
Error
,
'Worker is not associated to Task
!'
)
done
()
})
it
(
'throws an error if included DaoFactory is not associated'
,
function
(
done
)
{
var
self
=
this
expect
(
function
()
{
self
.
Worker
.
find
({
include
:
[
self
.
Task
]
})
}).
to
.
throw
(
Error
,
'Task is not associated to Worker!'
)
it
(
'returns the associated tasks via worker.tasks'
,
function
(
done
)
{
this
.
Worker
.
find
({
where
:
{
name
:
'worker'
},
include
:
[
this
.
Task
]
}).
complete
(
function
(
err
,
worker
)
{
expect
(
err
).
to
.
be
.
null
expect
(
worker
).
to
.
exist
expect
(
worker
.
tasks
).
to
.
exist
expect
(
worker
.
tasks
[
0
].
title
).
to
.
equal
(
'homework'
)
done
()
})
})
it
(
'returns the associated worker via task.worker
'
,
function
(
done
)
{
it
(
'eager loads with non-id primary keys
'
,
function
(
done
)
{
var
self
=
this
this
.
Task
.
belongsTo
(
this
.
Worker
)
this
.
init
(
function
()
{
self
.
task
.
setWorker
(
self
.
worker
).
success
(
function
()
{
self
.
Task
.
find
({
where
:
{
title
:
'homework'
},
include
:
[
self
.
Worker
]
}).
complete
(
function
(
err
,
task
)
{
self
.
User
=
self
.
sequelize
.
define
(
'UserPKeagerone'
,
{
username
:
{
type
:
Sequelize
.
STRING
,
primaryKey
:
true
}
})
self
.
Group
=
self
.
sequelize
.
define
(
'GroupPKeagerone'
,
{
name
:
{
type
:
Sequelize
.
STRING
,
primaryKey
:
true
}
})
self
.
Group
.
hasMany
(
self
.
User
)
self
.
User
.
hasMany
(
self
.
Group
)
self
.
sequelize
.
sync
({
force
:
true
}).
success
(
function
()
{
self
.
User
.
create
({
username
:
'someone'
}).
success
(
function
(
someUser
)
{
self
.
Group
.
create
({
name
:
'people'
}).
success
(
function
(
someGroup
)
{
someUser
.
setGroupPKeagerones
([
someGroup
]).
complete
(
function
(
err
,
data
)
{
expect
(
err
).
to
.
be
.
null
expect
(
task
).
to
.
exist
expect
(
task
.
worker
).
to
.
exist
expect
(
task
.
worker
.
name
).
to
.
equal
(
'worker'
)
self
.
User
.
find
({
where
:
{
username
:
'someone'
},
include
:
[
self
.
Group
]
}).
complete
(
function
(
err
,
someUser
)
{
expect
(
err
).
to
.
be
.
null
expect
(
someUser
).
to
.
exist
expect
(
someUser
.
username
).
to
.
equal
(
'someone'
)
expect
(
someUser
.
groupPKeagerones
[
0
].
name
).
to
.
equal
(
'people'
)
done
()
})
})
})
})
})
})
})
it
(
'returns the private and public ip'
,
function
(
done
)
{
var
self
=
Object
.
create
(
this
)
self
.
Domain
=
self
.
sequelize
.
define
(
'Domain'
,
{
ip
:
Sequelize
.
STRING
})
self
.
Environment
=
self
.
sequelize
.
define
(
'Environment'
,
{
name
:
Sequelize
.
STRING
})
self
.
Environment
.
belongsTo
(
self
.
Domain
,
{
as
:
'PrivateDomain'
,
foreignKey
:
'privateDomainId'
})
.
belongsTo
(
self
.
Domain
,
{
as
:
'PublicDomain'
,
foreignKey
:
'publicDomainId'
})
self
.
Domain
.
sync
({
force
:
true
}).
success
(
function
()
{
self
.
Environment
.
sync
({
force
:
true
}).
success
(
function
()
{
self
.
Domain
.
create
({
ip
:
'192.168.0.1'
}).
success
(
function
(
privateIp
)
{
self
.
Domain
.
create
({
ip
:
'91.65.189.19'
}).
success
(
function
(
publicIp
)
{
self
.
Environment
.
create
({
name
:
'environment'
}).
success
(
function
(
env
)
{
env
.
setPrivateDomain
(
privateIp
).
success
(
function
()
{
env
.
setPublicDomain
(
publicIp
).
success
(
function
()
{
self
.
Environment
.
find
({
where
:
{
name
:
'environment'
},
include
:
[
{
daoFactory
:
self
.
Domain
,
as
:
'PrivateDomain'
},
{
daoFactory
:
self
.
Domain
,
as
:
'PublicDomain'
}
]
}).
complete
(
function
(
err
,
environment
)
{
expect
(
err
).
to
.
be
.
null
expect
(
environment
).
to
.
exist
expect
(
environment
.
privateDomain
).
to
.
exist
expect
(
environment
.
privateDomain
.
ip
).
to
.
equal
(
'192.168.0.1'
)
expect
(
environment
.
publicDomain
).
to
.
exist
expect
(
environment
.
publicDomain
.
ip
).
to
.
equal
(
'91.65.189.19'
)
describe
(
'hasMany with alias'
,
function
()
{
it
(
'throws an error if included DaoFactory is not referenced by alias'
,
function
(
done
)
{
var
self
=
this
expect
(
function
()
{
self
.
Worker
.
find
({
include
:
[
self
.
Task
]
})
}).
to
.
throw
(
Error
,
'Task is not associated to Worker!'
)
done
()
})
})
})
})
})
})
})
})
})
it
(
'eager loads with non-id primary keys'
,
function
(
done
)
{
describe
(
'alias'
,
function
()
{
beforeEach
(
function
(
done
)
{
var
self
=
this
self
.
User
=
self
.
sequelize
.
define
(
'UserPKeagerbelong'
,
{
username
:
{
type
:
Sequelize
.
STRING
,
primaryKey
:
true
}
})
self
.
Group
=
self
.
sequelize
.
define
(
'GroupPKeagerbelong'
,
{
name
:
{
type
:
Sequelize
.
STRING
,
primaryKey
:
true
}
})
self
.
User
.
belongsTo
(
self
.
Group
)
self
.
sequelize
.
sync
({
force
:
true
}).
success
(
function
()
{
self
.
User
.
create
({
username
:
'someone'
,
GroupPKeagerbelongId
:
'people'
}).
success
(
function
()
{
self
.
Group
.
create
({
name
:
'people'
}).
success
(
function
()
{
self
.
User
.
find
({
where
:
{
username
:
'someone'
},
include
:
[
self
.
Group
]
}).
complete
(
function
(
err
,
someUser
)
{
expect
(
err
).
to
.
be
.
null
expect
(
someUser
).
to
.
exist
expect
(
someUser
.
username
).
to
.
equal
(
'someone'
)
expect
(
someUser
.
groupPKeagerbelong
.
name
).
to
.
equal
(
'people'
)
this
.
Worker
.
hasMany
(
this
.
Task
,
{
as
:
'ToDos'
})
this
.
init
(
function
()
{
self
.
worker
.
setToDos
([
self
.
task
]).
success
(
function
()
{
done
()
})
})
})
})
})
it
(
'getting parent data in many to one relationship'
,
function
(
done
)
{
var
self
=
this
;
var
User
=
self
.
sequelize
.
define
(
'User'
,
{
id
:
{
type
:
Sequelize
.
INTEGER
,
autoIncrement
:
true
,
primaryKey
:
true
},
username
:
{
type
:
Sequelize
.
STRING
}
})
var
Message
=
self
.
sequelize
.
define
(
'Message'
,
{
id
:
{
type
:
Sequelize
.
INTEGER
,
autoIncrement
:
true
,
primaryKey
:
true
},
user_id
:
{
type
:
Sequelize
.
INTEGER
},
message
:
{
type
:
Sequelize
.
STRING
}
})
User
.
hasMany
(
Message
)
Message
.
belongsTo
(
User
,
{
foreignKey
:
'user_id'
})
Message
.
sync
({
force
:
true
}).
success
(
function
()
{
User
.
sync
({
force
:
true
}).
success
(
function
()
{
User
.
create
({
username
:
'test_testerson'
}).
success
(
function
(
user
)
{
Message
.
create
({
user_id
:
user
.
id
,
message
:
'hi there!'
}).
success
(
function
(
message
)
{
Message
.
create
({
user_id
:
user
.
id
,
message
:
'a second message'
}).
success
(
function
(
message
)
{
Message
.
findAll
({
where
:
{
user_id
:
user
.
id
},
attributes
:
[
'user_id'
,
'message'
],
include
:
[{
model
:
User
,
as
:
User
.
tableName
,
attributes
:
[
'username'
]
}]
}).
success
(
function
(
messages
)
{
expect
(
messages
.
length
).
to
.
equal
(
2
);
expect
(
messages
[
0
].
message
).
to
.
equal
(
'hi there!'
);
expect
(
messages
[
0
].
user
.
username
).
to
.
equal
(
'test_testerson'
);
expect
(
messages
[
1
].
message
).
to
.
equal
(
'a second message'
);
expect
(
messages
[
1
].
user
.
username
).
to
.
equal
(
'test_testerson'
);
it
(
'throws an error if alias is not associated'
,
function
(
done
)
{
var
self
=
this
expect
(
function
()
{
self
.
Worker
.
find
({
include
:
[
{
daoFactory
:
self
.
Task
,
as
:
'Work'
}
]
})
}).
to
.
throw
(
Error
,
'Task (Work) is not associated to Worker!'
)
done
()
})
})
it
(
'returns the associated task via worker.task'
,
function
(
done
)
{
this
.
Worker
.
find
({
where
:
{
name
:
'worker'
},
include
:
[
{
daoFactory
:
this
.
Task
,
as
:
'ToDos'
}
]
}).
complete
(
function
(
err
,
worker
)
{
expect
(
err
).
to
.
be
.
null
expect
(
worker
).
to
.
exist
expect
(
worker
.
toDos
).
to
.
exist
expect
(
worker
.
toDos
[
0
].
title
).
to
.
equal
(
'homework'
)
done
()
})
})
it
(
'returns the associated task via worker.task when daoFactory is aliased with model'
,
function
(
done
)
{
this
.
Worker
.
find
({
where
:
{
name
:
'worker'
},
include
:
[
{
model
:
this
.
Task
,
as
:
'ToDos'
}
]
}).
complete
(
function
(
err
,
worker
)
{
expect
(
worker
.
toDos
[
0
].
title
).
to
.
equal
(
'homework'
)
done
()
})
})
})
it
(
'allows mulitple assocations of the same model with different alias'
,
function
(
done
)
{
var
self
=
this
this
.
Worker
.
belongsTo
(
this
.
Task
,
{
as
:
'ToDo'
})
this
.
Worker
.
belongsTo
(
this
.
Task
,
{
as
:
'DoTo'
})
this
.
Worker
.
hasMany
(
this
.
Task
,
{
as
:
'DoTos'
})
this
.
init
(
function
()
{
self
.
Worker
.
find
({
include
:
[
{
model
:
self
.
Task
,
as
:
'ToDo
'
},
{
model
:
self
.
Task
,
as
:
'DoTo
'
}
{
model
:
self
.
Task
,
as
:
'ToDos
'
},
{
model
:
self
.
Task
,
as
:
'DoTos
'
}
]
}).
success
(
function
()
{
// Just being able to include both shows that this test works, so no assertions needed
...
...
@@ -2422,68 +2314,61 @@ describe(Support.getTestDialectTeaser("DAOFactory"), function () {
})
})
})
})
})
describe
(
'hasOne
'
,
function
()
{
describe
(
'queryOptions
'
,
function
()
{
beforeEach
(
function
(
done
)
{
var
self
=
this
this
.
Worker
.
hasOne
(
this
.
Task
)
this
.
init
(
function
()
{
self
.
worker
.
setTask
(
self
.
task
).
success
(
function
()
{
this
.
User
.
create
({
username
:
'barfooz'
}).
success
(
function
(
user
)
{
self
.
user
=
user
done
()
})
})
})
it
(
'throws an error if included DaoFactory is not associated'
,
function
(
done
)
{
it
(
"should return a DAO when queryOptions are not set"
,
function
(
done
)
{
var
self
=
this
expect
(
function
()
{
self
.
Task
.
find
({
include
:
[
self
.
Worker
]
})
}).
to
.
throw
(
Error
,
'Worker is not associated to Task!'
)
this
.
User
.
find
({
where
:
{
username
:
'barfooz'
}}).
done
(
function
(
err
,
user
)
{
expect
(
user
).
to
.
be
.
instanceOf
(
self
.
User
.
DAO
)
done
()
})
})
it
(
'returns the associated task via worker.task'
,
function
(
done
)
{
this
.
Worker
.
find
({
where
:
{
name
:
'worker'
},
include
:
[
this
.
Task
]
}).
complete
(
function
(
err
,
worker
)
{
expect
(
err
).
to
.
be
.
null
expect
(
worker
).
to
.
exist
expect
(
worker
.
task
).
to
.
exist
expect
(
worker
.
task
.
title
).
to
.
equal
(
'homework'
)
it
(
"should return a DAO when raw is false"
,
function
(
done
)
{
var
self
=
this
this
.
User
.
find
({
where
:
{
username
:
'barfooz'
}},
{
raw
:
false
}).
done
(
function
(
err
,
user
)
{
expect
(
user
).
to
.
be
.
instanceOf
(
self
.
User
.
DAO
)
done
()
})
})
it
(
'eager loads with non-id primary keys'
,
function
(
done
)
{
it
(
"should return raw data when raw is true"
,
function
(
done
)
{
var
self
=
this
self
.
User
=
self
.
sequelize
.
define
(
'UserPKeagerone'
,
{
username
:
{
type
:
Sequelize
.
STRING
,
primaryKey
:
true
}
this
.
User
.
find
({
where
:
{
username
:
'barfooz'
}},
{
raw
:
true
}).
done
(
function
(
err
,
user
)
{
expect
(
user
).
to
.
not
.
be
.
instanceOf
(
self
.
User
.
DAO
)
expect
(
user
).
to
.
be
.
instanceOf
(
Object
)
done
()
})
})
})
self
.
Group
=
self
.
sequelize
.
define
(
'GroupPKeagerone'
,
{
name
:
{
type
:
Sequelize
.
STRING
,
primaryKey
:
true
}
})
self
.
Group
.
hasOne
(
self
.
User
)
self
.
sequelize
.
sync
({
force
:
true
}).
success
(
function
()
{
self
.
User
.
create
({
username
:
'someone'
,
GroupPKeageroneId
:
'people'
}).
success
(
function
()
{
self
.
Group
.
create
({
name
:
'people'
}).
success
(
function
()
{
self
.
Group
.
find
({
where
:
{
name
:
'people'
},
include
:
[
self
.
User
]
}).
complete
(
function
(
err
,
someGroup
)
{
expect
(
err
).
to
.
be
.
null
expect
(
someGroup
).
to
.
exist
expect
(
someGroup
.
name
).
to
.
equal
(
'people'
)
expect
(
someGroup
.
userPKeagerone
.
username
).
to
.
equal
(
'someone'
)
describe
(
'findAll'
,
function
()
{
it
(
'supports transactions'
,
function
(
done
)
{
Support
.
prepareTransactionTest
(
dialect
,
this
.
sequelize
,
function
(
sequelize
)
{
var
User
=
sequelize
.
define
(
'User'
,
{
username
:
Sequelize
.
STRING
})
User
.
sync
({
force
:
true
}).
success
(
function
()
{
sequelize
.
transaction
(
function
(
t
)
{
User
.
create
({
username
:
'foo'
},
{
transaction
:
t
}).
success
(
function
()
{
User
.
findAll
({
username
:
'foo'
}).
success
(
function
(
users1
)
{
User
.
findAll
({
transaction
:
t
}).
success
(
function
(
users2
)
{
User
.
findAll
({
username
:
'foo'
},
{
transaction
:
t
}).
success
(
function
(
users3
)
{
expect
(
users1
.
length
).
to
.
equal
(
0
)
expect
(
users2
.
length
).
to
.
equal
(
1
)
expect
(
users3
.
length
).
to
.
equal
(
1
)
t
.
rollback
().
success
(
function
()
{
done
()
})
})
...
...
@@ -2491,283 +2376,400 @@ describe(Support.getTestDialectTeaser("DAOFactory"), function () {
})
})
})
})
})
})
describe
(
'hasOne with alias
'
,
function
()
{
it
(
'throws an error if included DaoFactory is not referenced by alias'
,
function
(
done
)
{
describe
(
'special where conditions/smartWhere object
'
,
function
()
{
beforeEach
(
function
(
done
)
{
var
self
=
this
expect
(
function
()
{
self
.
Worker
.
find
({
include
:
[
self
.
Task
]
})
}).
to
.
throw
(
Error
,
'Task is not associated to Worker!'
)
this
.
User
.
bulkCreate
([
{
username
:
'boo'
,
intVal
:
5
,
theDate
:
'2013-01-01 12:00'
},
{
username
:
'boo2'
,
intVal
:
10
,
theDate
:
'2013-01-10 12:00'
}
]).
success
(
function
(
user2
)
{
done
()
})
})
describe
(
'alias'
,
function
(
done
)
{
beforeEach
(
function
(
done
)
{
var
self
=
this
this
.
Worker
.
hasOne
(
this
.
Task
,
{
as
:
'ToDo'
})
this
.
init
(
function
()
{
self
.
worker
.
setToDo
(
self
.
task
).
success
(
function
()
{
it
(
'should be able to find rows where attribute is in a list of values'
,
function
(
done
)
{
this
.
User
.
findAll
({
where
:
{
username
:
[
'boo'
,
'boo2'
]
}
}).
success
(
function
(
users
){
expect
(
users
).
to
.
have
.
length
(
2
);
done
()
});
})
it
(
'should not break when trying to find rows using an array of primary keys'
,
function
(
done
)
{
this
.
User
.
findAll
({
where
:
{
id
:
[
1
,
2
,
3
]
}
}).
success
(
function
(
users
){
done
();
});
})
it
(
'should be able to find a row using like'
,
function
(
done
)
{
this
.
User
.
findAll
({
where
:
{
username
:
{
like
:
'%2'
}
}
}).
success
(
function
(
users
)
{
expect
(
users
).
to
.
be
.
an
.
instanceof
(
Array
)
expect
(
users
).
to
.
have
.
length
(
1
)
expect
(
users
[
0
].
username
).
to
.
equal
(
'boo2'
)
expect
(
users
[
0
].
intVal
).
to
.
equal
(
10
)
done
()
})
})
it
(
'throws an error if alias is not associated'
,
function
(
done
)
{
var
self
=
this
expect
(
function
()
{
self
.
Worker
.
find
({
include
:
[
{
daoFactory
:
self
.
Task
,
as
:
'Work'
}
]
})
}).
to
.
throw
(
Error
,
'Task (Work) is not associated to Worker!'
)
it
(
'should be able to find a row using not like'
,
function
(
done
)
{
this
.
User
.
findAll
({
where
:
{
username
:
{
nlike
:
'%2'
}
}
}).
success
(
function
(
users
)
{
expect
(
users
).
to
.
be
.
an
.
instanceof
(
Array
)
expect
(
users
).
to
.
have
.
length
(
1
)
expect
(
users
[
0
].
username
).
to
.
equal
(
'boo'
)
expect
(
users
[
0
].
intVal
).
to
.
equal
(
5
)
done
()
})
})
it
(
'returns the associated task via worker.task'
,
function
(
done
)
{
this
.
Worker
.
find
({
where
:
{
name
:
'worker'
},
include
:
[
{
daoFactory
:
this
.
Task
,
as
:
'ToDo'
}
]
}).
complete
(
function
(
err
,
worker
)
{
expect
(
err
).
to
.
be
.
null
expect
(
worker
).
to
.
exist
expect
(
worker
.
toDo
).
to
.
exist
expect
(
worker
.
toDo
.
title
).
to
.
equal
(
'homework'
)
it
(
'should be able to find a row between a certain date using the between shortcut'
,
function
(
done
)
{
this
.
User
.
findAll
({
where
:
{
theDate
:
{
'..'
:
[
'2013-01-02'
,
'2013-01-11'
]
}
}
}).
success
(
function
(
users
)
{
expect
(
users
[
0
].
username
).
to
.
equal
(
'boo2'
)
expect
(
users
[
0
].
intVal
).
to
.
equal
(
10
)
done
()
})
})
it
(
'returns the associated task via worker.task when daoFactory is aliased with model'
,
function
(
done
)
{
this
.
Worker
.
find
({
where
:
{
name
:
'worker'
},
include
:
[
{
model
:
this
.
Task
,
as
:
'ToDo'
}
]
}).
complete
(
function
(
err
,
worker
)
{
expect
(
worker
.
toDo
.
title
).
to
.
equal
(
'homework'
)
it
(
'should be able to find a row not between a certain integer using the not between shortcut'
,
function
(
done
)
{
this
.
User
.
findAll
({
where
:
{
intVal
:
{
'!..'
:
[
8
,
10
]
}
}
}).
success
(
function
(
users
)
{
expect
(
users
[
0
].
username
).
to
.
equal
(
'boo'
)
expect
(
users
[
0
].
intVal
).
to
.
equal
(
5
)
done
()
})
})
it
(
'allows mulitple assocations of the same model with different alias'
,
function
(
done
)
{
var
self
=
this
it
(
'should be able to handle false/true values just fine...'
,
function
(
done
)
{
var
User
=
this
.
User
,
escapeChar
=
(
dialect
===
"postgres"
)
?
'"'
:
'`'
this
.
Worker
.
hasOne
(
this
.
Task
,
{
as
:
'DoTo'
})
this
.
init
(
function
()
{
self
.
Worker
.
find
({
include
:
[
{
model
:
self
.
Task
,
as
:
'ToDo'
},
{
model
:
self
.
Task
,
as
:
'DoTo'
}
]
}).
success
(
function
()
{
// Just being able to include both shows that this test works, so no assertions needed
User
.
bulkCreate
([
{
username
:
'boo5'
,
aBool
:
false
},
{
username
:
'boo6'
,
aBool
:
true
}
]).
success
(
function
()
{
User
.
all
({
where
:
[
escapeChar
+
'aBool'
+
escapeChar
+
' = ?'
,
false
]}).
success
(
function
(
users
)
{
expect
(
users
).
to
.
have
.
length
(
1
)
expect
(
users
[
0
].
username
).
to
.
equal
(
'boo5'
)
User
.
all
({
where
:
[
escapeChar
+
'aBool'
+
escapeChar
+
' = ?'
,
true
]}).
success
(
function
(
_users
)
{
expect
(
_users
).
to
.
have
.
length
(
1
)
expect
(
_users
[
0
].
username
).
to
.
equal
(
'boo6'
)
done
()
})
})
})
})
it
(
'should be able to handle false/true values through associations as well...'
,
function
(
done
)
{
var
User
=
this
.
User
,
escapeChar
=
(
dialect
===
"postgres"
)
?
'"'
:
'`'
var
Passports
=
this
.
sequelize
.
define
(
'Passports'
,
{
isActive
:
Sequelize
.
BOOLEAN
})
describe
(
'hasMany'
,
function
()
{
beforeEach
(
function
(
done
)
{
var
self
=
this
this
.
Worker
.
hasMany
(
this
.
Task
)
this
.
init
(
function
()
{
self
.
worker
.
setTasks
([
self
.
task
]).
success
(
function
()
{
User
.
hasMany
(
Passports
)
Passports
.
belongsTo
(
User
)
User
.
sync
({
force
:
true
}).
success
(
function
()
{
Passports
.
sync
({
force
:
true
}).
success
(
function
()
{
User
.
bulkCreate
([
{
username
:
'boo5'
,
aBool
:
false
},
{
username
:
'boo6'
,
aBool
:
true
}
]).
success
(
function
()
{
Passports
.
bulkCreate
([
{
isActive
:
true
},
{
isActive
:
false
}
]).
success
(
function
()
{
User
.
find
(
1
).
success
(
function
(
user
)
{
Passports
.
find
(
1
).
success
(
function
(
passport
)
{
user
.
setPassports
([
passport
]).
success
(
function
()
{
User
.
find
(
2
).
success
(
function
(
_user
)
{
Passports
.
find
(
2
).
success
(
function
(
_passport
)
{
_user
.
setPassports
([
_passport
]).
success
(
function
()
{
_user
.
getPassports
({
where
:
[
escapeChar
+
'isActive'
+
escapeChar
+
' = ?'
,
false
]}).
success
(
function
(
theFalsePassport
)
{
user
.
getPassports
({
where
:
[
escapeChar
+
'isActive'
+
escapeChar
+
' = ?'
,
true
]}).
success
(
function
(
theTruePassport
)
{
expect
(
theFalsePassport
).
to
.
have
.
length
(
1
)
expect
(
theFalsePassport
[
0
].
isActive
).
to
.
be
.
false
expect
(
theTruePassport
).
to
.
have
.
length
(
1
)
expect
(
theTruePassport
[
0
].
isActive
).
to
.
be
.
true
done
()
})
})
})
it
(
'throws an error if included DaoFactory is not associated'
,
function
(
done
)
{
var
self
=
this
expect
(
function
()
{
self
.
Task
.
find
({
include
:
[
self
.
Worker
]
})
}).
to
.
throw
(
Error
,
'Worker is not associated to Task!'
)
done
()
})
it
(
'returns the associated tasks via worker.tasks'
,
function
(
done
)
{
this
.
Worker
.
find
({
where
:
{
name
:
'worker'
},
include
:
[
this
.
Task
]
}).
complete
(
function
(
err
,
worker
)
{
expect
(
err
).
to
.
be
.
null
expect
(
worker
).
to
.
exist
expect
(
worker
.
tasks
).
to
.
exist
expect
(
worker
.
tasks
[
0
].
title
).
to
.
equal
(
'homework'
)
done
()
})
})
})
})
})
})
})
})
})
it
(
'eager loads with non-id primary keys'
,
function
(
done
)
{
var
self
=
this
self
.
User
=
self
.
sequelize
.
define
(
'UserPKeagerone'
,
{
username
:
{
type
:
Sequelize
.
STRING
,
primaryKey
:
true
}
it
(
'should be able to return a record with primaryKey being null for new inserts'
,
function
(
done
)
{
var
Session
=
this
.
sequelize
.
define
(
'Session'
,
{
token
:
{
type
:
DataTypes
.
TEXT
,
allowNull
:
false
},
lastUpdate
:
{
type
:
DataTypes
.
DATE
,
allowNull
:
false
}
},
{
charset
:
'utf8'
,
collate
:
'utf8_general_ci'
,
omitNull
:
true
})
self
.
Group
=
self
.
sequelize
.
define
(
'GroupPKeagerone'
,
{
name
:
{
type
:
Sequelize
.
STRING
,
primaryKey
:
true
}
,
User
=
this
.
sequelize
.
define
(
'User'
,
{
name
:
{
type
:
DataTypes
.
STRING
,
allowNull
:
false
,
unique
:
true
},
password
:
{
type
:
DataTypes
.
STRING
,
allowNull
:
false
},
isAdmin
:
{
type
:
DataTypes
.
BOOLEAN
,
allowNull
:
false
,
defaultValue
:
false
}
},
{
charset
:
'utf8'
,
collate
:
'utf8_general_ci'
})
User
.
hasMany
(
Session
,
{
as
:
'Sessions'
})
Session
.
belongsTo
(
User
)
Session
.
sync
({
force
:
true
}).
success
(
function
()
{
User
.
sync
({
force
:
true
}).
success
(
function
()
{
User
.
create
({
name
:
'Name1'
,
password
:
'123'
,
isAdmin
:
false
}).
success
(
function
(
user
)
{
var
sess
=
Session
.
build
({
lastUpdate
:
new
Date
(),
token
:
'123'
})
self
.
Group
.
hasMany
(
self
.
User
)
self
.
User
.
hasMany
(
self
.
Group
)
self
.
sequelize
.
sync
({
force
:
true
}).
success
(
function
()
{
self
.
User
.
create
({
username
:
'someone'
}).
success
(
function
(
someUser
)
{
self
.
Group
.
create
({
name
:
'people'
}).
success
(
function
(
someGroup
)
{
someUser
.
setGroupPKeagerones
([
someGroup
]).
complete
(
function
(
err
,
data
)
{
expect
(
err
).
to
.
be
.
null
self
.
User
.
find
({
where
:
{
username
:
'someone'
},
include
:
[
self
.
Group
]
}).
complete
(
function
(
err
,
someUser
)
{
expect
(
err
).
to
.
be
.
null
expect
(
someUser
).
to
.
exist
expect
(
someUser
.
username
).
to
.
equal
(
'someone'
)
expect
(
someUser
.
groupPKeagerones
[
0
].
name
).
to
.
equal
(
'people'
)
user
.
addSession
(
sess
).
success
(
function
(
u
)
{
expect
(
u
.
token
).
to
.
equal
(
'123'
)
done
()
})
})
})
})
})
})
})
describe
(
'hasMany with alias'
,
function
()
{
it
(
'throws an error if included DaoFactory is not referenced by alias'
,
function
(
done
)
{
var
self
=
this
expect
(
function
()
{
self
.
Worker
.
find
({
include
:
[
self
.
Task
]
})
}).
to
.
throw
(
Error
,
'Task is not associated to Worker!'
)
it
(
'should be able to find a row between a certain date'
,
function
(
done
)
{
this
.
User
.
findAll
({
where
:
{
theDate
:
{
between
:
[
'2013-01-02'
,
'2013-01-11'
]
}
}
}).
success
(
function
(
users
)
{
expect
(
users
[
0
].
username
).
to
.
equal
(
'boo2'
)
expect
(
users
[
0
].
intVal
).
to
.
equal
(
10
)
done
()
})
})
describe
(
'alias'
,
function
()
{
beforeEach
(
function
(
done
)
{
var
self
=
this
this
.
Worker
.
hasMany
(
this
.
Task
,
{
as
:
'ToDos'
})
this
.
init
(
function
()
{
self
.
worker
.
setToDos
([
self
.
task
]).
success
(
function
()
{
it
(
'should be able to find a row between a certain date and an additional where clause'
,
function
(
done
)
{
this
.
User
.
findAll
({
where
:
{
theDate
:
{
between
:
[
'2013-01-02'
,
'2013-01-11'
]
},
intVal
:
10
}
}).
success
(
function
(
users
)
{
expect
(
users
[
0
].
username
).
to
.
equal
(
'boo2'
)
expect
(
users
[
0
].
intVal
).
to
.
equal
(
10
)
done
()
})
})
})
it
(
'throws an error if alias is not associated'
,
function
(
done
)
{
var
self
=
this
expect
(
function
()
{
self
.
Worker
.
find
({
include
:
[
{
daoFactory
:
self
.
Task
,
as
:
'Work'
}
]
})
}).
to
.
throw
(
Error
,
'Task (Work) is not associated to Worker!'
)
it
(
'should be able to find a row not between a certain integer'
,
function
(
done
)
{
this
.
User
.
findAll
({
where
:
{
intVal
:
{
nbetween
:
[
8
,
10
]
}
}
}).
success
(
function
(
users
)
{
expect
(
users
[
0
].
username
).
to
.
equal
(
'boo'
)
expect
(
users
[
0
].
intVal
).
to
.
equal
(
5
)
done
()
})
})
it
(
'returns the associated task via worker.task'
,
function
(
done
)
{
this
.
Worker
.
find
({
where
:
{
name
:
'worker'
},
include
:
[
{
daoFactory
:
this
.
Task
,
as
:
'ToDos'
}
]
}).
complete
(
function
(
err
,
worker
)
{
expect
(
err
).
to
.
be
.
null
expect
(
worker
).
to
.
exist
expect
(
worker
.
toDos
).
to
.
exist
expect
(
worker
.
toDos
[
0
].
title
).
to
.
equal
(
'homework'
)
it
(
'should be able to find a row using not between and between logic'
,
function
(
done
)
{
this
.
User
.
findAll
({
where
:
{
theDate
:
{
between
:
[
'2012-12-10'
,
'2013-01-02'
],
nbetween
:
[
'2013-01-04'
,
'2013-01-20'
]
}
}
}).
success
(
function
(
users
)
{
expect
(
users
[
0
].
username
).
to
.
equal
(
'boo'
)
expect
(
users
[
0
].
intVal
).
to
.
equal
(
5
)
done
()
})
})
it
(
'returns the associated task via worker.task when daoFactory is aliased with model'
,
function
(
done
)
{
this
.
Worker
.
find
({
where
:
{
name
:
'worker'
},
include
:
[
{
model
:
this
.
Task
,
as
:
'ToDos'
}
]
}).
complete
(
function
(
err
,
worker
)
{
expect
(
worker
.
toDos
[
0
].
title
).
to
.
equal
(
'homework'
)
it
(
'should be able to find a row using not between and between logic with dates'
,
function
(
done
)
{
this
.
User
.
findAll
({
where
:
{
theDate
:
{
between
:
[
new
Date
(
'2012-12-10'
),
new
Date
(
'2013-01-02'
)],
nbetween
:
[
new
Date
(
'2013-01-04'
),
new
Date
(
'2013-01-20'
)]
}
}
}).
success
(
function
(
users
)
{
expect
(
users
[
0
].
username
).
to
.
equal
(
'boo'
)
expect
(
users
[
0
].
intVal
).
to
.
equal
(
5
)
done
()
})
})
it
(
'allows mulitple assocations of the same model with different alias'
,
function
(
done
)
{
var
self
=
this
this
.
Worker
.
hasMany
(
this
.
Task
,
{
as
:
'DoTos'
})
this
.
init
(
function
()
{
self
.
Worker
.
find
({
include
:
[
{
model
:
self
.
Task
,
as
:
'ToDos'
},
{
model
:
self
.
Task
,
as
:
'DoTos'
}
]
}).
success
(
function
()
{
// Just being able to include both shows that this test works, so no assertions needed
it
(
'should be able to find a row using greater than or equal to logic with dates'
,
function
(
done
)
{
this
.
User
.
findAll
({
where
:
{
theDate
:
{
gte
:
new
Date
(
'2013-01-09'
)
}
}
}).
success
(
function
(
users
)
{
expect
(
users
[
0
].
username
).
to
.
equal
(
'boo2'
)
expect
(
users
[
0
].
intVal
).
to
.
equal
(
10
)
done
()
})
})
})
})
})
})
describe
(
'queryOptions'
,
function
()
{
beforeEach
(
function
(
done
)
{
var
self
=
this
this
.
User
.
create
({
username
:
'barfooz'
}).
success
(
function
(
user
)
{
self
.
user
=
user
it
(
'should be able to find a row using greater than or equal to'
,
function
(
done
)
{
this
.
User
.
find
({
where
:
{
intVal
:
{
gte
:
6
}
}
}).
success
(
function
(
user
)
{
expect
(
user
.
username
).
to
.
equal
(
'boo2'
)
expect
(
user
.
intVal
).
to
.
equal
(
10
)
done
()
})
})
it
(
"should return a DAO when queryOptions are not set"
,
function
(
done
)
{
var
self
=
this
this
.
User
.
find
({
where
:
{
username
:
'barfooz'
}}).
done
(
function
(
err
,
user
)
{
expect
(
user
).
to
.
be
.
instanceOf
(
self
.
User
.
DAO
)
it
(
'should be able to find a row using greater than'
,
function
(
done
)
{
this
.
User
.
find
({
where
:
{
intVal
:
{
gt
:
5
}
}
}).
success
(
function
(
user
)
{
expect
(
user
.
username
).
to
.
equal
(
'boo2'
)
expect
(
user
.
intVal
).
to
.
equal
(
10
)
done
()
})
})
it
(
"should return a DAO when raw is false"
,
function
(
done
)
{
var
self
=
this
this
.
User
.
find
({
where
:
{
username
:
'barfooz'
}},
{
raw
:
false
}).
done
(
function
(
err
,
user
)
{
expect
(
user
).
to
.
be
.
instanceOf
(
self
.
User
.
DAO
)
it
(
'should be able to find a row using lesser than or equal to'
,
function
(
done
)
{
this
.
User
.
find
({
where
:
{
intVal
:
{
lte
:
5
}
}
}).
success
(
function
(
user
)
{
expect
(
user
.
username
).
to
.
equal
(
'boo'
)
expect
(
user
.
intVal
).
to
.
equal
(
5
)
done
()
})
})
it
(
"should return raw data when raw is true"
,
function
(
done
)
{
var
self
=
this
this
.
User
.
find
({
where
:
{
username
:
'barfooz'
}},
{
raw
:
true
}).
done
(
function
(
err
,
user
)
{
expect
(
user
).
to
.
not
.
be
.
instanceOf
(
self
.
User
.
DAO
)
expect
(
user
).
to
.
be
.
instanceOf
(
Object
)
it
(
'should be able to find a row using lesser than'
,
function
(
done
)
{
this
.
User
.
find
({
where
:
{
intVal
:
{
lt
:
6
}
}
}).
success
(
function
(
user
)
{
expect
(
user
.
username
).
to
.
equal
(
'boo'
)
expect
(
user
.
intVal
).
to
.
equal
(
5
)
done
()
})
})
})
})
describe
(
'findAll'
,
function
()
{
it
(
'supports transactions'
,
function
(
done
)
{
Support
.
prepareTransactionTest
(
dialect
,
this
.
sequelize
,
function
(
sequelize
)
{
var
User
=
sequelize
.
define
(
'User'
,
{
username
:
Sequelize
.
STRING
})
User
.
sync
({
force
:
true
}).
success
(
function
()
{
sequelize
.
transaction
(
function
(
t
)
{
User
.
create
({
username
:
'foo'
},
{
transaction
:
t
}).
success
(
function
()
{
User
.
findAll
({
username
:
'foo'
}).
success
(
function
(
users1
)
{
User
.
findAll
({
transaction
:
t
}).
success
(
function
(
users2
)
{
User
.
findAll
({
username
:
'foo'
},
{
transaction
:
t
}).
success
(
function
(
users3
)
{
expect
(
users1
.
length
).
to
.
equal
(
0
)
expect
(
users2
.
length
).
to
.
equal
(
1
)
expect
(
users3
.
length
).
to
.
equal
(
1
)
t
.
rollback
().
success
(
function
()
{
it
(
'should have no problem finding a row using lesser and greater than'
,
function
(
done
)
{
this
.
User
.
findAll
({
where
:
{
intVal
:
{
lt
:
6
,
gt
:
4
}
}
}).
success
(
function
(
users
)
{
expect
(
users
[
0
].
username
).
to
.
equal
(
'boo'
)
expect
(
users
[
0
].
intVal
).
to
.
equal
(
5
)
done
()
})
})
it
(
'should be able to find a row using not equal to logic'
,
function
(
done
)
{
this
.
User
.
find
({
where
:
{
intVal
:
{
ne
:
10
}
}
}).
success
(
function
(
user
)
{
expect
(
user
.
username
).
to
.
equal
(
'boo'
)
expect
(
user
.
intVal
).
to
.
equal
(
5
)
done
()
})
})
it
(
'should be able to find multiple users with any of the special where logic properties'
,
function
(
done
)
{
this
.
User
.
findAll
({
where
:
{
intVal
:
{
lte
:
10
}
}
}).
success
(
function
(
users
)
{
expect
(
users
[
0
].
username
).
to
.
equal
(
'boo'
)
expect
(
users
[
0
].
intVal
).
to
.
equal
(
5
)
expect
(
users
[
1
].
username
).
to
.
equal
(
'boo2'
)
expect
(
users
[
1
].
intVal
).
to
.
equal
(
10
)
done
()
})
})
})
})
})
describe
(
'eager loading'
,
function
()
{
describe
(
'belongsTo'
,
function
()
{
...
...
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment