From 2fb213f6039edeb3212cecae921edbf0146e5b7d Mon Sep 17 00:00:00 2001 From: Bryttanie <28575816+xbhouse@users.noreply.github.com> Date: Wed, 22 May 2024 13:53:53 -0400 Subject: [PATCH] Fixes 4009: snapshot errata should be sortable (#9) * Fixes 4009: snapshot errata should be sortable * fix test --- internal/test/integration/rpm_test.go | 56 +++++++++++++++++++++++++++ pkg/tangy/rpm.go | 26 ++++++++++++- 2 files changed, 81 insertions(+), 1 deletion(-) diff --git a/internal/test/integration/rpm_test.go b/internal/test/integration/rpm_test.go index 79bb1fa..e7a1cc6 100644 --- a/internal/test/integration/rpm_test.go +++ b/internal/test/integration/rpm_test.go @@ -316,6 +316,62 @@ func (r *RpmSuite) TestRpmRepositoryVersionErrataListFilter() { assert.Equal(r.T(), total, 0) } +func (r *RpmSuite) TestRpmRepositoryVersionErrataListSort() { + resp, err := r.client.GetRpmRepositoryByName(r.domainName, testRepoNameWithErrata) + require.NoError(r.T(), err) + require.NotNil(r.T(), resp.LatestVersionHref) + firstVersionHref := resp.LatestVersionHref + + // no sort specified, defaults to issued_date desc + errata, total, err := r.tangy.RpmRepositoryVersionErrataList(context.Background(), []string{*firstVersionHref}, tangy.ErrataListFilters{}, tangy.PageOptions{}) + require.NoError(r.T(), err) + assert.NotEmpty(r.T(), errata) + assert.Equal(r.T(), errata[0].IssuedDate, "2013-01-27 16:08:09") + assert.Equal(r.T(), total, 6) + + // sorting by issued_date asc + errata, total, err = r.tangy.RpmRepositoryVersionErrataList(context.Background(), []string{*firstVersionHref}, tangy.ErrataListFilters{}, tangy.PageOptions{SortBy: "issued_date:asc"}) + require.NoError(r.T(), err) + assert.NotEmpty(r.T(), errata) + assert.Equal(r.T(), errata[0].IssuedDate, "2009-05-20 00:00:00") + assert.Equal(r.T(), total, 6) + + // sorting by issued_date desc + errata, total, err = r.tangy.RpmRepositoryVersionErrataList(context.Background(), []string{*firstVersionHref}, tangy.ErrataListFilters{}, tangy.PageOptions{SortBy: "issued_date:desc"}) + require.NoError(r.T(), err) + assert.NotEmpty(r.T(), errata) + assert.Equal(r.T(), errata[0].IssuedDate, "2013-01-27 16:08:09") + assert.Equal(r.T(), total, 6) + + // sorting by type asc + errata, total, err = r.tangy.RpmRepositoryVersionErrataList(context.Background(), []string{*firstVersionHref}, tangy.ErrataListFilters{}, tangy.PageOptions{SortBy: "type:asc"}) + require.NoError(r.T(), err) + assert.NotEmpty(r.T(), errata) + assert.Equal(r.T(), errata[0].Type, "bugfix") + assert.Equal(r.T(), total, 6) + + // sorting by type desc + errata, total, err = r.tangy.RpmRepositoryVersionErrataList(context.Background(), []string{*firstVersionHref}, tangy.ErrataListFilters{}, tangy.PageOptions{SortBy: "type:desc"}) + require.NoError(r.T(), err) + assert.NotEmpty(r.T(), errata) + assert.Equal(r.T(), errata[0].Type, "security") + assert.Equal(r.T(), total, 6) + + // sorting by severity asc + errata, total, err = r.tangy.RpmRepositoryVersionErrataList(context.Background(), []string{*firstVersionHref}, tangy.ErrataListFilters{}, tangy.PageOptions{SortBy: "severity:asc"}) + require.NoError(r.T(), err) + assert.NotEmpty(r.T(), errata) + assert.Equal(r.T(), errata[0].Severity, "") // some errata in this repo have no severity listed, these show up first when sorting ascending + assert.Equal(r.T(), total, 6) + + // sorting by severity desc + errata, total, err = r.tangy.RpmRepositoryVersionErrataList(context.Background(), []string{*firstVersionHref}, tangy.ErrataListFilters{}, tangy.PageOptions{SortBy: "severity:desc"}) + require.NoError(r.T(), err) + assert.NotEmpty(r.T(), errata) + assert.Equal(r.T(), errata[0].Severity, "Moderate") + assert.Equal(r.T(), total, 6) +} + func (r *RpmSuite) TestRpmRepositoryVersionPackageListNameFilter() { resp, err := r.client.GetRpmRepositoryByName(r.domainName, testRepoName) require.NoError(r.T(), err) diff --git a/pkg/tangy/rpm.go b/pkg/tangy/rpm.go index 78f8534..702e93f 100644 --- a/pkg/tangy/rpm.go +++ b/pkg/tangy/rpm.go @@ -62,6 +62,7 @@ type ErrataListItem struct { type PageOptions struct { Offset int Limit int + SortBy string } type RpmListFilters struct { @@ -309,8 +310,31 @@ func (t *tangyImpl) RpmRepositoryVersionErrataList(ctx context.Context, hrefs [] args["limit"] = pageOpts.Limit args["offset"] = pageOpts.Offset + args["sort_by"] = pageOpts.SortBy + + var orderBy string + sortField := strings.Split(pageOpts.SortBy, ":")[0] + switch sortField { + case "issued_date": + orderBy = "re.issued_date" + case "updated_date": + orderBy = "re.updated_date" + case "type": + orderBy = "re.type" + case "severity": + orderBy = "re.severity" + default: + orderBy = "re.issued_date" + } + + if strings.Contains(pageOpts.SortBy, "asc") { + orderBy += " ASC" + } else { + orderBy += " DESC" + } + rows, err := conn.Query(ctx, queryOpen+innerUnion+filterQuery+ - " ORDER BY re.issued_date DESC, re.title ASC, re.type ASC, re.severity ASC LIMIT @limit OFFSET @offset", + " ORDER BY "+orderBy+" LIMIT @limit OFFSET @offset", args) if err != nil { return nil, 0, err