Skip to content

Commit a91681e

Browse files
DOC-4345 added testable version of home page JSON example
1 parent 0171221 commit a91681e

File tree

1 file changed

+175
-0
lines changed

1 file changed

+175
-0
lines changed

tests/Doc/HomeJsonExample.cs

Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
// EXAMPLE: cs_home_json
2+
3+
// STEP_START import
4+
using NRedisStack.RedisStackCommands;
5+
using NRedisStack.Search;
6+
using NRedisStack.Search.Aggregation;
7+
using NRedisStack.Search.Literals.Enums;
8+
using NRedisStack.Tests;
9+
using StackExchange.Redis;
10+
// STEP_END
11+
12+
// REMOVE_START
13+
namespace Doc;
14+
[Collection("DocsTests")]
15+
// REMOVE_END
16+
17+
// HIDE_START
18+
public class HomeJsonExample
19+
{
20+
21+
[SkipIfRedis(Is.OSSCluster)]
22+
public void run()
23+
{
24+
// STEP_START connect
25+
var muxer = ConnectionMultiplexer.Connect("localhost:6379");
26+
var db = muxer.GetDatabase();
27+
// STEP_END
28+
29+
//REMOVE_START
30+
// Clear any keys here before using them in tests.
31+
db.KeyDelete(new RedisKey[] { "user:1", "user:2", "user:3" });
32+
db.FT().DropIndex("idx:users");
33+
//REMOVE_END
34+
// HIDE_END
35+
36+
// STEP_START create_data
37+
var user1 = new
38+
{
39+
name = "Paul John",
40+
email = "[email protected]",
41+
age = 42,
42+
city = "London"
43+
};
44+
45+
var user2 = new
46+
{
47+
name = "Eden Zamir",
48+
email = "[email protected]",
49+
age = 29,
50+
city = "Tel Aviv"
51+
};
52+
53+
var user3 = new
54+
{
55+
name = "Paul Zamir",
56+
email = "[email protected]",
57+
age = 35,
58+
city = "Tel Aviv"
59+
};
60+
// STEP_END
61+
62+
// STEP_START make_index
63+
var schema = new Schema()
64+
.AddTextField(new FieldName("$.name", "name"))
65+
.AddTagField(new FieldName("$.city", "city"))
66+
.AddNumericField(new FieldName("$.age", "age"));
67+
68+
bool indexCreated = db.FT().Create(
69+
"idx:users",
70+
new FTCreateParams()
71+
.On(IndexDataType.JSON)
72+
.Prefix("user:"),
73+
schema
74+
);
75+
// STEP_END
76+
77+
// Tests for 'make_index' step.
78+
// REMOVE_START
79+
Assert.True(indexCreated);
80+
// REMOVE_END
81+
82+
83+
// STEP_START add_data
84+
bool user1Set = db.JSON().Set("user:1", "$", user1);
85+
bool user2Set = db.JSON().Set("user:2", "$", user2);
86+
bool user3Set = db.JSON().Set("user:3", "$", user3);
87+
// STEP_END
88+
89+
// Tests for 'add_data' step.
90+
// REMOVE_START
91+
Assert.True(user1Set);
92+
Assert.True(user2Set);
93+
Assert.True(user3Set);
94+
// REMOVE_END
95+
96+
97+
// STEP_START query1
98+
SearchResult findPaulResult = db.FT().Search(
99+
"idx:users",
100+
new Query("Paul @age:[30 40]")
101+
);
102+
Console.WriteLine(string.Join(
103+
", ",
104+
findPaulResult.Documents.Select(x => x["json"])
105+
));
106+
// >>> {"name":"Paul Zamir","email":"[email protected]", ...
107+
// STEP_END
108+
109+
// Tests for 'query1' step.
110+
// REMOVE_START
111+
Assert.Equal(
112+
"{\"name\":\"Paul Zamir\",\"email\":\"[email protected]\",\"age\":35,\"city\":\"Tel Aviv\"}",
113+
string.Join(", ", findPaulResult.Documents.Select(x => x["json"]))
114+
);
115+
// REMOVE_END
116+
117+
118+
// STEP_START query2
119+
var citiesResult = db.FT().Search(
120+
"idx:users",
121+
new Query("Paul")
122+
.ReturnFields(new FieldName("$.city", "city"))
123+
);
124+
Console.WriteLine(string.Join(
125+
", ",
126+
citiesResult.Documents.Select(x => x["city"]).OrderBy(x => x)
127+
));
128+
// >>> London, Tel Aviv
129+
// STEP_END
130+
131+
// Tests for 'query2' step.
132+
// REMOVE_START
133+
Assert.Equal(
134+
"London, Tel Aviv",
135+
string.Join(", ", citiesResult.Documents.Select(x => x["city"]).OrderBy(x => x))
136+
);
137+
// REMOVE_END
138+
139+
140+
// STEP_START query3
141+
AggregationRequest aggRequest = new AggregationRequest("*")
142+
.GroupBy("@city", Reducers.Count().As("count"));
143+
144+
AggregationResult aggResult = db.FT().Aggregate("idx:users", aggRequest);
145+
IReadOnlyList<Dictionary<string, RedisValue>> resultsList =
146+
aggResult.GetResults();
147+
148+
for (var i = 0; i < resultsList.Count; i++)
149+
{
150+
Dictionary<string, RedisValue> item = resultsList.ElementAt(i);
151+
Console.WriteLine($"{item["city"]} - {item["count"]}");
152+
}
153+
// >>> London - 1
154+
// >>> Tel Aviv - 2
155+
// STEP_END
156+
157+
// Tests for 'query3' step.
158+
// REMOVE_START
159+
Assert.Equal(2, resultsList.Count);
160+
161+
Dictionary<string, RedisValue> testItem = resultsList.ElementAt(0);
162+
Assert.Equal("London", testItem["city"]);
163+
Assert.Equal(1, testItem["count"]);
164+
165+
testItem = resultsList.ElementAt(1);
166+
Assert.Equal("Tel Aviv", testItem["city"]);
167+
Assert.Equal(2, testItem["count"]);
168+
// REMOVE_END
169+
170+
171+
// HIDE_START
172+
}
173+
}
174+
// HIDE_END
175+

0 commit comments

Comments
 (0)