Skip to content

Commit

Permalink
Fix issue with merging existing settings when updating campaign via API
Browse files Browse the repository at this point in the history
  • Loading branch information
wmnnd committed Dec 22, 2024
1 parent dbdef3a commit 13057b9
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 2 deletions.
9 changes: 7 additions & 2 deletions lib/keila_web/api/controllers/api_campaign_controller.ex
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,13 @@ defmodule KeilaWeb.ApiCampaignController do
project_id = project_id(conn)

with campaign = %Mailings.Campaign{} <- Mailings.get_project_campaign(project_id, id) do
settings_id = campaign.settings.id
params = put_in(conn.body_params.data, [:settings, :id], settings_id)
settings_params =
campaign.settings
|> Mailings.Campaign.Settings.changeset(conn.body_params.data[:settings] || %{})
|> Ecto.Changeset.apply_changes()
|> Map.from_struct()

params = Map.put(conn.body_params.data, :settings, settings_params)

case Mailings.update_campaign(id, params) do
{:ok, campaign} -> render(conn, "campaign.json", %{campaign: campaign})
Expand Down
20 changes: 20 additions & 0 deletions test/keila_web/api/api_campaign_controller_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,26 @@ defmodule KeilaWeb.ApiCampaignControllerTest do

assert %{subject: "Updated Subject"} = Keila.Mailings.get_campaign(id)
end

@tag :api_campaign_controller
test "also works when settings are not provided", %{authorized_conn: conn, project: project} do
%{id: id} = insert!(:mailings_campaign, project_id: project.id, settings: %{type: "mjml"})

body = %{"data" => %{"subject" => "Updated Subject"}}
conn = patch_json(conn, Routes.api_campaign_path(conn, :update, id), body)

assert %{
"data" => %{
"id" => ^id,
"subject" => "Updated Subject",
"settings" => %{
"type" => "mjml"
}
}
} = json_response(conn, 200)

assert %{subject: "Updated Subject"} = Keila.Mailings.get_campaign(id)
end
end

describe "DELETE /api/v1/campaigns/:id" do
Expand Down

0 comments on commit 13057b9

Please sign in to comment.