autocompletequeryservice_test.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package asset
  2. import (
  3. "testing"
  4. "time"
  5. "github.com/opencost/opencost/core/pkg/autocomplete"
  6. "github.com/opencost/opencost/core/pkg/opencost"
  7. )
  8. func TestQueryAssetAutocompleteFromSet(t *testing.T) {
  9. start := time.Date(2024, 1, 1, 0, 0, 0, 0, time.UTC)
  10. end := start.Add(24 * time.Hour)
  11. window := opencost.NewClosedWindow(start, end)
  12. nodeA := opencost.NewNode("node-a", "cluster-a", "provider-a", start, end, window)
  13. nodeA.SetLabels(map[string]string{"team": "platform", "app": "api"})
  14. nodeA.GetProperties().Account = "acct-a"
  15. nodeA.GetProperties().Category = opencost.ComputeCategory
  16. nodeB := opencost.NewNode("node-b", "cluster-b", "provider-b", start, end, window)
  17. nodeB.SetLabels(map[string]string{"team": "data", "app": "db"})
  18. nodeB.GetProperties().Account = "acct-b"
  19. nodeB.GetProperties().Category = opencost.ComputeCategory
  20. assetSet := opencost.NewAssetSet(start, end, nodeA, nodeB)
  21. resp, err := QueryAssetAutocompleteFromSet(assetSet, autocomplete.Request{
  22. TenantID: "opencost",
  23. Field: "cluster",
  24. Window: window,
  25. })
  26. if err != nil {
  27. t.Fatalf("unexpected error: %v", err)
  28. }
  29. if len(resp.Data) != 2 || resp.Data[0] != "cluster-a" || resp.Data[1] != "cluster-b" {
  30. t.Fatalf("unexpected cluster autocomplete response: %+v", resp.Data)
  31. }
  32. labelResp, err := QueryAssetAutocompleteFromSet(assetSet, autocomplete.Request{
  33. TenantID: "opencost",
  34. Field: "label:team",
  35. Search: "plat",
  36. Window: window,
  37. })
  38. if err != nil {
  39. t.Fatalf("unexpected error: %v", err)
  40. }
  41. if len(labelResp.Data) != 1 || labelResp.Data[0] != "platform" {
  42. t.Fatalf("unexpected label autocomplete response: %+v", labelResp.Data)
  43. }
  44. _, err = QueryAssetAutocompleteFromSet(assetSet, autocomplete.Request{
  45. Field: "cluster",
  46. })
  47. if err == nil {
  48. t.Fatal("expected error when tenant ID is missing")
  49. }
  50. if !autocomplete.IsBadRequest(err) {
  51. t.Fatalf("expected bad request error, got: %v", err)
  52. }
  53. _, err = QueryAssetAutocompleteFromSet(assetSet, autocomplete.Request{
  54. TenantID: "opencost",
  55. Field: "labels",
  56. Window: window,
  57. })
  58. if err == nil {
  59. t.Fatal("expected error for invalid field prefix")
  60. }
  61. if !autocomplete.IsBadRequest(err) {
  62. t.Fatalf("expected bad request error, got: %v", err)
  63. }
  64. openWindow := opencost.NewWindow(&start, nil)
  65. _, err = QueryAssetAutocompleteFromSet(assetSet, autocomplete.Request{
  66. TenantID: "opencost",
  67. Field: "name",
  68. Window: openWindow,
  69. })
  70. if err == nil {
  71. t.Fatal("expected error for open window")
  72. }
  73. if !autocomplete.IsBadRequest(err) {
  74. t.Fatalf("expected bad request error, got: %v", err)
  75. }
  76. }