defmodule Pleroma.Akkoma.FrontendSettingsProfileTest do use Pleroma.DataCase, async: true use Oban.Testing, repo: Pleroma.Repo alias Pleroma.Akkoma.FrontendSettingsProfile import Pleroma.Factory describe "changeset/2" do test "valid" do user = insert(:user) frontend_name = "test" profile_name = "test" settings = %{"test" => "test"} struct = %FrontendSettingsProfile{} attrs = %{ user_id: user.id, frontend_name: frontend_name, profile_name: profile_name, settings: settings, version: 1 } assert %{valid?: true} = FrontendSettingsProfile.changeset(struct, attrs) end test "when settings is too long" do clear_config([:instance, :max_frontend_settings_json_chars], 10) user = insert(:user) frontend_name = "test" profile_name = "test" settings = %{"verylong" => "verylongoops"} struct = %FrontendSettingsProfile{} attrs = %{ user_id: user.id, frontend_name: frontend_name, profile_name: profile_name, settings: settings, version: 1 } assert %{valid?: false, errors: [settings: {"is too long", _}]} = FrontendSettingsProfile.changeset(struct, attrs) end test "when frontend name is too short" do user = insert(:user) frontend_name = "" profile_name = "test" settings = %{"test" => "test"} struct = %FrontendSettingsProfile{} attrs = %{ user_id: user.id, frontend_name: frontend_name, profile_name: profile_name, settings: settings, version: 1 } assert %{valid?: false, errors: [frontend_name: {"can't be blank", _}]} = FrontendSettingsProfile.changeset(struct, attrs) end test "when profile name is too short" do user = insert(:user) frontend_name = "test" profile_name = "" settings = %{"test" => "test"} struct = %FrontendSettingsProfile{} attrs = %{ user_id: user.id, frontend_name: frontend_name, profile_name: profile_name, settings: settings, version: 1 } assert %{valid?: false, errors: [profile_name: {"can't be blank", _}]} = FrontendSettingsProfile.changeset(struct, attrs) end test "when version is negative" do user = insert(:user) frontend_name = "test" profile_name = "test" settings = %{"test" => "test"} struct = %FrontendSettingsProfile{} attrs = %{ user_id: user.id, frontend_name: frontend_name, profile_name: profile_name, settings: settings, version: -1 } assert %{valid?: false, errors: [version: {"must be greater than %{number}", _}]} = FrontendSettingsProfile.changeset(struct, attrs) end end describe "create_or_update/2" do test "it should create a new record" do user = insert(:user) frontend_name = "test" profile_name = "test" settings = %{"test" => "test"} assert {:ok, %FrontendSettingsProfile{}} = FrontendSettingsProfile.create_or_update( user, frontend_name, profile_name, settings, 1 ) end test "it should update a record" do user = insert(:user) frontend_name = "test" profile_name = "test" insert(:frontend_setting_profile, user: user, frontend_name: frontend_name, profile_name: profile_name, settings: %{"test" => "test"}, version: 1 ) settings = %{"test" => "test2"} assert {:ok, %FrontendSettingsProfile{settings: ^settings}} = FrontendSettingsProfile.create_or_update( user, frontend_name, profile_name, settings, 2 ) end end describe "get_all_by_user_and_frontend_name/2" do test "it should return all records" do user = insert(:user) frontend_name = "test" insert(:frontend_setting_profile, user: user, frontend_name: frontend_name, profile_name: "profileA", settings: %{"test" => "test"}, version: 1 ) insert(:frontend_setting_profile, user: user, frontend_name: frontend_name, profile_name: "profileB", settings: %{"test" => "test"}, version: 1 ) assert [%FrontendSettingsProfile{profile_name: "profileA"}, %{profile_name: "profileB"}] = FrontendSettingsProfile.get_all_by_user_and_frontend_name(user, frontend_name) end end describe "get_by_user_and_frontend_name_and_profile_name/3" do test "it should return a record" do user = insert(:user) frontend_name = "test" profile_name = "profileA" insert(:frontend_setting_profile, user: user, frontend_name: frontend_name, profile_name: profile_name, settings: %{"test" => "test"}, version: 1 ) assert %FrontendSettingsProfile{profile_name: "profileA"} = FrontendSettingsProfile.get_by_user_and_frontend_name_and_profile_name( user, frontend_name, profile_name ) end end end