Files
notifications-api/tests/app/email_branding/test_rest.py
Cliff Hill c407d61d60 Cleaning & debugging
Signed-off-by: Cliff Hill <Clifford.hill@gsa.gov>
2024-02-28 12:58:24 -05:00

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}]"
)