mirror of
https://github.com/natelandau/obsidian-metadata.git
synced 2025-11-14 16:03:47 -05:00
fix: find more instances of inline metadata
This commit is contained in:
426
tests/metadata_inline_test.py
Normal file
426
tests/metadata_inline_test.py
Normal file
@@ -0,0 +1,426 @@
|
||||
# type: ignore
|
||||
"""Test inline metadata from metadata.py."""
|
||||
|
||||
from obsidian_metadata.models.metadata import InlineMetadata
|
||||
|
||||
FRONTMATTER_CONTENT: str = """
|
||||
---
|
||||
tags:
|
||||
- tag_1
|
||||
- tag_2
|
||||
-
|
||||
- 📅/tag_3
|
||||
frontmatter_Key1: "frontmatter_Key1_value"
|
||||
frontmatter_Key2: ["note", "article"]
|
||||
shared_key1: "shared_key1_value"
|
||||
---
|
||||
more content
|
||||
|
||||
---
|
||||
horizontal: rule
|
||||
---
|
||||
"""
|
||||
|
||||
INLINE_CONTENT = """\
|
||||
key1:: value1
|
||||
key1:: value2
|
||||
key1:: value3
|
||||
key2:: value1
|
||||
Paragraph of text with an [inline_key:: value1] and [inline_key:: value2] and [inline_key:: value3] which should do it.
|
||||
> blockquote_key:: value1
|
||||
> blockquote_key:: value2
|
||||
|
||||
- list_key:: value1
|
||||
- list_key:: value2
|
||||
|
||||
1. list_key:: value1
|
||||
2. list_key:: value2
|
||||
"""
|
||||
|
||||
|
||||
def test__grab_inline_metadata_1():
|
||||
"""Test grab inline metadata.
|
||||
|
||||
GIVEN content that has no inline metadata
|
||||
WHEN grab_inline_metadata is called
|
||||
THEN an empty dict is returned
|
||||
|
||||
"""
|
||||
content = """
|
||||
---
|
||||
frontmatter_key1: frontmatter_key1_value
|
||||
---
|
||||
not_a_key: not_a_value
|
||||
```
|
||||
key:: in_codeblock
|
||||
```
|
||||
"""
|
||||
inline = InlineMetadata(content)
|
||||
assert inline.dict == {}
|
||||
|
||||
|
||||
def test__grab_inline_metadata_2():
|
||||
"""Test grab inline metadata.
|
||||
|
||||
GIVEN content that has inline metadata
|
||||
WHEN grab_inline_metadata is called
|
||||
THEN the inline metadata is parsed and returned as a dict
|
||||
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.dict == {
|
||||
"blockquote_key": ["value1", "value2"],
|
||||
"inline_key": ["value1", "value2", "value3"],
|
||||
"key1": ["value1", "value2", "value3"],
|
||||
"key2": ["value1"],
|
||||
"list_key": ["value1", "value2", "value1", "value2"],
|
||||
}
|
||||
|
||||
|
||||
def test_inline_metadata_add_1():
|
||||
"""Test InlineMetadata add() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN the add() method is called with an existing key
|
||||
THEN return False
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.add("key1") is False
|
||||
|
||||
|
||||
def test_inline_metadata_add_2():
|
||||
"""Test InlineMetadata add() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN the add() method is called with an existing key and existing value
|
||||
THEN return False
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.add("key1", "value1") is False
|
||||
|
||||
|
||||
def test_inline_metadata_add_3():
|
||||
"""Test InlineMetadata add() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN the add() method is called with a new key
|
||||
THEN return True and add the key to the dict
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.add("added_key") is True
|
||||
assert "added_key" in inline.dict
|
||||
|
||||
|
||||
def test_inline_metadata_add_4():
|
||||
"""Test InlineMetadata add() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN the add() method is called with a new key and a new value
|
||||
THEN return True and add the key and the value to the dict
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.add("added_key", "added_value") is True
|
||||
assert inline.dict["added_key"] == ["added_value"]
|
||||
|
||||
|
||||
def test_inline_metadata_add_5():
|
||||
"""Test InlineMetadata add() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN the add() method is called with an existing key and a new value
|
||||
THEN return True and add the value to the dict
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.add("key1", "new_value") is True
|
||||
assert inline.dict["key1"] == ["value1", "value2", "value3", "new_value"]
|
||||
|
||||
|
||||
def test_inline_metadata_add_6():
|
||||
"""Test InlineMetadata add() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN the add() method is called with an existing key and a list of new values
|
||||
THEN return True and add the values to the dict
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.add("key2", ["new_value", "new_value2"]) is True
|
||||
assert inline.dict["key2"] == ["new_value", "new_value2", "value1"]
|
||||
|
||||
|
||||
def test_inline_metadata_add_7():
|
||||
"""Test InlineMetadata add() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN the add() method is called with an existing key and a list of values including an existing value
|
||||
THEN return True and add the new values to the dict
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.add("key1", ["value1", "new_value", "new_value2"]) is True
|
||||
assert inline.dict["key1"] == ["new_value", "new_value2", "value1", "value2", "value3"]
|
||||
|
||||
|
||||
def test_inline_metadata_contains_1():
|
||||
"""Test InlineMetadata contains() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN the contains() method is called with a key
|
||||
THEN return True if the key is found
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.contains("key1") is True
|
||||
|
||||
|
||||
def test_inline_metadata_contains_2():
|
||||
"""Test InlineMetadata contains() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN the contains() method is called with a key
|
||||
THEN return False if the key is not found
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.contains("no_key") is False
|
||||
|
||||
|
||||
def test_inline_metadata_contains_3():
|
||||
"""Test InlineMetadata contains() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN the contains() method is called with a key and a value
|
||||
THEN return True if the key and value is found
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.contains("key1", "value1") is True
|
||||
|
||||
|
||||
def test_inline_metadata_contains_4():
|
||||
"""Test InlineMetadata contains() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN the contains() method is called with a key and a value
|
||||
THEN return False if the key and value is not found
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.contains("key1", "no value") is False
|
||||
|
||||
|
||||
def test_inline_metadata_contains_5():
|
||||
"""Test InlineMetadata contains() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN the contains() method is called with a key regex
|
||||
THEN return True if a key matches the regex
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.contains(r"\d$", is_regex=True) is True
|
||||
|
||||
|
||||
def test_inline_metadata_contains_6():
|
||||
"""Test InlineMetadata contains() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN the contains() method is called with a key regex
|
||||
THEN return False if no key matches the regex
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.contains(r"^\d", is_regex=True) is False
|
||||
|
||||
|
||||
def test_inline_metadata_contains_7():
|
||||
"""Test InlineMetadata contains() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN the contains() method is called with a key and value regex
|
||||
THEN return True if a value matches the regex
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.contains(r"key\d", r"\w\d", is_regex=True) is True
|
||||
|
||||
|
||||
def test_inline_metadata_contains_8():
|
||||
"""Test InlineMetadata contains() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN the contains() method is called with a key and value regex
|
||||
THEN return False if a value does not match the regex
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.contains("key1", r"_\d", is_regex=True) is False
|
||||
|
||||
|
||||
def test_inline_metadata_delete_1():
|
||||
"""Test InlineMetadata delete() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN the delete() method is called with a key that does not exist
|
||||
THEN return False
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.delete("no key") is False
|
||||
|
||||
|
||||
def test_inline_metadata_delete_2():
|
||||
"""Test InlineMetadata delete() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN the delete() method is called with an existing key and a value that does not exist
|
||||
THEN return False
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.delete("key1", "no value") is False
|
||||
|
||||
|
||||
def test_inline_metadata_delete_3():
|
||||
"""Test InlineMetadata delete() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN the delete() method is called with a regex that does not match any keys
|
||||
THEN return False
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.delete(r"\d{3}") is False
|
||||
|
||||
|
||||
def test_inline_metadata_delete_4():
|
||||
"""Test InlineMetadata delete() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN the delete() method is called with an existing key and a regex that does not match any values
|
||||
THEN return False
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.delete("key1", r"\d{5}") is False
|
||||
|
||||
|
||||
def test_inline_metadata_delete_5():
|
||||
"""Test InlineMetadata delete() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN the delete() method is called with an existing key and an existing value
|
||||
THEN return True and delete the value from the dict
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.delete("key1", "value1") is True
|
||||
assert "value1" not in inline.dict["key1"]
|
||||
assert "key1" in inline.dict
|
||||
|
||||
|
||||
def test_inline_metadata_delete_6():
|
||||
"""Test InlineMetadata delete() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN the delete() method is called with an existing key
|
||||
THEN return True and delete the key from the dict
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.delete("key1") is True
|
||||
assert "key1" not in inline.dict
|
||||
|
||||
|
||||
def test_inline_metadata_delete_7():
|
||||
"""Test InlineMetadata delete() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN the delete() method is called with a regex that matches a key
|
||||
THEN return True and delete the matching keys from the dict
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.delete(r"key\w+") is True
|
||||
assert "key1" not in inline.dict
|
||||
assert "key2" not in inline.dict
|
||||
|
||||
|
||||
def test_inline_metadata_delete_8():
|
||||
"""Test InlineMetadata delete() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN the delete() method is called with an existing key and a regex that matches values
|
||||
THEN return True and delete the matching values
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.delete("key1", r"\w+\d") is True
|
||||
assert "value1" not in inline.dict["key1"]
|
||||
assert "value2" not in inline.dict["key1"]
|
||||
assert "value3" not in inline.dict["key1"]
|
||||
|
||||
|
||||
def test_inline_metadata_has_changes_1():
|
||||
"""Test InlineMetadata has_changes() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN no changes have been made to the object
|
||||
THEN return False
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.has_changes() is False
|
||||
|
||||
|
||||
def test_inline_metadata_has_changes_2():
|
||||
"""Test InlineMetadata has_changes() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN changes have been made to the object
|
||||
THEN return True
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
inline.dict["new key"] = ["new value"]
|
||||
assert inline.has_changes() is True
|
||||
|
||||
|
||||
def test_inline_metadata_rename_1():
|
||||
"""Test InlineMetadata rename() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN the rename() method is called with a key
|
||||
THEN return False if the key is not found
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.rename("no key", "new key") is False
|
||||
|
||||
|
||||
def test_inline_metadata_rename_2():
|
||||
"""Test InlineMetadata rename() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN the rename() method is called with an existing key and non-existing value
|
||||
THEN return False
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.rename("key1", "no value", "new value") is False
|
||||
|
||||
|
||||
def test_inline_metadata_rename_3():
|
||||
"""Test InlineMetadata rename() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN the rename() method is called with an existing key
|
||||
THEN return True and rename the key
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.rename("key1", "new key") is True
|
||||
assert "key1" not in inline.dict
|
||||
assert inline.dict["new key"] == ["value1", "value2", "value3"]
|
||||
|
||||
|
||||
def test_inline_metadata_rename_4():
|
||||
"""Test InlineMetadata rename() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN the rename() method is called with an existing key and value
|
||||
THEN return True and rename the value
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.rename("key1", "value1", "new value") is True
|
||||
assert "value1" not in inline.dict["key1"]
|
||||
assert "new value" in inline.dict["key1"]
|
||||
|
||||
|
||||
def test_inline_metadata_rename_5():
|
||||
"""Test InlineMetadata rename() method.
|
||||
|
||||
GIVEN a InlineMetadata object
|
||||
WHEN the rename() method is called with an existing key and value and the new value already exists
|
||||
THEN return True and remove the old value leaving one instance of the new value
|
||||
"""
|
||||
inline = InlineMetadata(INLINE_CONTENT)
|
||||
assert inline.rename("key1", "value1", "value2") is True
|
||||
assert inline.dict["key1"] == ["value2", "value3"]
|
||||
Reference in New Issue
Block a user