1+ 'use strict' ;
2+
13describe ( 'DSSqlAdapter#findAll' , function ( ) {
24 it ( 'should not return relation columns on parent' , function * ( ) {
3- var profile1 = yield adapter . create ( Profile , { email : 'foo@test.com' } ) ;
4- var user1 = yield adapter . create ( User , { name : 'John' , profileId : profile1 . id } ) ;
5+ let profile1 = yield adapter . create ( Profile , { email : 'foo@test.com' } ) ;
6+ let user1 = yield adapter . create ( User , { name : 'John' , profileId : profile1 . id } ) ;
57
6- var users = yield adapter . findAll ( User , { 'profile.email' : 'foo@test.com' } ) ;
8+ let users = yield adapter . findAll ( User , { 'profile.email' : 'foo@test.com' } ) ;
79 assert . equal ( users . length , 1 ) ;
810 assert . equal ( users [ 0 ] . profileId , profile1 . id ) ;
911 assert . isUndefined ( users [ 0 ] . email ) ;
1012 } ) ;
1113
1214 it ( 'should filter when relations have same column if column is qualified' , function * ( ) {
13- var profile1 = yield adapter . create ( Profile , { email : 'foo@test.com' } ) ;
14- var user1 = yield adapter . create ( User , { name : 'John' , profileId : profile1 . id } ) ;
15+ let profile1 = yield adapter . create ( Profile , { email : 'foo@test.com' } ) ;
16+ let user1 = yield adapter . create ( User , { name : 'John' , profileId : profile1 . id } ) ;
1517
1618 // `id` column must be qualified with `user.`
17- var users = yield adapter . findAll ( User , { 'user.id' : user1 . id , 'profile.email' : 'foo@test.com' } ) ;
19+ let users = yield adapter . findAll ( User , { 'user.id' : user1 . id , 'profile.email' : 'foo@test.com' } ) ;
1820 assert . equal ( users . length , 1 ) ;
1921 assert . equal ( users [ 0 ] . profileId , profile1 . id ) ;
2022 } ) ;
21- } ) ;
23+
24+ describe ( 'near' , function ( ) {
25+ beforeEach ( function * ( ) {
26+ this . googleAddress = yield adapter . create ( Address , { name : 'Google' , latitude : 37.4219999 , longitude : - 122.0862515 } ) ;
27+ this . appleAddress = yield adapter . create ( Address , { name : 'Apple' , latitude : 37.331852 , longitude : - 122.029599 } ) ;
28+ this . microsoftAddress = yield adapter . create ( Address , { name : 'Microsoft' , latitude : 47.639649 , longitude : - 122.128255 } ) ;
29+ this . amazonAddress = yield adapter . create ( Address , { name : 'Amazon' , latitude : 47.622915 , longitude : - 122.336384 } ) ;
30+ } )
31+
32+ it ( 'should filter using "near"' , function * ( ) {
33+ let addresses = yield adapter . findAll ( Address , {
34+ where : {
35+ 'latitude,longitude' : {
36+ 'near' : {
37+ center : [ 37.41 , - 122.06 ] ,
38+ radius : 10
39+ }
40+ }
41+ }
42+ } ) ;
43+ assert . equal ( addresses . length , 2 ) ;
44+ assert . equal ( addresses [ 0 ] . name , 'Google' ) ;
45+ assert . equal ( addresses [ 1 ] . name , 'Apple' ) ;
46+ } )
47+
48+ it ( 'should not contain distance column by default' , function * ( ) {
49+ let addresses = yield adapter . findAll ( Address , {
50+ where : {
51+ 'latitude,longitude' : {
52+ 'near' : {
53+ center : [ 37.41 , - 122.06 ] ,
54+ radius : 5
55+ }
56+ }
57+ }
58+ } ) ;
59+ assert . equal ( addresses . length , 1 ) ;
60+ assert . equal ( addresses [ 0 ] . name , 'Google' ) ;
61+ assert . equal ( addresses [ 0 ] . distance , undefined ) ;
62+ } )
63+
64+ it ( 'should contain distance column if "calculateDistance" is truthy' , function * ( ) {
65+ let addresses = yield adapter . findAll ( Address , {
66+ where : {
67+ 'latitude,longitude' : {
68+ 'near' : {
69+ center : [ 37.41 , - 122.06 ] ,
70+ radius : 10 ,
71+ calculateDistance : true
72+ }
73+ }
74+ }
75+ } ) ;
76+ assert . equal ( addresses . length , 2 ) ;
77+
78+ assert . equal ( addresses [ 0 ] . name , 'Google' ) ;
79+ assert . isNotNull ( addresses [ 0 ] . distance ) ;
80+ assert . equal ( Math . round ( addresses [ 0 ] . distance ) , 2 ) ;
81+
82+ assert . equal ( addresses [ 1 ] . name , 'Apple' ) ;
83+ assert . isNotNull ( addresses [ 1 ] . distance ) ;
84+ assert . equal ( Math . round ( addresses [ 1 ] . distance ) , 6 ) ;
85+ } )
86+
87+ it ( 'should contain custom distance column if "calculateDistance" is string' , function * ( ) {
88+ let addresses = yield adapter . findAll ( Address , {
89+ where : {
90+ 'latitude,longitude' : {
91+ 'near' : {
92+ center : [ 37.41 , - 122.06 ] ,
93+ radius : 10 ,
94+ calculateDistance : 'howfar'
95+ }
96+ }
97+ }
98+ } ) ;
99+ assert . equal ( addresses . length , 2 ) ;
100+
101+ assert . equal ( addresses [ 0 ] . name , 'Google' ) ;
102+ assert . equal ( addresses [ 0 ] . distance , undefined ) ;
103+ assert . isNotNull ( addresses [ 0 ] . howfar ) ;
104+ assert . equal ( Math . round ( addresses [ 0 ] . howfar ) , 2 ) ;
105+
106+ assert . equal ( addresses [ 1 ] . name , 'Apple' ) ;
107+ assert . equal ( addresses [ 1 ] . distance , undefined ) ;
108+ assert . isNotNull ( addresses [ 1 ] . howfar ) ;
109+ assert . equal ( Math . round ( addresses [ 1 ] . howfar ) , 6 ) ;
110+ } )
111+
112+ it ( 'should use kilometers instead of miles if radius ends with "k"' , function * ( ) {
113+ let addresses = yield adapter . findAll ( Address , {
114+ where : {
115+ 'latitude,longitude' : {
116+ 'near' : {
117+ center : [ 37.41 , - 122.06 ] ,
118+ radius : '10k' ,
119+ calculateDistance : true
120+ }
121+ }
122+ }
123+ } ) ;
124+ assert . equal ( addresses . length , 2 ) ;
125+
126+ assert . equal ( addresses [ 0 ] . name , 'Google' ) ;
127+ assert . isNotNull ( addresses [ 0 ] . distance ) ;
128+ assert . equal ( Math . round ( addresses [ 0 ] . distance ) , 3 ) ; // in kilometers
129+
130+ assert . equal ( addresses [ 1 ] . name , 'Apple' ) ;
131+ assert . isNotNull ( addresses [ 1 ] . distance ) ;
132+ assert . equal ( Math . round ( addresses [ 1 ] . distance ) , 9 ) ; // in kilometers
133+ } )
134+
135+ it ( 'should filter through relationships' , function * ( ) {
136+ let user1 = yield adapter . create ( User , { name : 'Larry Page' , addressId : this . googleAddress . id } ) ;
137+ let user2 = yield adapter . create ( User , { name : 'Tim Cook' , addressId : this . appleAddress . id } ) ;
138+
139+ let users = yield adapter . findAll ( User , {
140+ where : {
141+ 'address.latitude, address.longitude' : {
142+ 'near' : {
143+ center : [ 37.41 , - 122.06 ] ,
144+ radius : 10 ,
145+ calculateDistance : 'howfar'
146+ }
147+ }
148+ }
149+ } ) ;
150+ assert . equal ( users . length , 2 ) ;
151+ assert . equal ( users [ 0 ] . name , 'Larry Page' ) ;
152+ assert . equal ( users [ 1 ] . name , 'Tim Cook' ) ;
153+ } )
154+
155+ it ( 'should filter through multiple hasOne/belongsTo relations' , function * ( ) {
156+ let user1 = yield adapter . create ( User , { name : 'Larry Page' , addressId : this . googleAddress . id } ) ;
157+ var post1 = yield adapter . create ( Post , { content : 'foo' , userId : user1 . id } )
158+ yield adapter . create ( Comment , { content : 'test1' , postId : post1 . id , userId : post1 . userId } )
159+
160+ var user2 = yield adapter . create ( User , { name : 'Tim Cook' , addressId : this . appleAddress . id } )
161+ var post2 = yield adapter . create ( Post , { content : 'bar' , userId : user2 . id } )
162+ yield adapter . create ( Comment , { content : 'test2' , postId : post2 . id , userId : post2 . userId } )
163+
164+ let comments = yield adapter . findAll ( Comment , {
165+ where : {
166+ 'user.address.latitude, user.address.longitude' : {
167+ 'near' : {
168+ center : [ 37.41 , - 122.06 ] ,
169+ radius : 5
170+ }
171+ }
172+ }
173+ } ) ;
174+
175+ assert . equal ( comments . length , 1 )
176+ assert . equal ( comments [ 0 ] . userId , user1 . id )
177+ assert . equal ( comments [ 0 ] . content , 'test1' )
178+ } )
179+
180+ } )
181+ } ) ;
0 commit comments