@@ -159,7 +159,7 @@ func (suite *DbTestSuite) TestGet() {
159159 assert .Equal (suite .T (), "gotten-value" , object .Value )
160160}
161161
162- func (suite * DbTestSuite ) TestQuery () {
162+ func (suite * DbTestSuite ) TestQueryAll () {
163163 os .Setenv (constants .DB_URI , os .Getenv ("TEST_DB_URI" ))
164164 logging .Init ()
165165 SetupDatabase ()
@@ -193,6 +193,193 @@ func (suite *DbTestSuite) TestQuery() {
193193 assert .Equal (suite .T (), "" , model2 .Value )
194194}
195195
196+ func (suite * DbTestSuite ) TestQueryNone () {
197+ os .Setenv (constants .DB_URI , os .Getenv ("TEST_DB_URI" ))
198+ logging .Init ()
199+ SetupDatabase ()
200+
201+ // insert docs
202+ for i := 0 ; i < 10 ; i ++ {
203+ doc := DBObject {
204+ Key : fmt .Sprintf ("query-key-%d" , i ),
205+ Value : fmt .Sprintf ("query-value-%d" , i ),
206+ }
207+ _ , err := Insert [DBObject ](os .Getenv ("TEST_COLLECTION" ), doc )
208+ assert .NoError (suite .T (), err )
209+ }
210+
211+ filter := bson.D {}
212+ sort := bson.D {}
213+ proj := bson.D {}
214+ var start int64 = 1
215+ limit := 2
216+ models , err := Query [DBObject ](os .Getenv ("TEST_COLLECTION" ), filter , sort , proj , start , limit )
217+ assert .NotNil (suite .T (), models )
218+ assert .Nil (suite .T (), err )
219+ assert .Equal (suite .T (), limit , len (models ))
220+
221+ model1 := models [0 ]
222+ assert .Equal (suite .T (), "query-key-1" , model1 .Key )
223+ assert .Equal (suite .T (), "" , model1 .Value )
224+
225+ model2 := models [1 ]
226+ assert .Equal (suite .T (), "query-key-2" , model2 .Key )
227+ assert .Equal (suite .T (), "" , model2 .Value )
228+ }
229+
230+ func (suite * DbTestSuite ) TestQueryLimit0 () {
231+ os .Setenv (constants .DB_URI , os .Getenv ("TEST_DB_URI" ))
232+ logging .Init ()
233+ SetupDatabase ()
234+
235+ // insert docs
236+ for i := 0 ; i < 10 ; i ++ {
237+ doc := DBObject {
238+ Key : fmt .Sprintf ("query-key-%d" , i ),
239+ Value : fmt .Sprintf ("query-value-%d" , i ),
240+ }
241+ _ , err := Insert [DBObject ](os .Getenv ("TEST_COLLECTION" ), doc )
242+ assert .NoError (suite .T (), err )
243+ }
244+
245+ filter := bson.D {}
246+ sort := bson.D {}
247+ proj := bson.D {}
248+ var start int64 = 1
249+ limit := 0
250+ models , err := Query [DBObject ](os .Getenv ("TEST_COLLECTION" ), filter , sort , proj , start , limit )
251+ assert .NotNil (suite .T (), models )
252+ assert .Nil (suite .T (), err )
253+ assert .Equal (suite .T (), limit , len (models ))
254+ }
255+
256+ func (suite * DbTestSuite ) TestQuerySorted () {
257+ os .Setenv (constants .DB_URI , os .Getenv ("TEST_DB_URI" ))
258+ logging .Init ()
259+ SetupDatabase ()
260+
261+ // insert docs
262+ for i := 0 ; i < 10 ; i ++ {
263+ doc := DBObject {
264+ Key : fmt .Sprintf ("query-key-%d" , i ),
265+ Value : fmt .Sprintf ("query-value-%d" , i ),
266+ }
267+ _ , err := Insert [DBObject ](os .Getenv ("TEST_COLLECTION" ), doc )
268+ assert .NoError (suite .T (), err )
269+ }
270+
271+ filter := bson.D {}
272+ sort := bson.D {{Key : "key" , Value : 1 }} // Sort by key ascending
273+ proj := bson.D {}
274+ var start int64 = 1
275+ limit := 2
276+ models , err := Query [DBObject ](os .Getenv ("TEST_COLLECTION" ), filter , sort , proj , start , limit )
277+ assert .NotNil (suite .T (), models )
278+ assert .Nil (suite .T (), err )
279+ assert .Equal (suite .T (), limit , len (models ))
280+
281+ model1 := models [0 ]
282+ assert .Equal (suite .T (), "query-key-1" , model1 .Key )
283+ assert .Equal (suite .T (), "" , model1 .Value )
284+
285+ model2 := models [1 ]
286+ assert .Equal (suite .T (), "query-key-2" , model2 .Key )
287+ assert .Equal (suite .T (), "" , model2 .Value )
288+ }
289+
290+ func (suite * DbTestSuite ) TestQueryFiltered () {
291+ os .Setenv (constants .DB_URI , os .Getenv ("TEST_DB_URI" ))
292+ logging .Init ()
293+ SetupDatabase ()
294+
295+ // insert docs
296+ for i := 0 ; i < 10 ; i ++ {
297+ doc := DBObject {
298+ Key : fmt .Sprintf ("query-key-%d" , i ),
299+ Value : fmt .Sprintf ("query-value-%d" , i ),
300+ }
301+ _ , err := Insert [DBObject ](os .Getenv ("TEST_COLLECTION" ), doc )
302+ assert .NoError (suite .T (), err )
303+ }
304+
305+ filter := bson.D {{Key : "key" , Value : bson.D {{Key : "$regex" , Value : "^query-key-" }}}}
306+ sort := bson.D {}
307+ proj := bson.D {}
308+ var start int64 = 1
309+ limit := 2
310+ models , err := Query [DBObject ](os .Getenv ("TEST_COLLECTION" ), filter , sort , proj , start , limit )
311+ assert .NotNil (suite .T (), models )
312+ assert .Nil (suite .T (), err )
313+ assert .Equal (suite .T (), limit , len (models ))
314+
315+ model1 := models [0 ]
316+ assert .Equal (suite .T (), "query-key-1" , model1 .Key )
317+ assert .Equal (suite .T (), "" , model1 .Value )
318+
319+ model2 := models [1 ]
320+ assert .Equal (suite .T (), "query-key-2" , model2 .Key )
321+ assert .Equal (suite .T (), "" , model2 .Value )
322+ }
323+
324+ func (suite * DbTestSuite ) TestQueryProjected () {
325+ os .Setenv (constants .DB_URI , os .Getenv ("TEST_DB_URI" ))
326+ logging .Init ()
327+ SetupDatabase ()
328+
329+ // insert docs
330+ for i := 0 ; i < 10 ; i ++ {
331+ doc := DBObject {
332+ Key : fmt .Sprintf ("query-key-%d" , i ),
333+ Value : fmt .Sprintf ("query-value-%d" , i ),
334+ }
335+ _ , err := Insert [DBObject ](os .Getenv ("TEST_COLLECTION" ), doc )
336+ assert .NoError (suite .T (), err )
337+ }
338+
339+ filter := bson.D {}
340+ sort := bson.D {}
341+ proj := bson.D {{Key : "key" , Value : 1 }}
342+ var start int64 = 1
343+ limit := 2
344+ models , err := Query [DBObject ](os .Getenv ("TEST_COLLECTION" ), filter , sort , proj , start , limit )
345+ assert .NotNil (suite .T (), models )
346+ assert .Nil (suite .T (), err )
347+ assert .Equal (suite .T (), limit , len (models ))
348+
349+ model1 := models [0 ]
350+ assert .Equal (suite .T (), "query-key-1" , model1 .Key )
351+ assert .Equal (suite .T (), "" , model1 .Value )
352+
353+ model2 := models [1 ]
354+ assert .Equal (suite .T (), "query-key-2" , model2 .Key )
355+ assert .Equal (suite .T (), "" , model2 .Value )
356+ }
357+
358+ func (suite * DbTestSuite ) TestQueryInvalidStart () {
359+ os .Setenv (constants .DB_URI , os .Getenv ("TEST_DB_URI" ))
360+ logging .Init ()
361+ SetupDatabase ()
362+
363+ // insert docs
364+ for i := 0 ; i < 10 ; i ++ {
365+ doc := DBObject {
366+ Key : fmt .Sprintf ("query-key-%d" , i ),
367+ Value : fmt .Sprintf ("query-value-%d" , i ),
368+ }
369+ _ , err := Insert [DBObject ](os .Getenv ("TEST_COLLECTION" ), doc )
370+ assert .NoError (suite .T (), err )
371+ }
372+
373+ filter := bson.D {}
374+ sort := bson.D {}
375+ proj := bson.D {}
376+ var start int64 = - 1
377+ limit := 2
378+ models , err := Query [DBObject ](os .Getenv ("TEST_COLLECTION" ), filter , sort , proj , start , limit )
379+ assert .NotNil (suite .T (), err )
380+ assert .Nil (suite .T (), models )
381+ }
382+
196383func TestDbTestSuite (t * testing.T ) {
197384 suite .Run (t , new (DbTestSuite ))
198385}
0 commit comments