2024-05-09 15:40:36 +02:00
|
|
|
# SPDX-FileCopyrightText: 2022-present deepset GmbH <info@deepset.ai>
|
|
|
|
#
|
|
|
|
# SPDX-License-Identifier: Apache-2.0
|
2025-05-26 17:22:51 +01:00
|
|
|
|
2023-09-20 14:49:17 +02:00
|
|
|
import pytest
|
|
|
|
|
2023-11-24 14:48:43 +01:00
|
|
|
from haystack import Document
|
|
|
|
from haystack.components.routers.metadata_router import MetadataRouter
|
2023-09-20 14:49:17 +02:00
|
|
|
|
|
|
|
|
|
|
|
class TestMetadataRouter:
|
|
|
|
def test_run(self):
|
|
|
|
rules = {
|
2023-11-24 11:22:46 +01:00
|
|
|
"edge_1": {
|
|
|
|
"operator": "AND",
|
|
|
|
"conditions": [
|
|
|
|
{"field": "meta.created_at", "operator": ">=", "value": "2023-01-01"},
|
|
|
|
{"field": "meta.created_at", "operator": "<", "value": "2023-04-01"},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
"edge_2": {
|
|
|
|
"operator": "AND",
|
|
|
|
"conditions": [
|
|
|
|
{"field": "meta.created_at", "operator": ">=", "value": "2023-04-01"},
|
|
|
|
{"field": "meta.created_at", "operator": "<", "value": "2023-07-01"},
|
|
|
|
],
|
|
|
|
},
|
2023-09-20 14:49:17 +02:00
|
|
|
}
|
|
|
|
router = MetadataRouter(rules=rules)
|
|
|
|
documents = [
|
2023-10-31 12:44:04 +01:00
|
|
|
Document(meta={"created_at": "2023-02-01"}),
|
|
|
|
Document(meta={"created_at": "2023-05-01"}),
|
|
|
|
Document(meta={"created_at": "2023-08-01"}),
|
2023-09-20 14:49:17 +02:00
|
|
|
]
|
|
|
|
output = router.run(documents=documents)
|
2023-10-31 12:44:04 +01:00
|
|
|
assert output["edge_1"][0].meta["created_at"] == "2023-02-01"
|
|
|
|
assert output["edge_2"][0].meta["created_at"] == "2023-05-01"
|
|
|
|
assert output["unmatched"][0].meta["created_at"] == "2023-08-01"
|
2025-02-04 05:51:06 -08:00
|
|
|
|
|
|
|
def test_run_wrong_filter(self):
|
|
|
|
rules = {
|
|
|
|
"edge_1": {"field": "meta.created_at", "operator": ">=", "value": "2023-01-01"},
|
|
|
|
"wrong_filter": {"wrong_value": "meta.created_at == 2023-04-01"},
|
|
|
|
}
|
|
|
|
with pytest.raises(ValueError):
|
|
|
|
MetadataRouter(rules=rules)
|
|
|
|
|
|
|
|
def test_run_datetime_with_timezone(self):
|
|
|
|
rules = {
|
|
|
|
"edge_1": {
|
|
|
|
"operator": "AND",
|
|
|
|
"conditions": [{"field": "meta.created_at", "operator": ">=", "value": "2025-02-01"}],
|
|
|
|
}
|
|
|
|
}
|
|
|
|
router = MetadataRouter(rules=rules)
|
|
|
|
documents = [
|
|
|
|
Document(meta={"created_at": "2025-02-03T12:45:46.435816Z"}),
|
|
|
|
Document(meta={"created_at": "2025-02-01T12:45:46.435816Z"}),
|
|
|
|
Document(meta={"created_at": "2025-01-03T12:45:46.435816Z"}),
|
|
|
|
]
|
|
|
|
output = router.run(documents=documents)
|
|
|
|
assert len(output["edge_1"]) == 2
|
|
|
|
assert output["edge_1"][0].meta["created_at"] == "2025-02-03T12:45:46.435816Z"
|
|
|
|
assert output["edge_1"][1].meta["created_at"] == "2025-02-01T12:45:46.435816Z"
|
|
|
|
assert output["unmatched"][0].meta["created_at"] == "2025-01-03T12:45:46.435816Z"
|