1
+ 'use strict' ;
2
+
1
3
describe ( 'DSSqlAdapter#findAll' , function ( ) {
2
4
it ( 'should not return relation columns on parent' , function * ( ) {
3
- var profile1 = yield adapter . create ( Profile , { email :
'[email protected] ' } ) ;
4
- var user1 = yield adapter . create ( User , { name : 'John' , profileId : profile1 . id } ) ;
5
+ let profile1 = yield adapter . create ( Profile , { email :
'[email protected] ' } ) ;
6
+ let user1 = yield adapter . create ( User , { name : 'John' , profileId : profile1 . id } ) ;
5
7
6
- var users = yield adapter . findAll ( User , { 'profile.email' :
'[email protected] ' } ) ;
8
+ let users = yield adapter . findAll ( User , { 'profile.email' :
'[email protected] ' } ) ;
7
9
assert . equal ( users . length , 1 ) ;
8
10
assert . equal ( users [ 0 ] . profileId , profile1 . id ) ;
9
11
assert . isUndefined ( users [ 0 ] . email ) ;
10
12
} ) ;
11
13
12
14
it ( 'should filter when relations have same column if column is qualified' , function * ( ) {
13
- var profile1 = yield adapter . create ( Profile , { email :
'[email protected] ' } ) ;
14
- var user1 = yield adapter . create ( User , { name : 'John' , profileId : profile1 . id } ) ;
15
+ let profile1 = yield adapter . create ( Profile , { email :
'[email protected] ' } ) ;
16
+ let user1 = yield adapter . create ( User , { name : 'John' , profileId : profile1 . id } ) ;
15
17
16
18
// `id` column must be qualified with `user.`
17
- var users = yield adapter . findAll ( User , { 'user.id' :
user1 . id , 'profile.email' :
'[email protected] ' } ) ;
19
+ let users = yield adapter . findAll ( User , { 'user.id' :
user1 . id , 'profile.email' :
'[email protected] ' } ) ;
18
20
assert . equal ( users . length , 1 ) ;
19
21
assert . equal ( users [ 0 ] . profileId , profile1 . id ) ;
20
22
} ) ;
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