openmeter / streaming /query_params_test.go
Leon4gr45's picture
Upload folder using huggingface_hub (part 6)
d6f631f verified
Raw
History Blame Contribute Delete
2.57 kB
package streaming
import (
"fmt"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/openmeterio/openmeter/openmeter/meter"
"github.com/openmeterio/openmeter/pkg/models"
)
type testCustomer struct {
ID string
Key *string
SubjectKeys []string
}
func (c testCustomer) GetUsageAttribution() CustomerUsageAttribution {
return NewCustomerUsageAttribution(c.ID, c.Key, c.SubjectKeys)
}
func TestQueryParamsValidate(t *testing.T) {
queryWindowSizeMinute := meter.WindowSizeMinute
tests := []struct {
name string
paramFrom string
paramTo string
paramWindowTimeZone string
paramWindowSize *meter.WindowSize
paramFilterCustomer []Customer
want error
}{
{
name: "should fail when from and to are equal",
paramFrom: "2023-01-01T00:00:00Z",
paramTo: "2023-01-01T00:00:00Z",
paramWindowSize: &queryWindowSizeMinute,
want: models.NewGenericValidationError(fmt.Errorf("from and to cannot be equal")),
},
{
name: "should fail when from is before to",
paramFrom: "2023-01-02T00:00:00Z",
paramTo: "2023-01-01T00:00:00Z",
paramWindowSize: &queryWindowSizeMinute,
want: models.NewGenericValidationError(fmt.Errorf("from must be before to")),
},
{
name: "should fail when filter customer has no id",
paramFrom: "2023-01-01T00:00:00Z",
paramTo: "2023-01-02T00:00:00Z",
paramWindowSize: &queryWindowSizeMinute,
paramFilterCustomer: []Customer{
testCustomer{
ID: "",
},
},
want: models.NewGenericValidationError(fmt.Errorf("usage attribution must have an id")),
},
}
for _, tt := range tests {
tt := tt
paramWindowSize := "none"
if tt.paramWindowSize != nil {
paramWindowSize = string(*tt.paramWindowSize)
}
name := fmt.Sprintf("%s/%s", paramWindowSize, tt.name)
t.Run(name, func(t *testing.T) {
from, err := time.Parse(time.RFC3339, tt.paramFrom)
if err != nil {
t.Fatal(fmt.Errorf("failed to parse from: %w", err))
return
}
to, err := time.Parse(time.RFC3339, tt.paramTo)
if err != nil {
t.Fatal(fmt.Errorf("failed to parse to: %w", err))
return
}
p := QueryParams{
From: &from,
To: &to,
WindowSize: tt.paramWindowSize,
FilterCustomer: tt.paramFilterCustomer,
}
got := p.Validate()
if tt.want == nil {
assert.NoError(t, got)
} else {
assert.ErrorAs(t, got, &tt.want)
}
})
}
}