Skip to content

Commit 14b33fe

Browse files
authored
Merge pull request #304 from CaptainFact/fix/video-zxx-language
Video: Don't crash on invalid languages
2 parents dbce4ee + f94a890 commit 14b33fe

File tree

2 files changed

+40
-1
lines changed

2 files changed

+40
-1
lines changed

apps/db/lib/db_schema/video.ex

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,22 @@ defmodule DB.Schema.Video do
155155
|> unique_constraint(:videos_youtube_id_index)
156156
|> unique_constraint(:videos_facebook_id_index)
157157
# Change locales like "en-US" to "en"
158-
|> update_change(:language, &hd(String.split(&1, "-")))
158+
|> update_change(:language, &format_language/1)
159+
end
160+
161+
defp format_language("zxx"), do: nil
162+
163+
defp format_language(locale) do
164+
cond do
165+
is_binary(locale) and locale =~ "-" ->
166+
format_language(hd(String.split(locale, "-")))
167+
168+
is_binary(locale) and String.length(locale) == 2 ->
169+
locale
170+
171+
true ->
172+
nil
173+
end
159174
end
160175

161176
@doc """

apps/db/test/db_schema/video_test.exs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,29 @@ defmodule DB.Schema.VideoTest do
4343
attrs = %{title: String.duplicate("x", 121)}
4444
assert {:title, "should be at most 120 character(s)"} in errors_on(%Video{}, attrs)
4545
end
46+
47+
test "unknown or invalid language gives nil values but aren't rejected" do
48+
attrs = Map.put(@valid_attrs, :language, "zxx")
49+
changeset = Video.changeset(%Video{}, attrs)
50+
assert changeset.valid?
51+
assert changeset.changes.language == nil
52+
53+
attrs = Map.put(@valid_attrs, :language, "xxx-zzz-fff")
54+
changeset = Video.changeset(%Video{}, attrs)
55+
assert changeset.valid?
56+
assert changeset.changes.language == nil
57+
end
58+
59+
test "valid locale is stored" do
60+
attrs = Map.put(@valid_attrs, :language, "fr")
61+
changeset = Video.changeset(%Video{}, attrs)
62+
assert changeset.valid?
63+
assert changeset.changes.language == "fr"
64+
65+
attrs = Map.put(@valid_attrs, :language, "en-US")
66+
changeset = Video.changeset(%Video{}, attrs)
67+
assert changeset.valid?
68+
assert changeset.changes.language == "en"
69+
end
4670
end
4771
end

0 commit comments

Comments
 (0)