# Pleroma: A lightweight social networking server # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/> # SPDX-License-Identifier: AGPL-3.0-only defmodule Mix.Tasks.Pleroma.ConfigTest do use Pleroma.DataCase alias Pleroma.Repo alias Pleroma.Web.AdminAPI.Config setup_all do Mix.shell(Mix.Shell.Process) temp_file = "config/temp.exported_from_db.secret.exs" on_exit(fn -> Mix.shell(Mix.Shell.IO) Application.delete_env(:pleroma, :first_setting) Application.delete_env(:pleroma, :second_setting) :ok = File.rm(temp_file) end) {:ok, temp_file: temp_file} end clear_config_all([:instance, :dynamic_configuration]) do Pleroma.Config.put([:instance, :dynamic_configuration], true) end test "settings are migrated to db" do assert Repo.all(Config) == [] Application.put_env(:pleroma, :first_setting, key: "value", key2: [Pleroma.Repo]) Application.put_env(:pleroma, :second_setting, key: "value2", key2: [Pleroma.Activity]) Mix.Tasks.Pleroma.Config.run(["migrate_to_db"]) first_db = Config.get_by_params(%{group: "pleroma", key: ":first_setting"}) second_db = Config.get_by_params(%{group: "pleroma", key: ":second_setting"}) refute Config.get_by_params(%{group: "pleroma", key: "Pleroma.Repo"}) assert Config.from_binary(first_db.value) == [key: "value", key2: [Pleroma.Repo]] assert Config.from_binary(second_db.value) == [key: "value2", key2: [Pleroma.Activity]] end test "settings are migrated to file and deleted from db", %{temp_file: temp_file} do Config.create(%{ group: "pleroma", key: ":setting_first", value: [key: "value", key2: [Pleroma.Activity]] }) Config.create(%{ group: "pleroma", key: ":setting_second", value: [key: "valu2", key2: [Pleroma.Repo]] }) Mix.Tasks.Pleroma.Config.run(["migrate_from_db", "temp", "true"]) assert Repo.all(Config) == [] assert File.exists?(temp_file) {:ok, file} = File.read(temp_file) assert file =~ "config :pleroma, :setting_first," assert file =~ "config :pleroma, :setting_second," end end