diff --git a/.gitignore b/.gitignore index f1883206..a02e5521 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ testdata/* *.tar.gz *.dic redis8tests.sh +.vscode diff --git a/search_test.go b/search_test.go index e08ce3d3..1098319e 100644 --- a/search_test.go +++ b/search_test.go @@ -805,6 +805,73 @@ var _ = Describe("RediSearch commands Resp 2", Label("search"), func() { } }) + It("should return only the base query when options is nil", Label("search", "ftaggregate"), func() { + args := redis.FTAggregateQuery("testQuery", nil) + Expect(args).To(Equal(redis.AggregateQuery{"testQuery"})) + }) + + It("should include VERBATIM and SCORER when options are set", Label("search", "ftaggregate"), func() { + options := &redis.FTAggregateOptions{ + Verbatim: true, + Scorer: "BM25", + } + args := redis.FTAggregateQuery("testQuery", options) + Expect(args[0]).To(Equal("testQuery")) + Expect(args).To(ContainElement("VERBATIM")) + Expect(args).To(ContainElement("SCORER")) + Expect(args).To(ContainElement("BM25")) + }) + + It("should include ADDSCORES when AddScores is true", Label("search", "ftaggregate"), func() { + options := &redis.FTAggregateOptions{ + AddScores: true, + } + args := redis.FTAggregateQuery("q", options) + Expect(args).To(ContainElement("ADDSCORES")) + }) + + It("should include LOADALL when LoadAll is true", Label("search", "ftaggregate"), func() { + options := &redis.FTAggregateOptions{ + LoadAll: true, + } + args := redis.FTAggregateQuery("q", options) + Expect(args).To(ContainElement("LOAD")) + Expect(args).To(ContainElement("*")) + }) + + It("should include LOAD when Load is provided", Label("search", "ftaggregate"), func() { + options := &redis.FTAggregateOptions{ + Load: []redis.FTAggregateLoad{ + {Field: "field1", As: "alias1"}, + {Field: "field2"}, + }, + } + args := redis.FTAggregateQuery("q", options) + // Verify LOAD options related arguments + Expect(args).To(ContainElement("LOAD")) + // Check that field names and aliases are present + Expect(args).To(ContainElement("field1")) + Expect(args).To(ContainElement("alias1")) + Expect(args).To(ContainElement("field2")) + }) + + It("should include TIMEOUT when Timeout > 0", Label("search", "ftaggregate"), func() { + options := &redis.FTAggregateOptions{ + Timeout: 500, + } + args := redis.FTAggregateQuery("q", options) + Expect(args).To(ContainElement("TIMEOUT")) + found := false + for i, a := range args { + if fmt.Sprintf("%s", a) == "TIMEOUT" { + Expect(fmt.Sprintf("%d", args[i+1])).To(Equal("500")) + found = true + break + } + } + Expect(found).To(BeTrue()) + }) + It("should FTSearch SkipInitialScan", Label("search", "ftsearch"), func() { client.HSet(ctx, "doc1", "foo", "bar")