mirror of
https://github.com/natelandau/obsidian-metadata.git
synced 2025-11-11 22:53:45 -05:00
210 lines
6.1 KiB
Python
210 lines
6.1 KiB
Python
# 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 == "**"
|