datahub/metadata-ingestion/tests/unit/config/test_key_value_pattern.py
2024-10-16 19:18:32 -07:00

63 lines
2.1 KiB
Python

from datahub.configuration.common import KeyValuePattern
def test_empty_pattern() -> None:
pattern = KeyValuePattern.all()
assert pattern.value("foo") == []
def test_basic_pattern() -> None:
pattern = KeyValuePattern(rules={"foo": ["bar", "baz"]})
assert pattern.value("foo") == ["bar", "baz"]
assert pattern.value("bar") == []
def test_regex_pattern() -> None:
pattern = KeyValuePattern(rules={"foo.*": ["bar", "baz"]})
assert pattern.value("foo") == ["bar", "baz"]
assert pattern.value("foo.bar") == ["bar", "baz"]
assert pattern.value("bar") == []
def test_no_fallthrough_pattern() -> None:
pattern = KeyValuePattern(rules={"foo.*": ["bar", "baz"], ".*": ["qux"]})
assert pattern.value("foo") == ["bar", "baz"]
assert pattern.value("foo.bar") == ["bar", "baz"]
assert pattern.value("bar") == ["qux"]
def test_fallthrough_pattern() -> None:
pattern = KeyValuePattern(
rules={"foo.*": ["bar", "baz"], ".*": ["qux"]}, first_match_only=False
)
assert pattern.value("foo") == ["bar", "baz", "qux"]
assert pattern.value("foo.bar") == ["bar", "baz", "qux"]
assert pattern.value("bar") == ["qux"]
def test_fullmatch_pattern() -> None:
pattern = KeyValuePattern(rules={"^foo$": ["bar", "baz"]})
assert pattern.value("foo") == ["bar", "baz"]
assert pattern.value("foo.bar") == []
def test_fullmatch_mix_pattern() -> None:
pattern = KeyValuePattern(
rules={
"^aggregate.player_segment$": ["urn:li:tag:Player360"],
"table_a": ["urn:li:tag:tag_a"],
".*marketing.*": ["urn:li:tag:marketing"],
},
first_match_only=False,
)
assert pattern.value("aggregate.player_segment") == ["urn:li:tag:Player360"]
assert pattern.value("aggregate.player_segment_2") == []
assert pattern.value("marketing.table_a") == [
# The matches implicitly have a ^ at the beginning, so table_a is not a match.
"urn:li:tag:marketing",
]
assert pattern.value("table_a.marketing") == [
"urn:li:tag:tag_a",
"urn:li:tag:marketing",
]