autocomplete_test.go 2.4 KB

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