(t *testing.T)
| 9 | ) |
| 10 | |
| 11 | func TestSortFieldBuildExpr(t *testing.T) { |
| 12 | resolver := search.NewSimpleFieldResolver("test1", "test2", "test3", "test4.sub") |
| 13 | |
| 14 | scenarios := []struct { |
| 15 | sortField search.SortField |
| 16 | expectError bool |
| 17 | expectExpression string |
| 18 | }{ |
| 19 | // empty |
| 20 | {search.SortField{"", search.SortDesc}, true, ""}, |
| 21 | // unknown field |
| 22 | {search.SortField{"unknown", search.SortAsc}, true, ""}, |
| 23 | // placeholder field |
| 24 | {search.SortField{"'test'", search.SortAsc}, true, ""}, |
| 25 | // null field |
| 26 | {search.SortField{"null", search.SortAsc}, true, ""}, |
| 27 | // allowed field - asc |
| 28 | {search.SortField{"test1", search.SortAsc}, false, "[[test1]] ASC"}, |
| 29 | // allowed field - desc |
| 30 | {search.SortField{"test1", search.SortDesc}, false, "[[test1]] DESC"}, |
| 31 | // special @random field (ignore direction) |
| 32 | {search.SortField{"@random", search.SortDesc}, false, "RANDOM()"}, |
| 33 | // special _rowid_ field |
| 34 | {search.SortField{"@rowid", search.SortDesc}, false, "[[_rowid_]] DESC"}, |
| 35 | } |
| 36 | |
| 37 | for _, s := range scenarios { |
| 38 | t.Run(fmt.Sprintf("%s_%s", s.sortField.Name, s.sortField.Name), func(t *testing.T) { |
| 39 | result, err := s.sortField.BuildExpr(resolver) |
| 40 | |
| 41 | hasErr := err != nil |
| 42 | if hasErr != s.expectError { |
| 43 | t.Fatalf("Expected hasErr %v, got %v (%v)", s.expectError, hasErr, err) |
| 44 | } |
| 45 | |
| 46 | if result != s.expectExpression { |
| 47 | t.Fatalf("Expected expression %v, got %v", s.expectExpression, result) |
| 48 | } |
| 49 | }) |
| 50 | } |
| 51 | } |
| 52 | |
| 53 | func TestParseSortFromString(t *testing.T) { |
| 54 | scenarios := []struct { |
nothing calls this directly
no test coverage detected
searching dependent graphs…