filter_test.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package qs
  2. import "testing"
  3. func TestReadFilters(t *testing.T) {
  4. type TestCase struct {
  5. Input string
  6. Opt *ReadFiltersOptions
  7. Output []Filter
  8. Err error
  9. }
  10. testCases := []TestCase{
  11. {Input: ""},
  12. {
  13. Input: "filter=title eq Spaghetti",
  14. Output: []Filter{
  15. {Field: "title", Operator: "eq", Value: "Spaghetti"},
  16. },
  17. },
  18. {
  19. Input: "filter=title eq Bolognese&filter=serves gte 4",
  20. Output: []Filter{
  21. {Field: "title", Operator: "eq", Value: "Bolognese"},
  22. {Field: "serves", Operator: "gte", Value: "4"},
  23. },
  24. },
  25. }
  26. for n, tc := range testCases {
  27. t.Logf("(%d) Testing %q with options %+v", n, tc.Input, tc.Opt)
  28. filters, err := ReadStringFilters(tc.Input, nil)
  29. if err != tc.Err {
  30. t.Errorf("Expected error %v, got %v", tc.Err, err)
  31. }
  32. if tc.Err != nil {
  33. continue
  34. }
  35. if tc.Output == nil && filters != nil {
  36. t.Error("Expected nil")
  37. continue
  38. }
  39. if len(filters) != len(tc.Output) {
  40. t.Errorf("Expected %d filters, got %d", len(tc.Output), len(filters))
  41. }
  42. for i, filter := range tc.Output {
  43. if i == len(filters) {
  44. break
  45. }
  46. if filter != filters[i] {
  47. t.Errorf("Expected %+v for filter %d, got %+v", filter, i, filters[i])
  48. }
  49. }
  50. }
  51. }