Ensured you can remove codec data

This commit is contained in:
Kieran Eglin 2024-05-21 15:50:34 -07:00
parent 37db0f978e
commit f428417830
No known key found for this signature in database
GPG key ID: 193984967FCF432D
2 changed files with 45 additions and 23 deletions

View file

@ -13,7 +13,10 @@ defmodule Pinchflat.Settings.Setting do
:apprise_version, :apprise_version,
:apprise_server, :apprise_server,
:video_codec_preference, :video_codec_preference,
:audio_codec_preference, :audio_codec_preference
]
@virtual_fields [
:video_codec_preference_string, :video_codec_preference_string,
:audio_codec_preference_string :audio_codec_preference_string
] ]
@ -32,14 +35,15 @@ defmodule Pinchflat.Settings.Setting do
field :video_codec_preference, {:array, :string}, default: [] field :video_codec_preference, {:array, :string}, default: []
field :audio_codec_preference, {:array, :string}, default: [] field :audio_codec_preference, {:array, :string}, default: []
field :video_codec_preference_string, :string, virtual: true field :video_codec_preference_string, :string, default: nil, virtual: true
field :audio_codec_preference_string, :string, virtual: true field :audio_codec_preference_string, :string, default: nil, virtual: true
end end
@doc false @doc false
def changeset(setting, attrs) do def changeset(setting, attrs) do
setting setting
|> cast(attrs, @allowed_fields) |> cast(attrs, @allowed_fields)
|> cast(attrs, @virtual_fields, empty_values: [])
|> convert_codec_preference_strings() |> convert_codec_preference_strings()
|> validate_required(@required_fields) |> validate_required(@required_fields)
end end

View file

@ -77,7 +77,9 @@ defmodule Pinchflat.SettingsTest do
assert %Ecto.Changeset{} = Settings.change_setting(setting, %{onboarding: true}) assert %Ecto.Changeset{} = Settings.change_setting(setting, %{onboarding: true})
end end
end
describe "change_setting/2 when testing codec preferences" do
test "converts (video|audio)_codec_preference_string to an array" do test "converts (video|audio)_codec_preference_string to an array" do
setting = Settings.record() setting = Settings.record()
@ -91,33 +93,49 @@ defmodule Pinchflat.SettingsTest do
assert ["avc", "vp9"] = changeset.changes.video_codec_preference assert ["avc", "vp9"] = changeset.changes.video_codec_preference
assert ["aac", "opus"] = changeset.changes.audio_codec_preference assert ["aac", "opus"] = changeset.changes.audio_codec_preference
end end
end
test "removes whitespace from (video|audio)_codec_preference" do test "removes whitespace from (video|audio)_codec_preference" do
setting = Settings.record() setting = Settings.record()
new_setting = %{ new_setting = %{
video_codec_preference_string: " avc > > vp9 ", video_codec_preference_string: " avc > > vp9 ",
audio_codec_preference_string: "aac> opus " audio_codec_preference_string: "aac> opus "
} }
changeset = Settings.change_setting(setting, new_setting) changeset = Settings.change_setting(setting, new_setting)
assert ["avc", "vp9"] = changeset.changes.video_codec_preference assert ["avc", "vp9"] = changeset.changes.video_codec_preference
assert ["aac", "opus"] = changeset.changes.audio_codec_preference assert ["aac", "opus"] = changeset.changes.audio_codec_preference
end end
test "downcases (video|audio)_codec_preference" do test "downcases (video|audio)_codec_preference" do
setting = Settings.record() setting = Settings.record()
new_setting = %{ new_setting = %{
video_codec_preference_string: "AVC>VP9", video_codec_preference_string: "AVC>VP9",
audio_codec_preference_string: "AAC>OPUS" audio_codec_preference_string: "AAC>OPUS"
} }
changeset = Settings.change_setting(setting, new_setting) changeset = Settings.change_setting(setting, new_setting)
assert ["avc", "vp9"] = changeset.changes.video_codec_preference assert ["avc", "vp9"] = changeset.changes.video_codec_preference
assert ["aac", "opus"] = changeset.changes.audio_codec_preference assert ["aac", "opus"] = changeset.changes.audio_codec_preference
end
test "an empty value will remove the codec settings" do
Settings.set(video_codec_preference: ["avc", "vp9"])
Settings.set(audio_codec_preference: ["aac", "opus"])
setting = Settings.record()
new_setting = %{
video_codec_preference_string: "",
audio_codec_preference_string: ""
}
changeset = Settings.change_setting(setting, new_setting)
assert [] = changeset.changes.video_codec_preference
assert [] = changeset.changes.audio_codec_preference
end
end end
end end