Files
notifications-api/tests/notifications_utils/test_template_change.py
2024-05-17 17:14:46 -04:00

136 lines
4.1 KiB
Python

import pytest
from notifications_utils.template_change import TemplateChange
from .test_base_template import ConcreteTemplate
@pytest.mark.parametrize(
("old_template", "new_template", "should_differ"),
[
(
ConcreteTemplate({"content": "((1)) ((2)) ((3))"}),
ConcreteTemplate({"content": "((1)) ((2)) ((3))"}),
False,
),
(
ConcreteTemplate({"content": "((1)) ((2)) ((3))"}),
ConcreteTemplate({"content": "((3)) ((2)) ((1))"}),
False,
),
(
ConcreteTemplate({"content": "((1)) ((2)) ((3))"}),
ConcreteTemplate({"content": "((1)) ((1)) ((2)) ((2)) ((3)) ((3))"}),
False,
),
(
ConcreteTemplate({"content": "((1))"}),
ConcreteTemplate({"content": "((1)) ((2))"}),
True,
),
(
ConcreteTemplate({"content": "((1)) ((2))"}),
ConcreteTemplate({"content": "((1))"}),
True,
),
(
ConcreteTemplate({"content": "((a)) ((b))"}),
ConcreteTemplate({"content": "((A)) (( B_ ))"}),
False,
),
],
)
def test_checking_for_difference_between_templates(
old_template, new_template, should_differ
):
assert (
TemplateChange(old_template, new_template).has_different_placeholders
== should_differ
)
@pytest.mark.parametrize(
("old_template", "new_template", "placeholders_added"),
[
(
ConcreteTemplate({"content": "((1)) ((2)) ((3))"}),
ConcreteTemplate({"content": "((1)) ((2)) ((3))"}),
set(),
),
(
ConcreteTemplate({"content": "((1)) ((2)) ((3))"}),
ConcreteTemplate({"content": "((1)) ((1)) ((2)) ((2)) ((3)) ((3))"}),
set(),
),
(
ConcreteTemplate({"content": "((1)) ((2)) ((3))"}),
ConcreteTemplate({"content": "((1))"}),
set(),
),
(
ConcreteTemplate({"content": "((1))"}),
ConcreteTemplate({"content": "((1)) ((2)) ((3))"}),
set(["2", "3"]),
),
(
ConcreteTemplate({"content": "((a))"}),
ConcreteTemplate({"content": "((A)) ((B)) ((C))"}),
set(["B", "C"]),
),
],
)
def test_placeholders_added(old_template, new_template, placeholders_added):
assert (
TemplateChange(old_template, new_template).placeholders_added
== placeholders_added
)
@pytest.mark.parametrize(
("old_template", "new_template", "placeholders_removed"),
[
(
ConcreteTemplate({"content": "((1)) ((2)) ((3))"}),
ConcreteTemplate({"content": "((1)) ((2)) ((3))"}),
set(),
),
(
ConcreteTemplate({"content": "((1)) ((2)) ((3))"}),
ConcreteTemplate({"content": "((1)) ((1)) ((2)) ((2)) ((3)) ((3))"}),
set(),
),
(
ConcreteTemplate({"content": "((1))"}),
ConcreteTemplate({"content": "((1)) ((2)) ((3))"}),
set(),
),
(
ConcreteTemplate({"content": "((1)) ((2)) ((3))"}),
ConcreteTemplate({"content": "((1))"}),
set(["2", "3"]),
),
(
ConcreteTemplate({"content": "((a)) ((b)) ((c))"}),
ConcreteTemplate({"content": "((A))"}),
set(["b", "c"]),
),
],
)
def test_placeholders_removed(old_template, new_template, placeholders_removed):
assert (
TemplateChange(old_template, new_template).placeholders_removed
== placeholders_removed
)
def test_ordering_of_placeholders_is_preserved():
before = ConcreteTemplate({"content": "((dog)) ((cat)) ((rat))"})
after = ConcreteTemplate({"content": "((platypus)) ((echidna)) ((quokka))"})
change = TemplateChange(before, after)
assert change.placeholders_removed == ["dog", "cat", "rat"] == before.placeholders
assert (
change.placeholders_added
== ["platypus", "echidna", "quokka"]
== after.placeholders
)