From 8848d2dcee13932ac00d41fbf3a92f549d1b2fab Mon Sep 17 00:00:00 2001 From: Tanmay Kumar Date: Sat, 26 Sep 2026 01:08:42 +0530 Subject: [PATCH] test: cover non-filterable metadata rules --- tests/test_metadata.py | 58 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/tests/test_metadata.py b/tests/test_metadata.py index 8ab2ce0..82b46ca 100644 --- a/tests/test_metadata.py +++ b/tests/test_metadata.py @@ -1,5 +1,6 @@ """Tests for metadata splitting / auto-generation / filter building.""" +from copy import deepcopy from datetime import datetime, timezone import pytest @@ -97,6 +98,61 @@ def test_split_respects_filterable_keys_allowlist(): assert ddb["author"] == "abhi" +def test_split_excludes_non_filterable_keys_from_s3(): + cfg = _cfg(non_filterable_keys=["internal_id"]) + s3, ddb = split_metadata( + {"language": "en", "internal_id": "customer-42"}, + cfg, + "customers", + ) + + assert s3["language"] == "en" + assert "internal_id" not in s3 + assert ddb["internal_id"] == "customer-42" + + +def test_split_non_filterable_keys_override_filterable_keys(): + cfg = _cfg( + filterable_keys=["language", "author"], + non_filterable_keys=["author"], + ) + s3, ddb = split_metadata( + {"language": "en", "author": "Tanmay"}, + cfg, + "customers", + ) + + assert s3["language"] == "en" + assert "author" not in s3 + assert ddb["author"] == "Tanmay" + + +def test_split_keeps_namespace_when_marked_non_filterable(): + cfg = _cfg(non_filterable_keys=[NS_METADATA_KEY]) + s3, _ = split_metadata({}, cfg, "customers") + + assert s3[NS_METADATA_KEY] == "customers" + + +def test_split_does_not_mutate_input_metadata(): + metadata = { + "language": "en", + "tags": ["python", "aws"], + "details": {"customer_id": 42}, + } + original = deepcopy(metadata) + + _, ddb = split_metadata( + metadata, + _cfg(non_filterable_keys=["language"]), + "customers", + ) + + assert metadata == original + assert ddb == original + assert ddb is not metadata + + def test_split_text_mirror_optional(): cfg = _cfg(store_text_in_s3vectors=True, text_mirror_max_chars=5) s3, _ = split_metadata({}, cfg, "ns", text="abcdefgh") @@ -302,4 +358,4 @@ def test_build_s3_filter_operator_combinations( expected, ): """Table-driven tests covering $and, $or, $in, $gte and other operators.""" - assert build_s3_filter(user_filter, namespace) == expected \ No newline at end of file + assert build_s3_filter(user_filter, namespace) == expected