fix for db key
[akkoma] / test / web / admin_api / admin_api_controller_test.exs
index 35cef4df33f819c782f04bffd7d14e31ed0163ff..509a6f4f4090d9e3392a2eff3b45ebd3f8172bf1 100644 (file)
@@ -1907,6 +1907,22 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
       assert key2 == config2.key
     end
 
+    test "db is added to settings that are in db", %{conn: conn} do
+      _config = insert(:config, key: ":instance", value: ConfigDB.to_binary(name: "Some name"))
+
+      %{"configs" => configs} =
+        conn
+        |> get("/api/pleroma/admin/config")
+        |> json_response(200)
+
+      [instance_config] =
+        Enum.filter(configs, fn %{"group" => group, "key" => key} ->
+          group == ":pleroma" and key == ":instance"
+        end)
+
+      assert instance_config["db"] == [":name"]
+    end
+
     test "merged default setting with db settings", %{conn: conn} do
       config1 = insert(:config)
       config2 = insert(:config)
@@ -1916,9 +1932,10 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
           value: ConfigDB.to_binary(k1: :v1, k2: :v2)
         )
 
-      conn = get(conn, "/api/pleroma/admin/config")
-
-      %{"configs" => configs} = json_response(conn, 200)
+      %{"configs" => configs} =
+        conn
+        |> get("/api/pleroma/admin/config")
+        |> json_response(200)
 
       assert length(configs) > 3
 
@@ -1936,7 +1953,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
         |> ConfigDB.convert()
 
       Enum.each(received_configs, fn %{"value" => value, "db" => db} ->
-        assert db in [config1.key, config2.key, db_keys]
+        assert db in [[config1.key], [config2.key], db_keys]
 
         assert value in [
                  ConfigDB.from_binary_with_convert(config1.value),
@@ -1945,6 +1962,39 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
                ]
       end)
     end
+
+    test "subkeys with full update right merge", %{conn: conn} do
+      config1 =
+        insert(:config,
+          key: ":emoji",
+          value: ConfigDB.to_binary(groups: [a: 1, b: 2], key: [a: 1])
+        )
+
+      config2 =
+        insert(:config,
+          key: ":assets",
+          value: ConfigDB.to_binary(mascots: [a: 1, b: 2], key: [a: 1])
+        )
+
+      %{"configs" => configs} =
+        conn
+        |> get("/api/pleroma/admin/config")
+        |> json_response(200)
+
+      vals =
+        Enum.filter(configs, fn %{"group" => group, "key" => key} ->
+          group == ":pleroma" and key in [config1.key, config2.key]
+        end)
+
+      emoji = Enum.find(vals, fn %{"key" => key} -> key == ":emoji" end)
+      assets = Enum.find(vals, fn %{"key" => key} -> key == ":assets" end)
+
+      emoji_val = ConfigDB.transform_with_out_binary(emoji["value"])
+      assets_val = ConfigDB.transform_with_out_binary(assets["value"])
+
+      assert emoji_val[:groups] == [a: 1, b: 2]
+      assert assets_val[:mascots] == [a: 1, b: 2]
+    end
   end
 
   test "POST /api/pleroma/admin/config error", %{conn: conn} do
@@ -1985,7 +2035,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
             %{group: ":pleroma", key: ":key1", value: "value1"},
             %{
               group: ":ueberauth",
-              key: "Ueberauth.Strategy.Twitter.OAuth",
+              key: "Ueberauth",
               value: [%{"tuple" => [":consumer_secret", "aaaa"]}]
             },
             %{
@@ -2025,12 +2075,14 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
                  %{
                    "group" => ":pleroma",
                    "key" => ":key1",
-                   "value" => "value1"
+                   "value" => "value1",
+                   "db" => [":key1"]
                  },
                  %{
                    "group" => ":ueberauth",
-                   "key" => "Ueberauth.Strategy.Twitter.OAuth",
-                   "value" => [%{"tuple" => [":consumer_secret", "aaaa"]}]
+                   "key" => "Ueberauth",
+                   "value" => [%{"tuple" => [":consumer_secret", "aaaa"]}],
+                   "db" => [":consumer_secret"]
                  },
                  %{
                    "group" => ":pleroma",
@@ -2041,7 +2093,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
                        %{":nested_22" => "nested_value222"},
                        %{":nested_33" => %{":nested_44" => "nested_444"}}
                      ]
-                   }
+                   },
+                   "db" => [":key2"]
                  },
                  %{
                    "group" => ":pleroma",
@@ -2049,17 +2102,20 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
                    "value" => [
                      %{"nested_3" => ":nested_3", "nested_33" => "nested_33"},
                      %{"nested_4" => true}
-                   ]
+                   ],
+                   "db" => [":key3"]
                  },
                  %{
                    "group" => ":pleroma",
                    "key" => ":key4",
-                   "value" => %{"endpoint" => "https://example.com", ":nested_5" => ":upload"}
+                   "value" => %{"endpoint" => "https://example.com", ":nested_5" => ":upload"},
+                   "db" => [":key4"]
                  },
                  %{
                    "group" => ":idna",
                    "key" => ":key5",
-                   "value" => %{"tuple" => ["string", "Pleroma.Captcha.NotReal", []]}
+                   "value" => %{"tuple" => ["string", "Pleroma.Captcha.NotReal", []]},
+                   "db" => [":key5"]
                  }
                ]
              }
@@ -2121,12 +2177,23 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
 
       assert json_response(conn, 200) == %{
                "configs" => [
-                 %{"group" => ":quack", "key" => ":level", "value" => ":info"},
-                 %{"group" => ":quack", "key" => ":meta", "value" => [":none"]},
+                 %{
+                   "group" => ":quack",
+                   "key" => ":level",
+                   "value" => ":info",
+                   "db" => [":level"]
+                 },
+                 %{
+                   "group" => ":quack",
+                   "key" => ":meta",
+                   "value" => [":none"],
+                   "db" => [":meta"]
+                 },
                  %{
                    "group" => ":quack",
                    "key" => ":webhook_url",
-                   "value" => "https://hooks.slack.com/services/KEY"
+                   "value" => "https://hooks.slack.com/services/KEY",
+                   "db" => [":webhook_url"]
                  }
                ]
              }
@@ -2155,7 +2222,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
                      %{"tuple" => [":key1", 1]},
                      %{"tuple" => [":key2", 2]},
                      %{"tuple" => [":key3", 3]}
-                   ]
+                   ],
+                   "db" => [":key1", ":key2", ":key3"]
                  }
                ]
              }
@@ -2205,7 +2273,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
                          ]
                        ]
                      }
-                   ]
+                   ],
+                   "db" => [":key1", ":key3", ":key2"]
                  }
                ]
              }
@@ -2242,7 +2311,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
                          [%{"tuple" => [":versions", [":tlsv1", ":tlsv1.1", ":tlsv1.2"]]}]
                        ]
                      }
-                   ]
+                   ],
+                   "db" => [":ssl_options"]
                  }
                ]
              }
@@ -2282,7 +2352,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
                    "value" => [
                      ":console",
                      %{"tuple" => ["ExSyslogger", ":ex_syslogger"]}
-                   ]
+                   ],
+                   "db" => [":backends"]
                  }
                ]
              }
@@ -2318,7 +2389,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
                  %{
                    "group" => ":tesla",
                    "key" => ":adapter",
-                   "value" => "Tesla.Adapter.Httpc"
+                   "value" => "Tesla.Adapter.Httpc",
+                   "db" => [":adapter"]
                  }
                ]
              }
@@ -2351,7 +2423,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
                  %{
                    "group" => ":pleroma",
                    "key" => config1.key,
-                   "value" => "another_value"
+                   "value" => "another_value",
+                   "db" => [":keyaa1"]
                  }
                ]
              }
@@ -2384,7 +2457,11 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
                 %{"tuple" => [":name", "Pleroma"]}
               ]
             },
-            %{"group" => ":tesla", "key" => ":adapter", "value" => "Tesla.Adapter.Httpc"}
+            %{
+              "group" => ":tesla",
+              "key" => ":adapter",
+              "value" => "Tesla.Adapter.Httpc"
+            }
           ]
         })
 
@@ -2408,9 +2485,27 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
                      %{"tuple" => [":regex3", "~r/https:\\/\\/example.com/i"]},
                      %{"tuple" => [":regex4", "~r/https:\\/\\/example.com/s"]},
                      %{"tuple" => [":name", "Pleroma"]}
+                   ],
+                   "db" => [
+                     ":enabled",
+                     ":method",
+                     ":seconds_valid",
+                     ":path",
+                     ":key1",
+                     ":partial_chain",
+                     ":regex1",
+                     ":regex2",
+                     ":regex3",
+                     ":regex4",
+                     ":name"
                    ]
                  },
-                 %{"group" => ":tesla", "key" => ":adapter", "value" => "Tesla.Adapter.Httpc"}
+                 %{
+                   "group" => ":tesla",
+                   "key" => ":adapter",
+                   "value" => "Tesla.Adapter.Httpc",
+                   "db" => [":adapter"]
+                 }
                ]
              }
     end
@@ -2540,7 +2635,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
                          ]
                        ]
                      }
-                   ]
+                   ],
+                   "db" => [":http"]
                  }
                ]
              }
@@ -2602,7 +2698,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
                            }
                          ]
                        }
-                     ]
+                     ],
+                     "db" => [":key2", ":key3"]
                    }
                  ]
                }
@@ -2626,75 +2723,13 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
                    %{
                      "group" => ":pleroma",
                      "key" => ":key1",
-                     "value" => %{"key" => "some_val"}
+                     "value" => %{"key" => "some_val"},
+                     "db" => [":key1"]
                    }
                  ]
                }
     end
 
-    test "dispatch setting", %{conn: conn} do
-      conn =
-        post(conn, "/api/pleroma/admin/config", %{
-          configs: [
-            %{
-              "group" => ":pleroma",
-              "key" => "Pleroma.Web.Endpoint.NotReal",
-              "value" => [
-                %{
-                  "tuple" => [
-                    ":http",
-                    [
-                      %{"tuple" => [":ip", %{"tuple" => [127, 0, 0, 1]}]},
-                      %{"tuple" => [":dispatch", ["{:_,
-       [
-         {\"/api/v1/streaming\", Pleroma.Web.MastodonAPI.WebsocketHandler, []},
-         {\"/websocket\", Phoenix.Endpoint.CowboyWebSocket,
-          {Phoenix.Transports.WebSocket,
-           {Pleroma.Web.Endpoint, Pleroma.Web.UserSocket, [path: \"/websocket\"]}}},
-         {:_, Phoenix.Endpoint.Cowboy2Handler, {Pleroma.Web.Endpoint, []}}
-       ]}"]]}
-                    ]
-                  ]
-                }
-              ]
-            }
-          ]
-        })
-
-      dispatch_string =
-        "{:_, [{\"/api/v1/streaming\", Pleroma.Web.MastodonAPI.WebsocketHandler, []}, " <>
-          "{\"/websocket\", Phoenix.Endpoint.CowboyWebSocket, {Phoenix.Transports.WebSocket, " <>
-          "{Pleroma.Web.Endpoint, Pleroma.Web.UserSocket, [path: \"/websocket\"]}}}, " <>
-          "{:_, Phoenix.Endpoint.Cowboy2Handler, {Pleroma.Web.Endpoint, []}}]}"
-
-      assert json_response(conn, 200) == %{
-               "configs" => [
-                 %{
-                   "group" => ":pleroma",
-                   "key" => "Pleroma.Web.Endpoint.NotReal",
-                   "value" => [
-                     %{
-                       "tuple" => [
-                         ":http",
-                         [
-                           %{"tuple" => [":ip", %{"tuple" => [127, 0, 0, 1]}]},
-                           %{
-                             "tuple" => [
-                               ":dispatch",
-                               [
-                                 dispatch_string
-                               ]
-                             ]
-                           }
-                         ]
-                       ]
-                     }
-                   ]
-                 }
-               ]
-             }
-    end
-
     test "queues key as atom", %{conn: conn} do
       conn =
         post(conn, "/api/pleroma/admin/config", %{
@@ -2728,6 +2763,15 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
                      %{"tuple" => [":transmogrifier", 20]},
                      %{"tuple" => [":scheduled_activities", 10]},
                      %{"tuple" => [":background", 5]}
+                   ],
+                   "db" => [
+                     ":federator_incoming",
+                     ":federator_outgoing",
+                     ":web_push",
+                     ":mailer",
+                     ":transmogrifier",
+                     ":scheduled_activities",
+                     ":background"
                    ]
                  }
                ]
@@ -2758,7 +2802,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
                  %{
                    "group" => ":pleroma",
                    "key" => ":keyaa1",
-                   "value" => [%{"tuple" => [":subkey2", "val2"]}]
+                   "value" => [%{"tuple" => [":subkey2", "val2"]}],
+                   "db" => [":subkey2"]
                  }
                ]
              }
@@ -2787,7 +2832,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
                    "value" => [
                      %{"tuple" => [":proxy_url", %{"tuple" => [":socks5", "localhost", 1234]}]},
                      %{"tuple" => [":send_user_agent", false]}
-                   ]
+                   ],
+                   "db" => [":proxy_url", ":send_user_agent"]
                  }
                ]
              }
@@ -2816,7 +2862,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
                    "value" => [
                      %{"tuple" => [":proxy_url", %{"tuple" => [":socks5", "domain.com", 1234]}]},
                      %{"tuple" => [":send_user_agent", false]}
-                   ]
+                   ],
+                   "db" => [":proxy_url", ":send_user_agent"]
                  }
                ]
              }
@@ -2845,7 +2892,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
                    "value" => [
                      %{"tuple" => [":proxy_url", %{"tuple" => [":socks5", "127.0.0.1", 1234]}]},
                      %{"tuple" => [":send_user_agent", false]}
-                   ]
+                   ],
+                   "db" => [":proxy_url", ":send_user_agent"]
                  }
                ]
              }