Ensured you can remove codec data
This commit is contained in:
parent
37db0f978e
commit
f428417830
2 changed files with 45 additions and 23 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue