Skip to content

Commit e66535a

Browse files
authored
fix: overriding of changeset changes (#3011)
1 parent ec2b5aa commit e66535a

File tree

3 files changed

+45
-1
lines changed

3 files changed

+45
-1
lines changed

lib/logflare/sources/source.ex

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,14 @@ defmodule Logflare.Sources.Source do
290290
errors
291291
|> Enum.uniq()
292292
|> Enum.reduce(changeset, fn {k, v}, cs -> add_error(cs, k, v) end)
293-
|> put_change(:labels, normalized |> Enum.reverse() |> Enum.join(","))
293+
|> then(fn
294+
changeset when normalized == [] ->
295+
changeset
296+
297+
changeset ->
298+
changeset
299+
|> put_change(:labels, normalized |> Enum.reverse() |> Enum.join(","))
300+
end)
294301
end
295302

296303
defp get_normalized_and_errors(labels) do

test/logflare/sources_test.exs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,21 @@ defmodule Logflare.SourcesTest do
1212
alias Logflare.Backends.SourceRegistry
1313
alias Logflare.Backends.SourceSup
1414

15+
describe "changesets" do
16+
test "update_by_user_changeset" do
17+
insert(:plan)
18+
source = insert(:source, user: insert(:user), labels: "initial=label")
19+
20+
assert %Ecto.Changeset{changes: changes} = Source.update_by_user_changeset(source, %{})
21+
assert changes == %{}
22+
23+
assert %Ecto.Changeset{changes: changes} =
24+
Source.update_by_user_changeset(source, %{labels: "test=some_label"})
25+
26+
assert changes == %{labels: "test=some_label"}
27+
end
28+
end
29+
1530
describe "create_source/2" do
1631
setup do
1732
user = insert(:user)

test/logflare_web/controllers/source_controller_test.exs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,28 @@ defmodule LogflareWeb.SourceControllerTest do
289289
assert conn.assigns.source.name == new_name
290290
end
291291

292+
test "able to update labels", %{conn: conn, users: [u1, _u2], sources: [s1, _s2 | _]} do
293+
new_name = TestUtils.random_string()
294+
295+
params = %{
296+
"id" => s1.id,
297+
"source" => %{
298+
"labels" => "test=some_label"
299+
}
300+
}
301+
302+
conn =
303+
conn
304+
|> login_user(u1)
305+
|> patch(~p"/sources/#{s1}", params)
306+
307+
s1_new = Sources.get_by(token: s1.token)
308+
309+
assert html_response(conn, 302) =~ "redirected"
310+
assert Phoenix.Flash.get(conn.assigns.flash, :info) == "Source updated!"
311+
assert s1_new.labels == "test=some_label"
312+
end
313+
292314
test "returns 406 with invalid params", %{
293315
conn: conn,
294316
users: [u1, _u2],

0 commit comments

Comments
 (0)