@@ -12,6 +12,7 @@ import (
1212 "io"
1313 "net/http"
1414 "net/http/httptest"
15+ neturl "net/url"
1516 "strconv"
1617 "testing"
1718 "time"
@@ -68,10 +69,16 @@ func TestPackageNuGet(t *testing.T) {
6869 Content string `xml:",innerxml"`
6970 }
7071
72+ type FeedEntryLink struct {
73+ Rel string `xml:"rel,attr"`
74+ Href string `xml:"href,attr"`
75+ }
76+
7177 type FeedResponse struct {
72- XMLName xml.Name `xml:"feed"`
73- Entries []* FeedEntry `xml:"entry"`
74- Count int64 `xml:"count"`
78+ XMLName xml.Name `xml:"feed"`
79+ Links []FeedEntryLink `xml:"link"`
80+ Entries []* FeedEntry `xml:"entry"`
81+ Count int64 `xml:"count"`
7582 }
7683
7784 user := unittest .AssertExistsAndLoadBean (t , & user_model.User {ID : 2 })
@@ -373,6 +380,25 @@ AAAjQmxvYgAAAGm7ENm9SGxMtAFVvPUsPJTF6PbtAAAAAFcVogEJAAAAAQAAAA==`)
373380 })
374381 })
375382
383+ containsOneNextLink := func (t * testing.T , links []FeedEntryLink ) func () bool {
384+ return func () bool {
385+ found := 0
386+ for _ , l := range links {
387+ if l .Rel == "next" {
388+ found ++
389+ u , err := neturl .Parse (l .Href )
390+ assert .NoError (t , err )
391+ q := u .Query ()
392+ assert .Contains (t , q , "$skip" )
393+ assert .Contains (t , q , "$top" )
394+ assert .Equal (t , "1" , q .Get ("$skip" ))
395+ assert .Equal (t , "1" , q .Get ("$top" ))
396+ }
397+ }
398+ return found == 1
399+ }
400+ }
401+
376402 t .Run ("SearchService" , func (t * testing.T ) {
377403 cases := []struct {
378404 Query string
@@ -393,7 +419,7 @@ AAAjQmxvYgAAAGm7ENm9SGxMtAFVvPUsPJTF6PbtAAAAAFcVogEJAAAAAQAAAA==`)
393419 defer tests .PrintCurrentTest (t )()
394420
395421 for i , c := range cases {
396- req := NewRequest (t , "GET" , fmt .Sprintf ("%s/Search()?searchTerm='%s'&skip=%d&take =%d" , url , c .Query , c .Skip , c .Take ))
422+ req := NewRequest (t , "GET" , fmt .Sprintf ("%s/Search()?searchTerm='%s'&$ skip=%d&$top =%d" , url , c .Query , c .Skip , c .Take ))
397423 req = AddBasicAuthHeader (req , user .Name )
398424 resp := MakeRequest (t , req , http .StatusOK )
399425
@@ -403,7 +429,7 @@ AAAjQmxvYgAAAGm7ENm9SGxMtAFVvPUsPJTF6PbtAAAAAFcVogEJAAAAAQAAAA==`)
403429 assert .Equal (t , c .ExpectedTotal , result .Count , "case %d: unexpected total hits" , i )
404430 assert .Len (t , result .Entries , c .ExpectedResults , "case %d: unexpected result count" , i )
405431
406- req = NewRequest (t , "GET" , fmt .Sprintf ("%s/Search()/$count?searchTerm='%s'&skip=%d&take =%d" , url , c .Query , c .Skip , c .Take ))
432+ req = NewRequest (t , "GET" , fmt .Sprintf ("%s/Search()/$count?searchTerm='%s'&$ skip=%d&$top =%d" , url , c .Query , c .Skip , c .Take ))
407433 req = AddBasicAuthHeader (req , user .Name )
408434 resp = MakeRequest (t , req , http .StatusOK )
409435
@@ -432,6 +458,17 @@ AAAjQmxvYgAAAGm7ENm9SGxMtAFVvPUsPJTF6PbtAAAAAFcVogEJAAAAAQAAAA==`)
432458 assert .Equal (t , strconv .FormatInt (c .ExpectedTotal , 10 ), resp .Body .String (), "case %d: unexpected total hits" , i )
433459 }
434460 })
461+
462+ t .Run ("Next" , func (t * testing.T ) {
463+ req := NewRequest (t , "GET" , fmt .Sprintf ("%s/Search()?searchTerm='test'&$skip=0&$top=1" , url ))
464+ req = AddBasicAuthHeader (req , user .Name )
465+ resp := MakeRequest (t , req , http .StatusOK )
466+
467+ var result FeedResponse
468+ decodeXML (t , resp , & result )
469+
470+ assert .Condition (t , containsOneNextLink (t , result .Links ))
471+ })
435472 })
436473
437474 t .Run ("v3" , func (t * testing.T ) {
@@ -558,7 +595,7 @@ AAAjQmxvYgAAAGm7ENm9SGxMtAFVvPUsPJTF6PbtAAAAAFcVogEJAAAAAQAAAA==`)
558595 t .Run ("v2" , func (t * testing.T ) {
559596 defer tests .PrintCurrentTest (t )()
560597
561- req := NewRequest (t , "GET" , fmt .Sprintf ("%s/FindPackagesById()?id='%s'" , url , packageName ))
598+ req := NewRequest (t , "GET" , fmt .Sprintf ("%s/FindPackagesById()?id='%s'&$top=1 " , url , packageName ))
562599 req = AddBasicAuthHeader (req , user .Name )
563600 resp := MakeRequest (t , req , http .StatusOK )
564601
@@ -567,6 +604,7 @@ AAAjQmxvYgAAAGm7ENm9SGxMtAFVvPUsPJTF6PbtAAAAAFcVogEJAAAAAQAAAA==`)
567604
568605 assert .Len (t , result .Entries , 1 )
569606 assert .Equal (t , packageVersion , result .Entries [0 ].Properties .Version )
607+ assert .Condition (t , containsOneNextLink (t , result .Links ))
570608
571609 req = NewRequest (t , "GET" , fmt .Sprintf ("%s/FindPackagesById()/$count?id='%s'" , url , packageName ))
572610 req = AddBasicAuthHeader (req , user .Name )
0 commit comments