mirror of
https://github.com/GSA/notifications-api.git
synced 2025-12-20 23:41:17 -05:00
275 lines
8.6 KiB
Python
275 lines
8.6 KiB
Python
import pytest
|
|
|
|
from app.enums import BrandType
|
|
from app.models import EmailBranding
|
|
from tests.app.db import create_email_branding
|
|
|
|
|
|
def test_get_email_branding_options(admin_request, notify_db_session):
|
|
email_branding1 = EmailBranding(
|
|
colour="#FFFFFF", logo="/path/image.png", name="Org1"
|
|
)
|
|
email_branding2 = EmailBranding(
|
|
colour="#000000", logo="/path/other.png", name="Org2"
|
|
)
|
|
notify_db_session.add_all([email_branding1, email_branding2])
|
|
notify_db_session.commit()
|
|
|
|
email_branding = admin_request.get("email_branding.get_email_branding_options")[
|
|
"email_branding"
|
|
]
|
|
|
|
assert len(email_branding) == 2
|
|
assert {email_branding["id"] for email_branding in email_branding} == {
|
|
str(email_branding1.id),
|
|
str(email_branding2.id),
|
|
}
|
|
|
|
|
|
def test_get_email_branding_by_id(admin_request, notify_db_session):
|
|
email_branding = EmailBranding(
|
|
colour="#FFFFFF", logo="/path/image.png", name="Some Org", text="My Org"
|
|
)
|
|
notify_db_session.add(email_branding)
|
|
notify_db_session.commit()
|
|
|
|
response = admin_request.get(
|
|
"email_branding.get_email_branding_by_id",
|
|
_expected_status=200,
|
|
email_branding_id=email_branding.id,
|
|
)
|
|
|
|
assert set(response["email_branding"].keys()) == {
|
|
"colour",
|
|
"logo",
|
|
"name",
|
|
"id",
|
|
"text",
|
|
"brand_type",
|
|
}
|
|
assert response["email_branding"]["colour"] == "#FFFFFF"
|
|
assert response["email_branding"]["logo"] == "/path/image.png"
|
|
assert response["email_branding"]["name"] == "Some Org"
|
|
assert response["email_branding"]["text"] == "My Org"
|
|
assert response["email_branding"]["id"] == str(email_branding.id)
|
|
assert response["email_branding"]["brand_type"] == str(email_branding.brand_type)
|
|
|
|
|
|
def test_post_create_email_branding(admin_request, notify_db_session):
|
|
data = {
|
|
"name": "test email_branding",
|
|
"colour": "#0000ff",
|
|
"logo": "/images/test_x2.png",
|
|
"brand_type": BrandType.ORG,
|
|
}
|
|
response = admin_request.post(
|
|
"email_branding.create_email_branding", _data=data, _expected_status=201
|
|
)
|
|
assert data["name"] == response["data"]["name"]
|
|
assert data["colour"] == response["data"]["colour"]
|
|
assert data["logo"] == response["data"]["logo"]
|
|
assert data["name"] == response["data"]["text"]
|
|
assert data["brand_type"] == response["data"]["brand_type"]
|
|
|
|
|
|
def test_post_create_email_branding_without_brand_type_defaults(
|
|
admin_request, notify_db_session
|
|
):
|
|
data = {
|
|
"name": "test email_branding",
|
|
"colour": "#0000ff",
|
|
"logo": "/images/test_x2.png",
|
|
}
|
|
response = admin_request.post(
|
|
"email_branding.create_email_branding", _data=data, _expected_status=201
|
|
)
|
|
assert BrandType.ORG == response["data"]["brand_type"]
|
|
|
|
|
|
def test_post_create_email_branding_without_logo_is_ok(
|
|
admin_request, notify_db_session
|
|
):
|
|
data = {
|
|
"name": "test email_branding",
|
|
"colour": "#0000ff",
|
|
}
|
|
response = admin_request.post(
|
|
"email_branding.create_email_branding",
|
|
_data=data,
|
|
_expected_status=201,
|
|
)
|
|
assert not response["data"]["logo"]
|
|
|
|
|
|
def test_post_create_email_branding_colour_is_valid(admin_request, notify_db_session):
|
|
data = {"logo": "images/text_x2.png", "name": "test branding"}
|
|
response = admin_request.post(
|
|
"email_branding.create_email_branding", _data=data, _expected_status=201
|
|
)
|
|
|
|
assert response["data"]["logo"] == data["logo"]
|
|
assert response["data"]["name"] == "test branding"
|
|
assert response["data"]["colour"] is None
|
|
assert response["data"]["text"] == "test branding"
|
|
|
|
|
|
def test_post_create_email_branding_with_text(admin_request, notify_db_session):
|
|
data = {
|
|
"text": "text for brand",
|
|
"logo": "images/text_x2.png",
|
|
"name": "test branding",
|
|
}
|
|
response = admin_request.post(
|
|
"email_branding.create_email_branding", _data=data, _expected_status=201
|
|
)
|
|
|
|
assert response["data"]["logo"] == data["logo"]
|
|
assert response["data"]["name"] == "test branding"
|
|
assert response["data"]["colour"] is None
|
|
assert response["data"]["text"] == "text for brand"
|
|
|
|
|
|
def test_post_create_email_branding_with_text_and_name(
|
|
admin_request, notify_db_session
|
|
):
|
|
data = {
|
|
"name": "name for brand",
|
|
"text": "text for brand",
|
|
"logo": "images/text_x2.png",
|
|
}
|
|
response = admin_request.post(
|
|
"email_branding.create_email_branding", _data=data, _expected_status=201
|
|
)
|
|
|
|
assert response["data"]["logo"] == data["logo"]
|
|
assert response["data"]["name"] == "name for brand"
|
|
assert response["data"]["colour"] is None
|
|
assert response["data"]["text"] == "text for brand"
|
|
|
|
|
|
def test_post_create_email_branding_with_text_as_none_and_name(
|
|
admin_request, notify_db_session
|
|
):
|
|
data = {"name": "name for brand", "text": None, "logo": "images/text_x2.png"}
|
|
response = admin_request.post(
|
|
"email_branding.create_email_branding", _data=data, _expected_status=201
|
|
)
|
|
|
|
assert response["data"]["logo"] == data["logo"]
|
|
assert response["data"]["name"] == "name for brand"
|
|
assert response["data"]["colour"] is None
|
|
assert response["data"]["text"] is None
|
|
|
|
|
|
def test_post_create_email_branding_returns_400_when_name_is_missing(
|
|
admin_request, notify_db_session
|
|
):
|
|
data = {"text": "some text", "logo": "images/text_x2.png"}
|
|
response = admin_request.post(
|
|
"email_branding.create_email_branding", _data=data, _expected_status=400
|
|
)
|
|
|
|
assert response["errors"][0]["message"] == "name is a required property"
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"data_update",
|
|
[
|
|
({"name": "test email_branding 1"}),
|
|
({"logo": "images/text_x3.png", "colour": "#ffffff"}),
|
|
({"logo": "images/text_x3.png"}),
|
|
({"logo": "images/text_x3.png"}),
|
|
({"logo": "images/text_x3.png"}),
|
|
],
|
|
)
|
|
def test_post_update_email_branding_updates_field(
|
|
admin_request, notify_db_session, data_update
|
|
):
|
|
data = {"name": "test email_branding", "logo": "images/text_x2.png"}
|
|
response = admin_request.post(
|
|
"email_branding.create_email_branding", _data=data, _expected_status=201
|
|
)
|
|
|
|
email_branding_id = response["data"]["id"]
|
|
|
|
admin_request.post(
|
|
"email_branding.update_email_branding",
|
|
_data=data_update,
|
|
email_branding_id=email_branding_id,
|
|
)
|
|
|
|
email_branding = EmailBranding.query.all()
|
|
|
|
assert len(email_branding) == 1
|
|
assert str(email_branding[0].id) == email_branding_id
|
|
for key in data_update.keys():
|
|
assert getattr(email_branding[0], key) == data_update[key]
|
|
assert email_branding[0].text == email_branding[0].name
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"data_update",
|
|
[
|
|
({"text": "text email branding"}),
|
|
({"text": "new text", "name": "new name"}),
|
|
({"text": None, "name": "test name"}),
|
|
],
|
|
)
|
|
def test_post_update_email_branding_updates_field_with_text(
|
|
admin_request, notify_db_session, data_update
|
|
):
|
|
data = {"name": "test email_branding", "logo": "images/text_x2.png"}
|
|
response = admin_request.post(
|
|
"email_branding.create_email_branding", _data=data, _expected_status=201
|
|
)
|
|
|
|
email_branding_id = response["data"]["id"]
|
|
|
|
admin_request.post(
|
|
"email_branding.update_email_branding",
|
|
_data=data_update,
|
|
email_branding_id=email_branding_id,
|
|
)
|
|
|
|
email_branding = EmailBranding.query.all()
|
|
|
|
assert len(email_branding) == 1
|
|
assert str(email_branding[0].id) == email_branding_id
|
|
for key in data_update.keys():
|
|
assert getattr(email_branding[0], key) == data_update[key]
|
|
|
|
|
|
def test_create_email_branding_reject_invalid_brand_type(admin_request):
|
|
data = {"name": "test email_branding", "brand_type": "NOT A TYPE"}
|
|
response = admin_request.post(
|
|
"email_branding.create_email_branding", _data=data, _expected_status=400
|
|
)
|
|
type_str = ", ".join(
|
|
[f"<{type(e).__name__}.{e.name}: {e.value}>" for e in BrandType]
|
|
)
|
|
assert (
|
|
response["errors"][0]["message"]
|
|
== f"brand_type NOT A TYPE is not one of [{type_str}]"
|
|
)
|
|
|
|
|
|
def test_update_email_branding_reject_invalid_brand_type(
|
|
admin_request, notify_db_session
|
|
):
|
|
email_branding = create_email_branding()
|
|
data = {"brand_type": "NOT A TYPE"}
|
|
response = admin_request.post(
|
|
"email_branding.update_email_branding",
|
|
_data=data,
|
|
_expected_status=400,
|
|
email_branding_id=email_branding.id,
|
|
)
|
|
|
|
type_str = ", ".join(
|
|
[f"<{type(e).__name__}.{e.name}: {e.value}>" for e in BrandType]
|
|
)
|
|
assert (
|
|
response["errors"][0]["message"]
|
|
== f"brand_type NOT A TYPE is not one of [{type_str}]"
|
|
)
|