package meter import ( "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/openmeterio/openmeter/pkg/pagination" "github.com/openmeterio/openmeter/pkg/sortx" ) func TestListMetersParams_Validate_Sort(t *testing.T) { namespace := "test-ns" tests := []struct { name string params ListMetersParams wantErr bool }{ { name: "no sort", params: ListMetersParams{ Namespace: namespace, Page: pagination.Page{PageSize: 10, PageNumber: 1}, }, }, { name: "sort by key asc", params: ListMetersParams{ Namespace: namespace, Page: pagination.Page{PageSize: 10, PageNumber: 1}, OrderBy: OrderByKey, Order: sortx.OrderAsc, }, }, { name: "sort by name desc", params: ListMetersParams{ Namespace: namespace, Page: pagination.Page{PageSize: 10, PageNumber: 1}, OrderBy: OrderByName, Order: sortx.OrderDesc, }, }, { name: "sort by aggregation", params: ListMetersParams{ Namespace: namespace, Page: pagination.Page{PageSize: 10, PageNumber: 1}, OrderBy: OrderByAggregation, Order: sortx.OrderAsc, }, }, { name: "sort by createdAt", params: ListMetersParams{ Namespace: namespace, Page: pagination.Page{PageSize: 10, PageNumber: 1}, OrderBy: OrderByCreatedAt, Order: sortx.OrderAsc, }, }, { name: "sort by updatedAt", params: ListMetersParams{ Namespace: namespace, Page: pagination.Page{PageSize: 10, PageNumber: 1}, OrderBy: OrderByUpdatedAt, Order: sortx.OrderDesc, }, }, { name: "invalid order by field", params: ListMetersParams{ Namespace: namespace, Page: pagination.Page{PageSize: 10, PageNumber: 1}, OrderBy: OrderBy("invalid_field"), Order: sortx.OrderAsc, }, wantErr: true, }, { name: "invalid order direction", params: ListMetersParams{ Namespace: namespace, Page: pagination.Page{PageSize: 10, PageNumber: 1}, OrderBy: OrderByKey, Order: sortx.Order("SIDEWAYS"), }, wantErr: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { err := tt.params.Validate() if tt.wantErr { require.Error(t, err) } else { assert.NoError(t, err) } }) } }