zotregistry.dev/zot@v1.4.4-0.20240314164342-eec277e14d20/pkg/extensions/search/pagination/pagination_test.go (about) 1 //go:build search 2 3 package pagination_test 4 5 import ( 6 "testing" 7 "time" 8 9 . "github.com/smartystreets/goconvey/convey" 10 11 "zotregistry.dev/zot/pkg/extensions/search/gql_generated" 12 "zotregistry.dev/zot/pkg/extensions/search/pagination" 13 ) 14 15 func TestImgSumPagination(t *testing.T) { 16 Convey("NewImgSumPageFinder errors", t, func() { 17 _, err := pagination.NewImgSumPageFinder(-1, 0, pagination.AlphabeticAsc) 18 So(err, ShouldNotBeNil) 19 20 _, err = pagination.NewImgSumPageFinder(0, -1, pagination.AlphabeticAsc) 21 So(err, ShouldNotBeNil) 22 23 _, err = pagination.NewImgSumPageFinder(0, 0, "unknown") 24 So(err, ShouldNotBeNil) 25 }) 26 27 Convey("Sort Functions", t, func() { 28 Convey("ImgSortByAlphabeticAsc", func() { 29 // Case: repo1 is < repo2 30 pageBuff := []*gql_generated.ImageSummary{ 31 {RepoName: ref("repo1:1")}, 32 {RepoName: ref("repo2:2")}, 33 } 34 35 sortFunc := pagination.ImgSortByAlphabeticAsc(pageBuff) 36 So(sortFunc(0, 1), ShouldBeTrue) 37 }) 38 39 Convey("ImgSortByAlphabeticDsc", func() { 40 // Case: repo1 is < repo2 41 pageBuff := []*gql_generated.ImageSummary{ 42 {RepoName: ref("repo1:1")}, 43 {RepoName: ref("repo2:2")}, 44 } 45 46 sortFunc := pagination.ImgSortByAlphabeticDsc(pageBuff) 47 So(sortFunc(0, 1), ShouldBeFalse) 48 }) 49 50 Convey("ImgSortByRelevance", func() { 51 // Case: repo1 is < repo2 52 pageBuff := []*gql_generated.ImageSummary{ 53 {RepoName: ref("repo1:1")}, 54 {RepoName: ref("repo2:2")}, 55 } 56 57 sortFunc := pagination.ImgSortByRelevance(pageBuff) 58 So(sortFunc(0, 1), ShouldBeTrue) 59 }) 60 }) 61 } 62 63 func TestRepoSumPagination(t *testing.T) { 64 Convey("NewRepoSumPageFinder errors", t, func() { 65 _, err := pagination.NewRepoSumPageFinder(-1, 0, pagination.AlphabeticAsc) 66 So(err, ShouldNotBeNil) 67 68 _, err = pagination.NewRepoSumPageFinder(0, -1, pagination.AlphabeticAsc) 69 So(err, ShouldNotBeNil) 70 71 _, err = pagination.NewRepoSumPageFinder(0, 0, "unknown") 72 So(err, ShouldNotBeNil) 73 }) 74 } 75 76 func ref[T any](input T) *T { 77 obj := input 78 79 return &obj 80 } 81 82 func TestPagination(t *testing.T) { 83 Convey("Image Pagination", t, func() { 84 Convey("Sort functions", func() { 85 imgSum1 := gql_generated.ImageSummary{ 86 RepoName: ref("1"), 87 Tag: ref("1"), 88 LastUpdated: ref(time.Date(2010, 1, 1, 1, 1, 1, 1, time.UTC)), 89 DownloadCount: ref(33), 90 } 91 92 imgSum2 := gql_generated.ImageSummary{ 93 RepoName: ref("1"), 94 Tag: ref("latest"), 95 LastUpdated: ref(time.Date(2020, 1, 1, 1, 1, 1, 1, time.UTC)), 96 DownloadCount: ref(11), 97 } 98 99 imgSum3 := gql_generated.ImageSummary{ 100 RepoName: ref("3"), 101 Tag: ref("1"), 102 LastUpdated: ref(time.Date(2011, 1, 1, 1, 1, 1, 1, time.UTC)), 103 DownloadCount: ref(22), 104 } 105 106 imgSum4 := gql_generated.ImageSummary{ 107 RepoName: ref("4"), 108 Tag: ref("latest"), 109 LastUpdated: ref(time.Date(2012, 1, 1, 1, 1, 1, 1, time.UTC)), 110 DownloadCount: ref(44), 111 } 112 113 // ImgSortByAlphabeticAsc 114 imagePageFinder, err := pagination.NewImgSumPageFinder(4, 0, pagination.AlphabeticAsc) 115 So(err, ShouldBeNil) 116 imagePageFinder.Add(&imgSum1) 117 imagePageFinder.Add(&imgSum2) 118 imagePageFinder.Add(&imgSum3) 119 imagePageFinder.Add(&imgSum4) 120 page, _ := imagePageFinder.Page() 121 So(page, ShouldEqual, []*gql_generated.ImageSummary{ 122 &imgSum1, &imgSum2, &imgSum3, &imgSum4, 123 }) 124 125 // ImgSortByAlphabeticDsc 126 imagePageFinder, err = pagination.NewImgSumPageFinder(4, 0, pagination.AlphabeticDsc) 127 So(err, ShouldBeNil) 128 imagePageFinder.Add(&imgSum1) 129 imagePageFinder.Add(&imgSum2) 130 imagePageFinder.Add(&imgSum3) 131 imagePageFinder.Add(&imgSum4) 132 page, _ = imagePageFinder.Page() 133 So(page, ShouldEqual, []*gql_generated.ImageSummary{ 134 &imgSum4, &imgSum3, &imgSum2, &imgSum1, 135 }) 136 137 // ImgSortByRelevance 138 imagePageFinder, err = pagination.NewImgSumPageFinder(4, 0, pagination.Relevance) 139 So(err, ShouldBeNil) 140 imagePageFinder.Add(&imgSum1) 141 imagePageFinder.Add(&imgSum2) 142 imagePageFinder.Add(&imgSum3) 143 imagePageFinder.Add(&imgSum4) 144 page, _ = imagePageFinder.Page() 145 So(page, ShouldEqual, []*gql_generated.ImageSummary{ 146 &imgSum1, &imgSum2, &imgSum3, &imgSum4, 147 }) 148 149 // ImgSortByUpdateTime 150 imagePageFinder, err = pagination.NewImgSumPageFinder(4, 0, pagination.UpdateTime) 151 So(err, ShouldBeNil) 152 imagePageFinder.Add(&imgSum1) 153 imagePageFinder.Add(&imgSum2) 154 imagePageFinder.Add(&imgSum3) 155 imagePageFinder.Add(&imgSum4) 156 page, _ = imagePageFinder.Page() 157 So(page, ShouldEqual, []*gql_generated.ImageSummary{ 158 &imgSum2, &imgSum1, &imgSum4, &imgSum3, 159 }) 160 161 // ImgSortByDownloads 162 imagePageFinder, err = pagination.NewImgSumPageFinder(4, 0, pagination.Downloads) 163 So(err, ShouldBeNil) 164 imagePageFinder.Add(&imgSum1) 165 imagePageFinder.Add(&imgSum2) 166 imagePageFinder.Add(&imgSum3) 167 imagePageFinder.Add(&imgSum4) 168 page, _ = imagePageFinder.Page() 169 So(page, ShouldEqual, []*gql_generated.ImageSummary{ 170 &imgSum4, &imgSum1, &imgSum3, &imgSum2, 171 }) 172 }) 173 174 Convey("Errors", func() { 175 imagePageFinder, err := pagination.NewImgSumPageFinder(2, 0, "") 176 So(err, ShouldBeNil) 177 So(imagePageFinder, ShouldNotBeNil) 178 179 _, err = pagination.NewImgSumPageFinder(-1, 0, "") 180 So(err, ShouldNotBeNil) 181 182 _, err = pagination.NewImgSumPageFinder(1, -1, "") 183 So(err, ShouldNotBeNil) 184 185 _, err = pagination.NewImgSumPageFinder(1, -1, "bad sort func") 186 So(err, ShouldNotBeNil) 187 }) 188 }) 189 190 Convey("Repos Pagination", t, func() { 191 Convey("Sort functions", func() { 192 repoSum1 := gql_generated.RepoSummary{ 193 Name: ref("1"), 194 LastUpdated: ref(time.Date(2010, 1, 1, 1, 1, 1, 1, time.UTC)), 195 DownloadCount: ref(33), 196 Rank: ref(1), 197 } 198 199 repoSum2 := gql_generated.RepoSummary{ 200 Name: ref("2"), 201 LastUpdated: ref(time.Date(2020, 1, 1, 1, 1, 1, 1, time.UTC)), 202 DownloadCount: ref(11), 203 Rank: ref(2), 204 } 205 206 repoSum3 := gql_generated.RepoSummary{ 207 Name: ref("3"), 208 LastUpdated: ref(time.Date(2011, 1, 1, 1, 1, 1, 1, time.UTC)), 209 DownloadCount: ref(22), 210 Rank: ref(3), 211 } 212 213 repoSum4 := gql_generated.RepoSummary{ 214 Name: ref("4"), 215 LastUpdated: ref(time.Date(2012, 1, 1, 1, 1, 1, 1, time.UTC)), 216 DownloadCount: ref(44), 217 Rank: ref(4), 218 } 219 220 // ImgSortByAlphabeticAsc 221 imagePageFinder, err := pagination.NewRepoSumPageFinder(4, 0, pagination.AlphabeticAsc) 222 So(err, ShouldBeNil) 223 imagePageFinder.Add(&repoSum1) 224 imagePageFinder.Add(&repoSum2) 225 imagePageFinder.Add(&repoSum3) 226 imagePageFinder.Add(&repoSum4) 227 page, _ := imagePageFinder.Page() 228 So(page, ShouldEqual, []*gql_generated.RepoSummary{ 229 &repoSum1, &repoSum2, &repoSum3, &repoSum4, 230 }) 231 232 // ImgSortByAlphabeticDsc 233 imagePageFinder, err = pagination.NewRepoSumPageFinder(4, 0, pagination.AlphabeticDsc) 234 So(err, ShouldBeNil) 235 imagePageFinder.Add(&repoSum1) 236 imagePageFinder.Add(&repoSum2) 237 imagePageFinder.Add(&repoSum3) 238 imagePageFinder.Add(&repoSum4) 239 page, _ = imagePageFinder.Page() 240 So(page, ShouldEqual, []*gql_generated.RepoSummary{ 241 &repoSum4, &repoSum3, &repoSum2, &repoSum1, 242 }) 243 244 // ImgSortByRelevance 245 imagePageFinder, err = pagination.NewRepoSumPageFinder(4, 0, pagination.Relevance) 246 So(err, ShouldBeNil) 247 imagePageFinder.Add(&repoSum1) 248 imagePageFinder.Add(&repoSum2) 249 imagePageFinder.Add(&repoSum3) 250 imagePageFinder.Add(&repoSum4) 251 page, _ = imagePageFinder.Page() 252 So(page, ShouldEqual, []*gql_generated.RepoSummary{ 253 &repoSum1, &repoSum2, &repoSum3, &repoSum4, 254 }) 255 256 // ImgSortByUpdateTime 257 imagePageFinder, err = pagination.NewRepoSumPageFinder(4, 0, pagination.UpdateTime) 258 So(err, ShouldBeNil) 259 imagePageFinder.Add(&repoSum1) 260 imagePageFinder.Add(&repoSum2) 261 imagePageFinder.Add(&repoSum3) 262 imagePageFinder.Add(&repoSum4) 263 page, _ = imagePageFinder.Page() 264 So(page, ShouldEqual, []*gql_generated.RepoSummary{ 265 &repoSum2, &repoSum4, &repoSum3, &repoSum1, 266 }) 267 268 // ImgSortByDownloads 269 imagePageFinder, err = pagination.NewRepoSumPageFinder(4, 0, pagination.Downloads) 270 So(err, ShouldBeNil) 271 imagePageFinder.Add(&repoSum1) 272 imagePageFinder.Add(&repoSum2) 273 imagePageFinder.Add(&repoSum3) 274 imagePageFinder.Add(&repoSum4) 275 page, _ = imagePageFinder.Page() 276 So(page, ShouldEqual, []*gql_generated.RepoSummary{ 277 &repoSum4, &repoSum1, &repoSum3, &repoSum2, 278 }) 279 }) 280 281 Convey("Errors", func() { 282 repoPageFinder, err := pagination.NewRepoSumPageFinder(2, 0, "") 283 So(err, ShouldBeNil) 284 So(repoPageFinder, ShouldNotBeNil) 285 286 _, err = pagination.NewRepoSumPageFinder(-1, 0, "") 287 So(err, ShouldNotBeNil) 288 289 _, err = pagination.NewRepoSumPageFinder(1, -1, "") 290 So(err, ShouldNotBeNil) 291 292 _, err = pagination.NewRepoSumPageFinder(1, -1, "bad sort func") 293 So(err, ShouldNotBeNil) 294 }) 295 }) 296 }