truncate config table on migrate to db task
authorAlexander Strizhakov <alex.strizhakov@gmail.com>
Thu, 23 Jan 2020 14:23:02 +0000 (17:23 +0300)
committerAlexander Strizhakov <alex.strizhakov@gmail.com>
Thu, 23 Jan 2020 14:23:02 +0000 (17:23 +0300)
CHANGELOG.md
lib/mix/tasks/pleroma/config.ex
test/tasks/config_test.exs

index 3f691463894dee8c889cd96fbb8b329a70df96a9..861312e18e488c8ab357f654c2c318f3bbc8d713 100644 (file)
@@ -26,6 +26,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 - Store status data inside Flag activity
 - Deprecated (reorganized as `UserRelationship` entity) User fields with user AP IDs (`blocks`, `mutes`, `muted_reblogs`, `muted_notifications`, `subscribers`).
 - Logger: default log level changed from `warn` to `info`.
+- Config mix task `migrate_to_db` truncates `config` table before migrating the config file.
 <details>
   <summary>API Changes</summary>
 
index 861832451bb272e43c63385f895fff85af54b681..8098e9bab81cc5e5749da979d8738797ee5906a0 100644 (file)
@@ -52,6 +52,8 @@ defmodule Mix.Tasks.Pleroma.Config do
 
   defp do_migrate_to_db(config_file) do
     if File.exists?(config_file) do
+      Ecto.Adapters.SQL.query!(Repo, "TRUNCATE config;")
+
       custom_config =
         config_file
         |> read_file()
index 2e56e6cfe928fd08bc20c171950b6896793adcf5..f2c2941404c306d7e7ce46e72b8d594deb4d6660 100644 (file)
@@ -34,21 +34,41 @@ defmodule Mix.Tasks.Pleroma.ConfigTest do
                    15
   end
 
-  test "settings are migrated to db" do
-    initial = Application.get_env(:quack, :level)
-    on_exit(fn -> Application.put_env(:quack, :level, initial) end)
-    assert Repo.all(ConfigDB) == []
+  describe "migrate_to_db/1" do
+    setup do
+      initial = Application.get_env(:quack, :level)
+      on_exit(fn -> Application.put_env(:quack, :level, initial) end)
+    end
+
+    test "settings are migrated to db" do
+      assert Repo.all(ConfigDB) == []
+
+      Mix.Tasks.Pleroma.Config.migrate_to_db("test/fixtures/config/temp.secret.exs")
+
+      config1 = ConfigDB.get_by_params(%{group: ":pleroma", key: ":first_setting"})
+      config2 = ConfigDB.get_by_params(%{group: ":pleroma", key: ":second_setting"})
+      config3 = ConfigDB.get_by_params(%{group: ":quack", key: ":level"})
+      refute ConfigDB.get_by_params(%{group: ":pleroma", key: "Pleroma.Repo"})
+
+      assert ConfigDB.from_binary(config1.value) == [key: "value", key2: [Repo]]
+      assert ConfigDB.from_binary(config2.value) == [key: "value2", key2: ["Activity"]]
+      assert ConfigDB.from_binary(config3.value) == :info
+    end
 
-    Mix.Tasks.Pleroma.Config.migrate_to_db("test/fixtures/config/temp.secret.exs")
+    test "config table is truncated before migration" do
+      ConfigDB.create(%{
+        group: ":pleroma",
+        key: ":first_setting",
+        value: [key: "value", key2: ["Activity"]]
+      })
+
+      assert Repo.aggregate(ConfigDB, :count, :id) == 1
 
-    config1 = ConfigDB.get_by_params(%{group: ":pleroma", key: ":first_setting"})
-    config2 = ConfigDB.get_by_params(%{group: ":pleroma", key: ":second_setting"})
-    config3 = ConfigDB.get_by_params(%{group: ":quack", key: ":level"})
-    refute ConfigDB.get_by_params(%{group: ":pleroma", key: "Pleroma.Repo"})
+      Mix.Tasks.Pleroma.Config.migrate_to_db("test/fixtures/config/temp.secret.exs")
 
-    assert ConfigDB.from_binary(config1.value) == [key: "value", key2: [Repo]]
-    assert ConfigDB.from_binary(config2.value) == [key: "value2", key2: ["Activity"]]
-    assert ConfigDB.from_binary(config3.value) == :info
+      config = ConfigDB.get_by_params(%{group: ":pleroma", key: ":first_setting"})
+      assert ConfigDB.from_binary(config.value) == [key: "value", key2: [Repo]]
+    end
   end
 
   describe "with deletion temp file" do