autocomplete_test.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package cloudcost
  2. import (
  3. "context"
  4. "testing"
  5. "time"
  6. "github.com/opencost/opencost/core/pkg/autocomplete"
  7. "github.com/opencost/opencost/core/pkg/opencost"
  8. )
  9. func TestRepositoryQuerier_QueryCloudCostAutocomplete(t *testing.T) {
  10. start := time.Date(2024, 1, 1, 0, 0, 0, 0, time.UTC)
  11. end := start.Add(24 * time.Hour)
  12. repo := NewMemoryRepository()
  13. ccs := DefaultMockCloudCostSet(start, end, "aws", "integration-1")
  14. if err := repo.Put(ccs); err != nil {
  15. t.Fatalf("failed to seed repository: %v", err)
  16. }
  17. rq := NewRepositoryQuerier(repo)
  18. resp, err := rq.QueryCloudCostAutocomplete(context.Background(), autocomplete.Request{
  19. Field: opencost.CloudCostServiceProp,
  20. Window: opencost.NewClosedWindow(start, end),
  21. })
  22. if err != nil {
  23. t.Fatalf("unexpected error: %v", err)
  24. }
  25. if len(resp.Data) != 2 {
  26. t.Fatalf("expected 2 service values, got %d: %+v", len(resp.Data), resp.Data)
  27. }
  28. labelResp, err := rq.QueryCloudCostAutocomplete(context.Background(), autocomplete.Request{
  29. Field: "label:label1",
  30. Search: "value1",
  31. Window: opencost.NewClosedWindow(start, end),
  32. })
  33. if err != nil {
  34. t.Fatalf("unexpected error: %v", err)
  35. }
  36. if len(labelResp.Data) != 1 || labelResp.Data[0] != "value1" {
  37. t.Fatalf("unexpected label autocomplete response: %+v", labelResp.Data)
  38. }
  39. _, err = rq.QueryCloudCostAutocomplete(context.Background(), autocomplete.Request{
  40. Field: opencost.CloudCostServiceProp,
  41. Limit: autocomplete.MaxResultLimit + 1,
  42. Window: opencost.NewClosedWindow(start, end),
  43. })
  44. if err == nil {
  45. t.Fatal("expected error for excessive limit")
  46. }
  47. if !autocomplete.IsBadRequest(err) {
  48. t.Fatalf("expected bad request error, got: %v", err)
  49. }
  50. _, err = rq.QueryCloudCostAutocomplete(context.Background(), autocomplete.Request{
  51. Field: "not-a-real-field",
  52. Window: opencost.NewClosedWindow(start, end),
  53. })
  54. if err == nil {
  55. t.Fatal("expected error for invalid field")
  56. }
  57. if !autocomplete.IsBadRequest(err) {
  58. t.Fatalf("expected bad request error, got: %v", err)
  59. }
  60. mixedCaseResp, err := rq.QueryCloudCostAutocomplete(context.Background(), autocomplete.Request{
  61. Field: "label:Label1",
  62. Search: "value1",
  63. Window: opencost.NewClosedWindow(start, end),
  64. })
  65. if err != nil {
  66. t.Fatalf("unexpected error: %v", err)
  67. }
  68. if len(mixedCaseResp.Data) != 1 || mixedCaseResp.Data[0] != "value1" {
  69. t.Fatalf("unexpected mixed-case label autocomplete response: %+v", mixedCaseResp.Data)
  70. }
  71. }