Skip to content

Commit 939fead

Browse files
author
Ariel Shtul
authored
Adding RediSearch/RedisJSON tests (#1691)
1 parent a1d4e3e commit 939fead

File tree

1 file changed

+99
-0
lines changed

1 file changed

+99
-0
lines changed

tests/test_search.py

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1221,3 +1221,102 @@ def test_syndump(client):
12211221
"baby": ["id2"],
12221222
"offspring": ["id1"],
12231223
}
1224+
1225+
1226+
@pytest.mark.redismod
1227+
@skip_ifmodversion_lt("2.2.0", "search")
1228+
def test_create_json_with_alias(client):
1229+
"""
1230+
Create definition with IndexType.JSON as index type (ON JSON) with two
1231+
fields with aliases, and use json client to test it.
1232+
"""
1233+
definition = IndexDefinition(prefix=["king:"], index_type=IndexType.JSON)
1234+
client.ft().create_index(
1235+
(TextField("$.name", as_name="name"),
1236+
NumericField("$.num", as_name="num")),
1237+
definition=definition
1238+
)
1239+
1240+
client.json().set("king:1", Path.rootPath(), {"name": "henry",
1241+
"num": 42})
1242+
client.json().set("king:2", Path.rootPath(), {"name": "james",
1243+
"num": 3.14})
1244+
1245+
res = client.ft().search("@name:henry")
1246+
assert res.docs[0].id == "king:1"
1247+
assert res.docs[0].json == '{"name":"henry","num":42}'
1248+
assert res.total == 1
1249+
1250+
res = client.ft().search("@num:[0 10]")
1251+
assert res.docs[0].id == "king:2"
1252+
assert res.docs[0].json == '{"name":"james","num":3.14}'
1253+
assert res.total == 1
1254+
1255+
# Tests returns an error if path contain special characters (user should
1256+
# use an alias)
1257+
with pytest.raises(Exception):
1258+
client.ft().search("@$.name:henry")
1259+
1260+
1261+
@pytest.mark.redismod
1262+
@skip_ifmodversion_lt("2.2.0", "search")
1263+
def test_json_with_multipath(client):
1264+
"""
1265+
Create definition with IndexType.JSON as index type (ON JSON),
1266+
and use json client to test it.
1267+
"""
1268+
definition = IndexDefinition(prefix=["king:"], index_type=IndexType.JSON)
1269+
client.ft().create_index(
1270+
(TagField("$..name", as_name="name")),
1271+
definition=definition
1272+
)
1273+
1274+
client.json().set("king:1", Path.rootPath(),
1275+
{"name": "henry", "country": {"name": "england"}})
1276+
1277+
res = client.ft().search("@name:{henry}")
1278+
assert res.docs[0].id == "king:1"
1279+
assert res.docs[0].json == '{"name":"henry","country":{"name":"england"}}'
1280+
assert res.total == 1
1281+
1282+
res = client.ft().search("@name:{england}")
1283+
assert res.docs[0].id == "king:1"
1284+
assert res.docs[0].json == '{"name":"henry","country":{"name":"england"}}'
1285+
assert res.total == 1
1286+
1287+
1288+
@pytest.mark.redismod
1289+
@skip_ifmodversion_lt("2.2.0", "search")
1290+
def test_json_with_jsonpath(client):
1291+
definition = IndexDefinition(index_type=IndexType.JSON)
1292+
client.ft().create_index(
1293+
(TextField('$["prod:name"]', as_name="name"),
1294+
TextField('$.prod:name', as_name="name_unsupported")),
1295+
definition=definition
1296+
)
1297+
1298+
client.json().set("doc:1", Path.rootPath(), {"prod:name": "RediSearch"})
1299+
1300+
# query for a supported field succeeds
1301+
res = client.ft().search(Query("@name:RediSearch"))
1302+
assert res.total == 1
1303+
assert res.docs[0].id == "doc:1"
1304+
assert res.docs[0].json == '{"prod:name":"RediSearch"}'
1305+
1306+
# query for an unsupported field fails
1307+
res = client.ft().search("@name_unsupported:RediSearch")
1308+
assert res.total == 0
1309+
1310+
# return of a supported field succeeds
1311+
res = client.ft().search(Query("@name:RediSearch").return_field("name"))
1312+
assert res.total == 1
1313+
assert res.docs[0].id == "doc:1"
1314+
assert res.docs[0].name == 'RediSearch'
1315+
1316+
# return of an unsupported field fails
1317+
res = client.ft().search(Query("@name:RediSearch")
1318+
.return_field("name_unsupported"))
1319+
assert res.total == 1
1320+
assert res.docs[0].id == "doc:1"
1321+
with pytest.raises(Exception):
1322+
res.docs[0].name_unsupported

0 commit comments

Comments
 (0)