mirror of
https://github.com/natelandau/obsidian-metadata.git
synced 2025-11-17 01:13:39 -05:00
feat: greatly improve capturing all formats of inline metadata (#41)
feat: greatly improve capturing metadata all formats of inline metadata
This commit is contained in:
209
tests/metadata_test.py
Normal file
209
tests/metadata_test.py
Normal file
@@ -0,0 +1,209 @@
|
||||
# type: ignore
|
||||
"""Test the InlineField class."""
|
||||
|
||||
import pytest
|
||||
|
||||
from obsidian_metadata.models.enums import MetadataType, Wrapping
|
||||
from obsidian_metadata.models.metadata import InlineField, dict_to_yaml
|
||||
|
||||
|
||||
def test_dict_to_yaml_1():
|
||||
"""Test dict_to_yaml() function.
|
||||
|
||||
GIVEN a dictionary
|
||||
WHEN values contain lists
|
||||
THEN confirm the output is not sorted
|
||||
"""
|
||||
test_dict = {"k2": ["v1", "v2"], "k1": ["v1", "v2"]}
|
||||
assert dict_to_yaml(test_dict) == "k2:\n - v1\n - v2\nk1:\n - v1\n - v2\n"
|
||||
|
||||
|
||||
def test_dict_to_yaml_2():
|
||||
"""Test dict_to_yaml() function.
|
||||
|
||||
GIVEN a dictionary
|
||||
WHEN values contain lists and sort_keys is True
|
||||
THEN confirm the output is sorted
|
||||
"""
|
||||
test_dict = {"k2": ["v1", "v2"], "k1": ["v1", "v2"]}
|
||||
assert dict_to_yaml(test_dict, sort_keys=True) == "k1:\n - v1\n - v2\nk2:\n - v1\n - v2\n"
|
||||
|
||||
|
||||
def test_dict_to_yaml_3():
|
||||
"""Test dict_to_yaml() function.
|
||||
|
||||
GIVEN a dictionary
|
||||
WHEN values contain a list with a single value
|
||||
THEN confirm single-value lists are converted to strings
|
||||
"""
|
||||
test_dict = {"k2": ["v1"], "k1": ["v1", "v2"]}
|
||||
assert dict_to_yaml(test_dict, sort_keys=True) == "k1:\n - v1\n - v2\nk2: v1\n"
|
||||
|
||||
|
||||
def test_init_1():
|
||||
"""Test creating an InlineField object.
|
||||
|
||||
GIVEN an inline tag
|
||||
WHEN an InlineField object is created
|
||||
THEN confirm the object's attributes match the expected values
|
||||
"""
|
||||
obj = InlineField(
|
||||
meta_type=MetadataType.TAGS,
|
||||
key=None,
|
||||
value="tag1",
|
||||
)
|
||||
assert obj.meta_type == MetadataType.TAGS
|
||||
assert obj.key is None
|
||||
assert obj.value == "tag1"
|
||||
assert obj.normalized_value == "tag1"
|
||||
assert obj.wrapping == Wrapping.NONE
|
||||
assert obj.clean_key is None
|
||||
assert obj.normalized_key is None
|
||||
assert not obj.key_open
|
||||
assert not obj.key_close
|
||||
assert obj.is_changed is False
|
||||
|
||||
|
||||
def test_init_2():
|
||||
"""Test creating an InlineField object.
|
||||
|
||||
GIVEN an inline key/value pair
|
||||
WHEN an InlineField object is created
|
||||
THEN confirm the object's attributes match the expected values
|
||||
"""
|
||||
obj = InlineField(meta_type=MetadataType.INLINE, key="key", value="value")
|
||||
assert obj.meta_type == MetadataType.INLINE
|
||||
assert obj.key == "key"
|
||||
assert obj.value == "value"
|
||||
assert obj.normalized_value == "value"
|
||||
assert obj.wrapping == Wrapping.NONE
|
||||
assert obj.clean_key == "key"
|
||||
assert obj.normalized_key == "key"
|
||||
assert not obj.key_open
|
||||
assert not obj.key_close
|
||||
assert obj.is_changed is False
|
||||
|
||||
obj = InlineField(
|
||||
meta_type=MetadataType.INLINE,
|
||||
key="key",
|
||||
value="value",
|
||||
wrapping=Wrapping.PARENS,
|
||||
)
|
||||
assert obj.meta_type == MetadataType.INLINE
|
||||
assert obj.key == "key"
|
||||
assert obj.value == "value"
|
||||
assert obj.normalized_value == "value"
|
||||
assert obj.wrapping == Wrapping.PARENS
|
||||
assert obj.clean_key == "key"
|
||||
assert obj.normalized_key == "key"
|
||||
assert not obj.key_open
|
||||
assert not obj.key_close
|
||||
assert obj.is_changed is False
|
||||
|
||||
obj = InlineField(
|
||||
meta_type=MetadataType.INLINE,
|
||||
key="**key**",
|
||||
value="value",
|
||||
wrapping=Wrapping.BRACKETS,
|
||||
)
|
||||
assert obj.meta_type == MetadataType.INLINE
|
||||
assert obj.key == "**key**"
|
||||
assert obj.value == "value"
|
||||
assert obj.normalized_value == "value"
|
||||
assert obj.wrapping == Wrapping.BRACKETS
|
||||
assert obj.clean_key == "key"
|
||||
assert obj.normalized_key == "key"
|
||||
assert obj.key_open == "**"
|
||||
assert obj.key_close == "**"
|
||||
assert obj.is_changed is False
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
(
|
||||
"original",
|
||||
"cleaned",
|
||||
"normalized",
|
||||
"key_open",
|
||||
"key_close",
|
||||
),
|
||||
[
|
||||
("foo", "foo", "foo", "", ""),
|
||||
("🌱/🌿", "🌱/🌿", "🌱/🌿", "", ""),
|
||||
("FOO 1", "FOO 1", "foo-1", "", ""),
|
||||
("**key foo**", "key foo", "key-foo", "**", "**"),
|
||||
("## KEY", "KEY", "key", "## ", ""),
|
||||
],
|
||||
)
|
||||
def test_init_3(original, cleaned, normalized, key_open, key_close):
|
||||
"""Test creating an InlineField object.
|
||||
|
||||
GIVEN an InlineField object is created
|
||||
WHEN the key needs to be normalized
|
||||
THEN confirm clean_key() returns the expected value
|
||||
"""
|
||||
obj = InlineField(meta_type=MetadataType.INLINE, key=original, value="value")
|
||||
assert obj.clean_key == cleaned
|
||||
assert obj.normalized_key == normalized
|
||||
assert obj.key_open == key_open
|
||||
assert obj.key_close == key_close
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("original", "normalized"),
|
||||
[("foo", "foo"), ("🌱/🌿", "🌱/🌿"), (" value ", "value"), (" ", "-"), ("", "-")],
|
||||
)
|
||||
def test_init_4(original, normalized):
|
||||
"""Test creating an InlineField object.
|
||||
|
||||
GIVEN an InlineField object is created
|
||||
WHEN the value needs to be normalized
|
||||
THEN create the normalized_value attribute
|
||||
"""
|
||||
obj = InlineField(meta_type=MetadataType.INLINE, key="key", value=original)
|
||||
assert obj.value == original
|
||||
assert obj.normalized_value == normalized
|
||||
|
||||
|
||||
def test_inline_field_init_5():
|
||||
"""Test updating the is_changed attribute.
|
||||
|
||||
GIVEN creating an object
|
||||
WHEN is_changed set to True at init
|
||||
THEN confirm is_changed is True
|
||||
"""
|
||||
obj = InlineField(meta_type=MetadataType.TAGS, key="key", value="tag1", is_changed=True)
|
||||
assert obj.is_changed is True
|
||||
|
||||
|
||||
def test_inline_field_init_6():
|
||||
"""Test updating the is_changed attribute.
|
||||
|
||||
GIVEN creating an object
|
||||
WHEN is_changed set to True at after init
|
||||
THEN confirm is_changed is True
|
||||
"""
|
||||
obj = InlineField(meta_type=MetadataType.TAGS, key="key", value="tag1", is_changed=False)
|
||||
assert obj.is_changed is False
|
||||
obj.is_changed = True
|
||||
assert obj.is_changed is True
|
||||
|
||||
|
||||
def test_inline_field_init_4():
|
||||
"""Test updating the is_changed attribute.
|
||||
|
||||
GIVEN creating an object
|
||||
WHEN key_open and key_close are set after init
|
||||
THEN confirm they are set correctly
|
||||
"""
|
||||
obj = InlineField(
|
||||
meta_type=MetadataType.INLINE,
|
||||
key="_key_",
|
||||
value="value",
|
||||
is_changed=False,
|
||||
)
|
||||
assert obj.key_open == "_"
|
||||
assert obj.key_close == "_"
|
||||
obj.key_open = "**"
|
||||
obj.key_close = "**"
|
||||
assert obj.key_open == "**"
|
||||
assert obj.key_close == "**"
|
||||
Reference in New Issue
Block a user