mirror of
https://github.com/qdrant/qdrant.git
synced 2026-07-23 11:11:00 -05:00
Collection name under test is equal to the test module name, without `.py` suffix. * Helps by debugging/tracing failed tests and find relevant logs lines in qdrant log files * Opens up a possibility to run tests in parallel, given that there are no data sharing between test modules Change details: * defined module scoped `collection_name` fixture in `conftest.py` * removed `collection_name` module variable * each test signature modified to declare the dependency to `collection_name` fixture * `@pytest.mark.parametrize` migrated to `@pytest-cases.parametrize` in cases when `collection_name` was used as the value
233 lines
6.8 KiB
Python
233 lines
6.8 KiB
Python
import pytest
|
|
|
|
from .helpers.collection_setup import basic_collection_setup, drop_collection
|
|
from .helpers.helpers import request_with_validation
|
|
|
|
|
|
@pytest.fixture(autouse=True, scope="module")
|
|
def setup(on_disk_vectors, collection_name):
|
|
basic_collection_setup(collection_name=collection_name, on_disk_vectors=on_disk_vectors)
|
|
|
|
# add extra fields with other datatypes
|
|
request_with_validation(
|
|
api="/collections/{collection_name}/points",
|
|
method="PUT",
|
|
path_params={"collection_name": collection_name},
|
|
query_params={"wait": "true"},
|
|
body={
|
|
"points": [
|
|
{
|
|
"id": 100,
|
|
"vector": {},
|
|
"payload": {
|
|
"integer": 3,
|
|
"uuid": "a64a8051-3ee7-4881-8bc6-691d25c70d54",
|
|
"boolean": True,
|
|
},
|
|
},
|
|
{
|
|
"id": 101,
|
|
"vector": {},
|
|
"payload": {
|
|
"integer": 3,
|
|
"uuid": "a64a8051-3ee7-4881-8bc6-691d25c70d54",
|
|
"boolean": True,
|
|
},
|
|
},
|
|
{
|
|
"id": 102,
|
|
"vector": {},
|
|
"payload": {
|
|
"integer": 3,
|
|
"uuid": "7cb46fb3-e348-4762-93ad-7fb983d2b85e",
|
|
"boolean": False,
|
|
},
|
|
},
|
|
{
|
|
"id": 103,
|
|
"vector": {},
|
|
"payload": {
|
|
"integer": 0,
|
|
"uuid": "2b016c50-282c-4d80-b784-cefead291180",
|
|
"boolean": True,
|
|
},
|
|
},
|
|
{
|
|
"id": 104,
|
|
"vector": {},
|
|
"payload": {
|
|
"integer": 3,
|
|
"uuid": "a64a8051-3ee7-4881-8bc6-691d25c70d54",
|
|
"boolean": True,
|
|
},
|
|
},
|
|
{
|
|
"id": 105,
|
|
"vector": {},
|
|
"payload": {
|
|
"integer": 1,
|
|
"uuid": "a64a8051-3ee7-4881-8bc6-691d25c70d54",
|
|
"boolean": False,
|
|
},
|
|
},
|
|
{
|
|
"id": 106,
|
|
"vector": {},
|
|
"payload": {
|
|
"integer": 2,
|
|
"uuid": "7cb46fb3-e348-4762-93ad-7fb983d2b85e",
|
|
"boolean": False,
|
|
},
|
|
},
|
|
{
|
|
"id": 107,
|
|
"vector": {},
|
|
"payload": {
|
|
"integer": 0,
|
|
"uuid": "a64a8051-3ee7-4881-8bc6-691d25c70d54",
|
|
"boolean": True,
|
|
},
|
|
},
|
|
]
|
|
},
|
|
).raise_for_status()
|
|
|
|
request_with_validation(
|
|
api="/collections/{collection_name}/index",
|
|
method="PUT",
|
|
path_params={"collection_name": collection_name},
|
|
query_params={"wait": "true"},
|
|
body={
|
|
"field_name": "city",
|
|
"field_schema": "keyword",
|
|
},
|
|
).raise_for_status()
|
|
|
|
request_with_validation(
|
|
api="/collections/{collection_name}/index",
|
|
method="PUT",
|
|
path_params={"collection_name": collection_name},
|
|
query_params={"wait": "true"},
|
|
body={
|
|
"field_name": "integer",
|
|
"field_schema": "integer",
|
|
},
|
|
).raise_for_status()
|
|
|
|
request_with_validation(
|
|
api="/collections/{collection_name}/index",
|
|
method="PUT",
|
|
path_params={"collection_name": collection_name},
|
|
query_params={"wait": "true"},
|
|
body={
|
|
"field_name": "uuid",
|
|
"field_schema": "uuid",
|
|
},
|
|
).raise_for_status()
|
|
|
|
request_with_validation(
|
|
api="/collections/{collection_name}/index",
|
|
method="PUT",
|
|
path_params={"collection_name": collection_name},
|
|
query_params={"wait": "true"},
|
|
body={
|
|
"field_name": "boolean",
|
|
"field_schema": "bool",
|
|
},
|
|
).raise_for_status()
|
|
|
|
yield
|
|
drop_collection(collection_name=collection_name)
|
|
|
|
|
|
def test_basic_facet(collection_name):
|
|
response = request_with_validation(
|
|
api="/collections/{collection_name}/facet",
|
|
method="POST",
|
|
path_params={"collection_name": collection_name},
|
|
body={
|
|
"key": "city",
|
|
# limit is optional
|
|
},
|
|
)
|
|
|
|
assert response.ok, response.json()
|
|
|
|
city_facet = response.json()["result"]
|
|
assert city_facet == {
|
|
"hits": [
|
|
# Sorted by count, then by value
|
|
{"value": "Berlin", "count": 3},
|
|
{"value": "London", "count": 2},
|
|
{"value": "Moscow", "count": 2},
|
|
]
|
|
}
|
|
|
|
|
|
def test_integer_facet(collection_name):
|
|
response = request_with_validation(
|
|
api="/collections/{collection_name}/facet",
|
|
method="POST",
|
|
path_params={"collection_name": collection_name},
|
|
body={
|
|
"key": "integer",
|
|
},
|
|
)
|
|
|
|
assert response.ok, response.json()
|
|
|
|
city_facet = response.json()["result"]
|
|
assert city_facet == {
|
|
"hits": [
|
|
# Sorted by count, then by value
|
|
{"value": 3, "count": 4},
|
|
{"value": 0, "count": 2},
|
|
{"value": 1, "count": 1},
|
|
{"value": 2, "count": 1},
|
|
]
|
|
}
|
|
|
|
|
|
def test_uuid_facet(collection_name):
|
|
response = request_with_validation(
|
|
api="/collections/{collection_name}/facet",
|
|
method="POST",
|
|
path_params={"collection_name": collection_name},
|
|
body={
|
|
"key": "uuid",
|
|
},
|
|
)
|
|
|
|
assert response.ok, response.json()
|
|
|
|
city_facet = response.json()["result"]
|
|
assert city_facet == {
|
|
"hits": [
|
|
{"value": "a64a8051-3ee7-4881-8bc6-691d25c70d54", "count": 5},
|
|
{"value": "7cb46fb3-e348-4762-93ad-7fb983d2b85e", "count": 2},
|
|
{"value": "2b016c50-282c-4d80-b784-cefead291180", "count": 1},
|
|
]
|
|
}
|
|
|
|
|
|
def test_boolean_facet(collection_name):
|
|
response = request_with_validation(
|
|
api="/collections/{collection_name}/facet",
|
|
method="POST",
|
|
path_params={"collection_name": collection_name},
|
|
body={
|
|
"key": "boolean",
|
|
},
|
|
)
|
|
|
|
assert response.ok, response.json()
|
|
|
|
city_facet = response.json()["result"]
|
|
assert city_facet == {
|
|
"hits": [
|
|
# Sorted by count, then by value
|
|
{"value": True, "count": 5},
|
|
{"value": False, "count": 3},
|
|
]
|
|
}
|