diff --git a/src/obsidian_metadata/models/metadata.py b/src/obsidian_metadata/models/metadata.py index 08fa312..2223a73 100644 --- a/src/obsidian_metadata/models/metadata.py +++ b/src/obsidian_metadata/models/metadata.py @@ -281,6 +281,7 @@ class Frontmatter: if key in self.dict and value not in self.dict[key]: if isinstance(value, list): self.dict[key].extend(value) + self.dict[key] = list(sorted(set(self.dict[key]))) return True self.dict[key].append(value) diff --git a/tests/alerts_test.py b/tests/alerts_test.py index 130b42c..ee8a2de 100644 --- a/tests/alerts_test.py +++ b/tests/alerts_test.py @@ -107,7 +107,7 @@ def test_logging(capsys, tmp_path, verbosity, log_to_file) -> None: if verbosity >= 3: assert logging.is_trace() is True captured = capsys.readouterr() - assert captured.out == "" + assert not captured.out assert logging.is_trace("trace text") is True captured = capsys.readouterr() @@ -128,7 +128,7 @@ def test_logging(capsys, tmp_path, verbosity, log_to_file) -> None: if verbosity >= 2: assert logging.is_debug() is True captured = capsys.readouterr() - assert captured.out == "" + assert not captured.out assert logging.is_debug("debug text") is True captured = capsys.readouterr() @@ -149,7 +149,7 @@ def test_logging(capsys, tmp_path, verbosity, log_to_file) -> None: if verbosity >= 1: assert logging.is_info() is True captured = capsys.readouterr() - assert captured.out == "" + assert not captured.out assert logging.is_info("info text") is True captured = capsys.readouterr() @@ -165,11 +165,11 @@ def test_logging(capsys, tmp_path, verbosity, log_to_file) -> None: log.info("This is Info logging") captured = capsys.readouterr() - assert captured.out == "" + assert not captured.out assert logging.is_default() is True captured = capsys.readouterr() - assert captured.out == "" + assert not captured.out assert logging.is_default("default text") is True captured = capsys.readouterr() diff --git a/tests/application_test.py b/tests/application_test.py index e9315d5..bcddf75 100644 --- a/tests/application_test.py +++ b/tests/application_test.py @@ -613,7 +613,7 @@ def test_transpose_metadata_1(test_application, mocker, capsys) -> None: assert "SUCCESS | Transposed Inline Metadata to Frontmatter in 5 notes" in captured -def test_transpose_metadata_2(test_application, mocker, capsys) -> None: +def test_transpose_metadata_2(test_application, mocker) -> None: """Transpose metadata. GIVEN a test application diff --git a/tests/metadata_test.py b/tests/metadata_test.py index 2770d9f..7e43d1c 100644 --- a/tests/metadata_test.py +++ b/tests/metadata_test.py @@ -133,6 +133,100 @@ def test_frontmatter_create_4(): assert frontmatter.dict == {} +def test_frontmatter_add_1(): + """Test frontmatter add() method. + + GIVEN a Frontmatter object + WHEN the add() method is called with an existing key + THEN return False + """ + frontmatter = Frontmatter(FRONTMATTER_CONTENT) + + assert frontmatter.add("frontmatter_Key1") is False + + +def test_frontmatter_add_2(): + """Test frontmatter add() method. + + GIVEN a Frontmatter object + WHEN the add() method is called with an existing key and existing value + THEN return False + """ + frontmatter = Frontmatter(FRONTMATTER_CONTENT) + assert frontmatter.add("frontmatter_Key1", "frontmatter_Key1_value") is False + + +def test_frontmatter_add_3(): + """Test frontmatter add() method. + + GIVEN a Frontmatter object + WHEN the add() method is called with a new key + THEN return True and add the key to the dict + """ + frontmatter = Frontmatter(FRONTMATTER_CONTENT) + assert frontmatter.add("added_key") is True + assert "added_key" in frontmatter.dict + + +def test_frontmatter_add_4(): + """Test frontmatter add() method. + + GIVEN a Frontmatter 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 + """ + frontmatter = Frontmatter(FRONTMATTER_CONTENT) + assert frontmatter.add("added_key", "added_value") is True + assert frontmatter.dict["added_key"] == ["added_value"] + + +def test_frontmatter_add_5(): + """Test frontmatter add() method. + + GIVEN a Frontmatter 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 + """ + frontmatter = Frontmatter(FRONTMATTER_CONTENT) + assert frontmatter.add("frontmatter_Key1", "new_value") is True + assert frontmatter.dict["frontmatter_Key1"] == ["frontmatter_Key1_value", "new_value"] + + +def test_frontmatter_add_6(): + """Test frontmatter add() method. + + GIVEN a Frontmatter 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 + """ + frontmatter = Frontmatter(FRONTMATTER_CONTENT) + assert frontmatter.add("frontmatter_Key1", ["new_value", "new_value2"]) is True + assert frontmatter.dict["frontmatter_Key1"] == [ + "frontmatter_Key1_value", + "new_value", + "new_value2", + ] + + +def test_frontmatter_add_7(): + """Test frontmatter add() method. + + GIVEN a Frontmatter 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 + """ + frontmatter = Frontmatter(FRONTMATTER_CONTENT) + assert ( + frontmatter.add("frontmatter_Key1", ["frontmatter_Key1_value", "new_value", "new_value2"]) + is True + ) + assert frontmatter.dict["frontmatter_Key1"] == [ + "frontmatter_Key1_value", + "new_value", + "new_value2", + ] + + def test_frontmatter_contains_1(): """Test frontmatter contains() method. @@ -221,71 +315,6 @@ def test_frontmatter_contains_8(): assert frontmatter.contains("key", r"_\d", is_regex=True) is False -def test_frontmatter_add() -> None: - """Test frontmatter add.""" - frontmatter = Frontmatter(FRONTMATTER_CONTENT) - - assert frontmatter.add("frontmatter_Key1") is False - assert frontmatter.add("added_key") is True - assert frontmatter.dict == { - "added_key": [], - "frontmatter_Key1": ["frontmatter_Key1_value"], - "frontmatter_Key2": ["article", "note"], - "shared_key1": ["shared_key1_value"], - "tags": ["tag_1", "tag_2", "📅/tag_3"], - } - - assert frontmatter.add("added_key", "added_value") is True - assert frontmatter.dict == { - "added_key": ["added_value"], - "frontmatter_Key1": ["frontmatter_Key1_value"], - "frontmatter_Key2": ["article", "note"], - "shared_key1": ["shared_key1_value"], - "tags": ["tag_1", "tag_2", "📅/tag_3"], - } - - assert frontmatter.add("added_key", "added_value_2") is True - assert frontmatter.dict == { - "added_key": ["added_value", "added_value_2"], - "frontmatter_Key1": ["frontmatter_Key1_value"], - "frontmatter_Key2": ["article", "note"], - "shared_key1": ["shared_key1_value"], - "tags": ["tag_1", "tag_2", "📅/tag_3"], - } - - assert frontmatter.add("added_key", ["added_value_3", "added_value_4"]) is True - assert frontmatter.dict == { - "added_key": ["added_value", "added_value_2", "added_value_3", "added_value_4"], - "frontmatter_Key1": ["frontmatter_Key1_value"], - "frontmatter_Key2": ["article", "note"], - "shared_key1": ["shared_key1_value"], - "tags": ["tag_1", "tag_2", "📅/tag_3"], - } - - assert frontmatter.add("added_key2", ["added_value_1", "added_value_2"]) is True - assert frontmatter.dict == { - "added_key": ["added_value", "added_value_2", "added_value_3", "added_value_4"], - "added_key2": ["added_value_1", "added_value_2"], - "frontmatter_Key1": ["frontmatter_Key1_value"], - "frontmatter_Key2": ["article", "note"], - "shared_key1": ["shared_key1_value"], - "tags": ["tag_1", "tag_2", "📅/tag_3"], - } - - assert frontmatter.add("added_key3", "added_value_1") is True - assert frontmatter.dict == { - "added_key": ["added_value", "added_value_2", "added_value_3", "added_value_4"], - "added_key2": ["added_value_1", "added_value_2"], - "added_key3": ["added_value_1"], - "frontmatter_Key1": ["frontmatter_Key1_value"], - "frontmatter_Key2": ["article", "note"], - "shared_key1": ["shared_key1_value"], - "tags": ["tag_1", "tag_2", "📅/tag_3"], - } - - assert frontmatter.add("added_key3", "added_value_1") is False - - def test_frontmatter_rename() -> None: """Test frontmatter rename.""" frontmatter = Frontmatter(FRONTMATTER_CONTENT) diff --git a/tests/notes_test.py b/tests/notes_test.py index 58700e0..737e49f 100644 --- a/tests/notes_test.py +++ b/tests/notes_test.py @@ -715,10 +715,9 @@ def test_transpose_metadata_4(sample_note): "intext_key": ["intext_value"], "key📅": ["📅_key_value"], "shared_key1": [ - "shared_key1_value", - "shared_key1_value3", "shared_key1_value", "shared_key1_value2", + "shared_key1_value3", ], "shared_key2": ["shared_key2_value1", "shared_key2_value2"], "tags": [