From 00b4052523d10c22330cff2e9bfa39ebf6d9572b Mon Sep 17 00:00:00 2001 From: spaenleh Date: Thu, 5 Feb 2026 13:37:04 +0100 Subject: [PATCH 1/2] fix: message length issues --- lib/admin/notifications/localized_email.ex | 1 + ...0205122108_update_email_message_length.exs | 10 +++++ test/admin/notifications_test.exs | 45 +++++++++++++++++++ 3 files changed, 56 insertions(+) create mode 100644 priv/repo/migrations/20260205122108_update_email_message_length.exs diff --git a/lib/admin/notifications/localized_email.ex b/lib/admin/notifications/localized_email.ex index 101ef8aae..ea7ffda2d 100644 --- a/lib/admin/notifications/localized_email.ex +++ b/lib/admin/notifications/localized_email.ex @@ -22,6 +22,7 @@ defmodule Admin.Notifications.LocalizedEmail do localized_email |> cast(attrs, [:subject, :message, :button_text, :button_url, :language]) |> validate_required([:subject, :message, :language]) + |> validate_length(:button_url, max: 2048) |> validate_inclusion(:language, ["en", "fr", "es", "it", "de"]) |> put_change(:notification_id, notification_id) end diff --git a/priv/repo/migrations/20260205122108_update_email_message_length.exs b/priv/repo/migrations/20260205122108_update_email_message_length.exs new file mode 100644 index 000000000..78ca0f24c --- /dev/null +++ b/priv/repo/migrations/20260205122108_update_email_message_length.exs @@ -0,0 +1,10 @@ +defmodule Admin.Repo.Migrations.UpdateEmailMessageLength do + use Ecto.Migration + + def change do + alter table(:localized_emails) do + modify :message, :varchar, from: :string + modify :button_url, :string, size: 2048 + end + end +end diff --git a/test/admin/notifications_test.exs b/test/admin/notifications_test.exs index 83838501a..7b10668ff 100644 --- a/test/admin/notifications_test.exs +++ b/test/admin/notifications_test.exs @@ -165,6 +165,51 @@ defmodule Admin.NotificationsTest do end end + describe "localized emails" do + setup [:create_notification] + + test "creates a localized email", %{scope: scope, notification: notification} do + assert {:ok, %Admin.Notifications.LocalizedEmail{} = localized_email} = + Notifications.create_localized_email(scope, notification.id, %{ + subject: "example_subject", + message: "This is an example message", + button_text: "example_button_text", + button_url: "https://example.com", + language: "en" + }) + + assert localized_email.notification_id == notification.id + end + + test "allows long messages", %{scope: scope, notification: notification} do + assert {:ok, %Admin.Notifications.LocalizedEmail{} = localized_email} = + Notifications.create_localized_email(scope, notification.id, %{ + subject: "example_subject", + message: String.duplicate("a", 2050), + button_text: "example_button_text", + button_url: "https://example.com", + language: "en" + }) + + assert localized_email.notification_id == notification.id + end + + test "errors for url too long", %{scope: scope, notification: notification} do + assert {:error, %Ecto.Changeset{} = changeset} = + Notifications.create_localized_email(scope, notification.id, %{ + subject: "example_subject", + message: "This is an example message", + button_text: "example_button_text", + button_url: String.duplicate("a", 2050), + language: "en" + }) + + assert changeset.errors[:button_url] == + {"should be at most %{count} character(s)", + [{:count, 2048}, {:validation, :length}, {:kind, :max}, {:type, :string}]} + end + end + defp create_notification(_) do scope = user_scope_fixture() notification = notification_fixture(scope) From d6b4b262fcef716de9d10f1f833a8868a01770ea Mon Sep 17 00:00:00 2001 From: spaenleh Date: Fri, 6 Feb 2026 08:18:27 +0100 Subject: [PATCH 2/2] fix: compare without thumbnails --- test/admin/publications_test.exs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/test/admin/publications_test.exs b/test/admin/publications_test.exs index 06dd8befe..bc6114e39 100644 --- a/test/admin/publications_test.exs +++ b/test/admin/publications_test.exs @@ -2,10 +2,14 @@ defmodule Admin.PublicationsTest do use Admin.DataCase, async: false alias Admin.Publications + alias Admin.Publications.PublishedItem - describe "published_items" do - alias Admin.Publications.PublishedItem + def without_thumbnail(%PublishedItem{thumbnails: nil} = published_item), do: published_item + + def without_thumbnail(%PublishedItem{thumbnails: _} = published_item), + do: %{published_item | thumbnails: nil} + describe "published_items" do import Admin.AccountsFixtures, only: [user_scope_fixture: 0] import Admin.PublicationsFixtures import Admin.ItemsFixtures, only: [item_fixture: 1] @@ -33,8 +37,8 @@ defmodule Admin.PublicationsTest do |> Admin.Publications.with_item() |> Admin.Publications.with_creator() - assert Publications.get_published_item!(scope, published_item.id) == - published_item + assert without_thumbnail(Publications.get_published_item!(scope, published_item.id)) == + without_thumbnail(published_item) end test "create_published_item/2 with valid data creates a published_item" do