From 5839e67eb86d6d14b21222247ce8e113c3b26637 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Thu, 6 Feb 2020 18:01:12 +0300 Subject: return data only for updated emoji --- .../controllers/emoji_api_controller_test.exs | 162 ++++++++++++--------- 1 file changed, 91 insertions(+), 71 deletions(-) (limited to 'test/web/pleroma_api/controllers/emoji_api_controller_test.exs') diff --git a/test/web/pleroma_api/controllers/emoji_api_controller_test.exs b/test/web/pleroma_api/controllers/emoji_api_controller_test.exs index 4246eb400..6844601d7 100644 --- a/test/web/pleroma_api/controllers/emoji_api_controller_test.exs +++ b/test/web/pleroma_api/controllers/emoji_api_controller_test.exs @@ -295,96 +295,116 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do end end - test "updating pack files" do - pack_file = "#{@emoji_dir_path}/test_pack/pack.json" - original_content = File.read!(pack_file) + describe "update_file/2" do + setup do + pack_file = "#{@emoji_dir_path}/test_pack/pack.json" + original_content = File.read!(pack_file) - on_exit(fn -> - File.write!(pack_file, original_content) + on_exit(fn -> + File.write!(pack_file, original_content) + end) - File.rm_rf!("#{@emoji_dir_path}/test_pack/blank_url.png") - File.rm_rf!("#{@emoji_dir_path}/test_pack/dir") - File.rm_rf!("#{@emoji_dir_path}/test_pack/dir_2") - end) + admin = insert(:user, is_admin: true) + %{conn: conn} = oauth_access(["admin:write"], user: admin) + {:ok, conn: conn} + end - admin = insert(:user, is_admin: true) - %{conn: conn} = oauth_access(["admin:write"], user: admin) + test "update file without shortcode", %{conn: conn} do + on_exit(fn -> File.rm_rf!("#{@emoji_dir_path}/test_pack/shortcode.png") end) + + assert conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ + "action" => "add", + "file" => %Plug.Upload{ + filename: "shortcode.png", + path: "#{Pleroma.Config.get([:instance, :static_dir])}/add/shortcode.png" + } + }) + |> json_response(200) == %{"shortcode" => "shortcode.png"} + end + + test "updating pack files", %{conn: conn} do + on_exit(fn -> + File.rm_rf!("#{@emoji_dir_path}/test_pack/blank_url.png") + File.rm_rf!("#{@emoji_dir_path}/test_pack/dir") + File.rm_rf!("#{@emoji_dir_path}/test_pack/dir_2") + end) - same_name = %{ - "action" => "add", - "shortcode" => "blank", - "filename" => "dir/blank.png", - "file" => %Plug.Upload{ - filename: "blank.png", - path: "#{@emoji_dir_path}/test_pack/blank.png" + same_name = %{ + "action" => "add", + "shortcode" => "blank", + "filename" => "dir/blank.png", + "file" => %Plug.Upload{ + filename: "blank.png", + path: "#{@emoji_dir_path}/test_pack/blank.png" + } } - } - different_name = %{same_name | "shortcode" => "blank_2"} + different_name = %{same_name | "shortcode" => "blank_2"} - assert (conn - |> post(emoji_api_path(conn, :update_file, "test_pack"), same_name) - |> json_response(:conflict))["error"] =~ "already exists" + assert (conn + |> post(emoji_api_path(conn, :update_file, "test_pack"), same_name) + |> json_response(:conflict))["error"] =~ "already exists" - assert conn - |> post(emoji_api_path(conn, :update_file, "test_pack"), different_name) - |> json_response(200) == %{"blank" => "blank.png", "blank_2" => "dir/blank.png"} + assert conn + |> post(emoji_api_path(conn, :update_file, "test_pack"), different_name) + |> json_response(200) == %{"blank_2" => "dir/blank.png"} - assert File.exists?("#{@emoji_dir_path}/test_pack/dir/blank.png") + assert File.exists?("#{@emoji_dir_path}/test_pack/dir/blank.png") - assert conn - |> post(emoji_api_path(conn, :update_file, "test_pack"), %{ - "action" => "update", - "shortcode" => "blank_2", - "new_shortcode" => "blank_3", - "new_filename" => "dir_2/blank_3.png" - }) - |> json_response(200) == %{"blank" => "blank.png", "blank_3" => "dir_2/blank_3.png"} + assert conn + |> post(emoji_api_path(conn, :update_file, "test_pack"), %{ + "action" => "update", + "shortcode" => "blank_2", + "new_shortcode" => "blank_3", + "new_filename" => "dir_2/blank_3.png" + }) + |> json_response(200) == %{"blank_3" => "dir_2/blank_3.png"} - refute File.exists?("#{@emoji_dir_path}/test_pack/dir/") - assert File.exists?("#{@emoji_dir_path}/test_pack/dir_2/blank_3.png") + refute File.exists?("#{@emoji_dir_path}/test_pack/dir/") + assert File.exists?("#{@emoji_dir_path}/test_pack/dir_2/blank_3.png") - assert conn - |> post(emoji_api_path(conn, :update_file, "test_pack"), %{ - "action" => "remove", - "shortcode" => "blank_3" - }) - |> json_response(200) == %{"blank" => "blank.png"} + assert conn + |> post(emoji_api_path(conn, :update_file, "test_pack"), %{ + "action" => "remove", + "shortcode" => "blank_3" + }) + |> json_response(200) == %{"blank_3" => "dir_2/blank_3.png"} - refute File.exists?("#{@emoji_dir_path}/test_pack/dir_2/") + refute File.exists?("#{@emoji_dir_path}/test_pack/dir_2/") - mock(fn - %{ - method: :get, - url: "https://test-blank/blank_url.png" - } -> - text(File.read!("#{@emoji_dir_path}/test_pack/blank.png")) - end) + mock(fn + %{ + method: :get, + url: "https://test-blank/blank_url.png" + } -> + text(File.read!("#{@emoji_dir_path}/test_pack/blank.png")) + end) - # The name should be inferred from the URL ending - from_url = %{ - "action" => "add", - "shortcode" => "blank_url", - "file" => "https://test-blank/blank_url.png" - } + # The name should be inferred from the URL ending + from_url = %{ + "action" => "add", + "shortcode" => "blank_url", + "file" => "https://test-blank/blank_url.png" + } - assert conn - |> post(emoji_api_path(conn, :update_file, "test_pack"), from_url) - |> json_response(200) == %{ - "blank" => "blank.png", - "blank_url" => "blank_url.png" - } + assert conn + |> post(emoji_api_path(conn, :update_file, "test_pack"), from_url) + |> json_response(200) == %{ + "blank_url" => "blank_url.png" + } - assert File.exists?("#{@emoji_dir_path}/test_pack/blank_url.png") + assert File.exists?("#{@emoji_dir_path}/test_pack/blank_url.png") - assert conn - |> post(emoji_api_path(conn, :update_file, "test_pack"), %{ - "action" => "remove", - "shortcode" => "blank_url" - }) - |> json_response(200) == %{"blank" => "blank.png"} + assert conn + |> post(emoji_api_path(conn, :update_file, "test_pack"), %{ + "action" => "remove", + "shortcode" => "blank_url" + }) + |> json_response(200) == %{"blank_url" => "blank_url.png"} - refute File.exists?("#{@emoji_dir_path}/test_pack/blank_url.png") + refute File.exists?("#{@emoji_dir_path}/test_pack/blank_url.png") + end end test "creating and deleting a pack" do -- cgit v1.2.3 From 342f55fb92c723acf7f53de2dae390b72051c94b Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Sat, 28 Mar 2020 13:34:32 +0300 Subject: refactor emoji api with fixes --- .../controllers/emoji_api_controller_test.exs | 866 ++++++++++++++------- 1 file changed, 588 insertions(+), 278 deletions(-) (limited to 'test/web/pleroma_api/controllers/emoji_api_controller_test.exs') diff --git a/test/web/pleroma_api/controllers/emoji_api_controller_test.exs b/test/web/pleroma_api/controllers/emoji_api_controller_test.exs index 6844601d7..6a0d7dd11 100644 --- a/test/web/pleroma_api/controllers/emoji_api_controller_test.exs +++ b/test/web/pleroma_api/controllers/emoji_api_controller_test.exs @@ -8,212 +8,309 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do import Tesla.Mock import Pleroma.Factory - @emoji_dir_path Path.join( - Pleroma.Config.get!([:instance, :static_dir]), - "emoji" - ) + @emoji_path Path.join( + Pleroma.Config.get!([:instance, :static_dir]), + "emoji" + ) setup do: clear_config([:auth, :enforce_oauth_admin_scope_usage], false) - test "shared & non-shared pack information in list_packs is ok" do - conn = build_conn() - resp = conn |> get(emoji_api_path(conn, :list_packs)) |> json_response(200) - - assert Map.has_key?(resp, "test_pack") + setup do + admin = insert(:user, is_admin: true) + token = insert(:oauth_admin_token, user: admin) - pack = resp["test_pack"] + admin_conn = + build_conn() + |> assign(:user, admin) + |> assign(:token, token) - assert Map.has_key?(pack["pack"], "download-sha256") - assert pack["pack"]["can-download"] + Pleroma.Emoji.reload() + {:ok, %{admin_conn: admin_conn}} + end - assert pack["files"] == %{"blank" => "blank.png"} + test "GET /api/pleroma/emoji/packs", %{conn: conn} do + resp = conn |> get("/api/pleroma/emoji/packs") |> json_response(200) - # Non-shared pack + shared = resp["test_pack"] + assert shared["files"] == %{"blank" => "blank.png"} + assert Map.has_key?(shared["pack"], "download-sha256") + assert shared["pack"]["can-download"] + assert shared["pack"]["share-files"] - assert Map.has_key?(resp, "test_pack_nonshared") + non_shared = resp["test_pack_nonshared"] + assert non_shared["pack"]["share-files"] == false + assert non_shared["pack"]["can-download"] == false + end - pack = resp["test_pack_nonshared"] + describe "POST /api/pleroma/emoji/packs/list_from" do + test "shareable instance", %{admin_conn: admin_conn, conn: conn} do + resp = + conn + |> get("/api/pleroma/emoji/packs") + |> json_response(200) - refute pack["pack"]["shared"] - refute pack["pack"]["can-download"] - end + mock(fn + %{method: :get, url: "https://example.com/.well-known/nodeinfo"} -> + json(%{links: [%{href: "https://example.com/nodeinfo/2.1.json"}]}) - test "listing remote packs" do - conn = build_conn() + %{method: :get, url: "https://example.com/nodeinfo/2.1.json"} -> + json(%{metadata: %{features: ["shareable_emoji_packs"]}}) - resp = - build_conn() - |> get(emoji_api_path(conn, :list_packs)) - |> json_response(200) + %{method: :get, url: "https://example.com/api/pleroma/emoji/packs"} -> + json(resp) + end) - mock(fn - %{method: :get, url: "https://example.com/.well-known/nodeinfo"} -> - json(%{links: [%{href: "https://example.com/nodeinfo/2.1.json"}]}) + assert admin_conn + |> post("/api/pleroma/emoji/packs/list_from", %{ + instance_address: "https://example.com" + }) + |> json_response(200) == resp + end - %{method: :get, url: "https://example.com/nodeinfo/2.1.json"} -> - json(%{metadata: %{features: ["shareable_emoji_packs"]}}) + test "non shareable instance", %{admin_conn: admin_conn} do + mock(fn + %{method: :get, url: "https://example.com/.well-known/nodeinfo"} -> + json(%{links: [%{href: "https://example.com/nodeinfo/2.1.json"}]}) - %{method: :get, url: "https://example.com/api/pleroma/emoji/packs"} -> - json(resp) - end) + %{method: :get, url: "https://example.com/nodeinfo/2.1.json"} -> + json(%{metadata: %{features: []}}) + end) - assert conn - |> post(emoji_api_path(conn, :list_from), %{instance_address: "https://example.com"}) - |> json_response(200) == resp + assert admin_conn + |> post("/api/pleroma/emoji/packs/list_from", %{ + instance_address: "https://example.com" + }) + |> json_response(500) == %{ + "error" => "The requested instance does not support sharing emoji packs" + } + end end - test "downloading a shared pack from download_shared" do - conn = build_conn() + describe "GET /api/pleroma/emoji/packs/:name/download_shared" do + test "download shared pack", %{conn: conn} do + resp = + conn + |> get("/api/pleroma/emoji/packs/test_pack/download_shared") + |> response(200) - resp = - conn - |> get(emoji_api_path(conn, :download_shared, "test_pack")) - |> response(200) + {:ok, arch} = :zip.unzip(resp, [:memory]) + + assert Enum.find(arch, fn {n, _} -> n == 'pack.json' end) + assert Enum.find(arch, fn {n, _} -> n == 'blank.png' end) + end - {:ok, arch} = :zip.unzip(resp, [:memory]) + test "non existing pack", %{conn: conn} do + assert conn + |> get("/api/pleroma/emoji/packs/test_pack_for_import/download_shared") + |> json_response(:not_found) == %{ + "error" => "Pack test_pack_for_import does not exist" + } + end - assert Enum.find(arch, fn {n, _} -> n == 'pack.json' end) - assert Enum.find(arch, fn {n, _} -> n == 'blank.png' end) + test "non downloadable pack", %{conn: conn} do + assert conn + |> get("/api/pleroma/emoji/packs/test_pack_nonshared/download_shared") + |> json_response(:forbidden) == %{ + "error" => + "Pack test_pack_nonshared cannot be downloaded from this instance, either pack sharing was disabled for this pack or some files are missing" + } + end end - test "downloading shared & unshared packs from another instance, deleting them" do - on_exit(fn -> - File.rm_rf!("#{@emoji_dir_path}/test_pack2") - File.rm_rf!("#{@emoji_dir_path}/test_pack_nonshared2") - end) + describe "POST /api/pleroma/emoji/packs/download_from" do + test "shared pack from remote and non shared from fallback-src", %{ + admin_conn: admin_conn, + conn: conn + } do + mock(fn + %{method: :get, url: "https://example.com/.well-known/nodeinfo"} -> + json(%{links: [%{href: "https://example.com/nodeinfo/2.1.json"}]}) - mock(fn - %{method: :get, url: "https://old-instance/.well-known/nodeinfo"} -> - json(%{links: [%{href: "https://old-instance/nodeinfo/2.1.json"}]}) + %{method: :get, url: "https://example.com/nodeinfo/2.1.json"} -> + json(%{metadata: %{features: ["shareable_emoji_packs"]}}) - %{method: :get, url: "https://old-instance/nodeinfo/2.1.json"} -> - json(%{metadata: %{features: []}}) + %{ + method: :get, + url: "https://example.com/api/pleroma/emoji/packs/test_pack" + } -> + conn + |> get("/api/pleroma/emoji/packs/test_pack") + |> json_response(200) + |> json() - %{method: :get, url: "https://example.com/.well-known/nodeinfo"} -> - json(%{links: [%{href: "https://example.com/nodeinfo/2.1.json"}]}) + %{ + method: :get, + url: "https://example.com/api/pleroma/emoji/packs/test_pack/download_shared" + } -> + conn + |> get("/api/pleroma/emoji/packs/test_pack/download_shared") + |> response(200) + |> text() - %{method: :get, url: "https://example.com/nodeinfo/2.1.json"} -> - json(%{metadata: %{features: ["shareable_emoji_packs"]}}) + %{ + method: :get, + url: "https://example.com/api/pleroma/emoji/packs/test_pack_nonshared" + } -> + conn + |> get("/api/pleroma/emoji/packs/test_pack_nonshared") + |> json_response(200) + |> json() - %{ - method: :get, - url: "https://example.com/api/pleroma/emoji/packs/list" - } -> - conn = build_conn() + %{ + method: :get, + url: "https://nonshared-pack" + } -> + text(File.read!("#{@emoji_path}/test_pack_nonshared/nonshared.zip")) + end) - conn - |> get(emoji_api_path(conn, :list_packs)) - |> json_response(200) - |> json() + assert admin_conn + |> post("/api/pleroma/emoji/packs/download_from", %{ + instance_address: "https://example.com", + pack_name: "test_pack", + as: "test_pack2" + }) + |> json_response(200) == "ok" - %{ - method: :get, - url: "https://example.com/api/pleroma/emoji/packs/download_shared/test_pack" - } -> - conn = build_conn() + assert File.exists?("#{@emoji_path}/test_pack2/pack.json") + assert File.exists?("#{@emoji_path}/test_pack2/blank.png") - conn - |> get(emoji_api_path(conn, :download_shared, "test_pack")) - |> response(200) - |> text() + assert admin_conn + |> delete("/api/pleroma/emoji/packs/test_pack2") + |> json_response(200) == "ok" - %{ - method: :get, - url: "https://nonshared-pack" - } -> - text(File.read!("#{@emoji_dir_path}/test_pack_nonshared/nonshared.zip")) - end) + refute File.exists?("#{@emoji_path}/test_pack2") - admin = insert(:user, is_admin: true) + assert admin_conn + |> post( + "/api/pleroma/emoji/packs/download_from", + %{ + instance_address: "https://example.com", + pack_name: "test_pack_nonshared", + as: "test_pack_nonshared2" + } + ) + |> json_response(200) == "ok" - conn = - build_conn() - |> assign(:user, admin) - |> assign(:token, insert(:oauth_admin_token, user: admin, scopes: ["admin:write"])) - - assert (conn - |> put_req_header("content-type", "application/json") - |> post( - emoji_api_path( - conn, - :save_from - ), - %{ - instance_address: "https://old-instance", - pack_name: "test_pack", - as: "test_pack2" - } - |> Jason.encode!() - ) - |> json_response(500))["error"] =~ "does not support" - - assert conn - |> put_req_header("content-type", "application/json") - |> post( - emoji_api_path( - conn, - :save_from - ), - %{ - instance_address: "https://example.com", - pack_name: "test_pack", - as: "test_pack2" + assert File.exists?("#{@emoji_path}/test_pack_nonshared2/pack.json") + assert File.exists?("#{@emoji_path}/test_pack_nonshared2/blank.png") + + assert admin_conn + |> delete("/api/pleroma/emoji/packs/test_pack_nonshared2") + |> json_response(200) == "ok" + + refute File.exists?("#{@emoji_path}/test_pack_nonshared2") + end + + test "nonshareable instance", %{admin_conn: admin_conn} do + mock(fn + %{method: :get, url: "https://old-instance/.well-known/nodeinfo"} -> + json(%{links: [%{href: "https://old-instance/nodeinfo/2.1.json"}]}) + + %{method: :get, url: "https://old-instance/nodeinfo/2.1.json"} -> + json(%{metadata: %{features: []}}) + end) + + assert admin_conn + |> post( + "/api/pleroma/emoji/packs/download_from", + %{ + instance_address: "https://old-instance", + pack_name: "test_pack", + as: "test_pack2" + } + ) + |> json_response(500) == %{ + "error" => "The requested instance does not support sharing emoji packs" } - |> Jason.encode!() - ) - |> json_response(200) == "ok" + end - assert File.exists?("#{@emoji_dir_path}/test_pack2/pack.json") - assert File.exists?("#{@emoji_dir_path}/test_pack2/blank.png") + test "checksum fail", %{admin_conn: admin_conn} do + mock(fn + %{method: :get, url: "https://example.com/.well-known/nodeinfo"} -> + json(%{links: [%{href: "https://example.com/nodeinfo/2.1.json"}]}) - assert conn - |> delete(emoji_api_path(conn, :delete, "test_pack2")) - |> json_response(200) == "ok" + %{method: :get, url: "https://example.com/nodeinfo/2.1.json"} -> + json(%{metadata: %{features: ["shareable_emoji_packs"]}}) - refute File.exists?("#{@emoji_dir_path}/test_pack2") + %{ + method: :get, + url: "https://example.com/api/pleroma/emoji/packs/pack_bad_sha" + } -> + %Tesla.Env{ + status: 200, + body: Pleroma.Emoji.Pack.load_pack("pack_bad_sha") |> Jason.encode!() + } - # non-shared, downloaded from the fallback URL + %{ + method: :get, + url: "https://example.com/api/pleroma/emoji/packs/pack_bad_sha/download_shared" + } -> + %Tesla.Env{ + status: 200, + body: File.read!("test/instance_static/emoji/pack_bad_sha/pack_bad_sha.zip") + } + end) - assert conn - |> put_req_header("content-type", "application/json") - |> post( - emoji_api_path( - conn, - :save_from - ), - %{ + assert admin_conn + |> post("/api/pleroma/emoji/packs/download_from", %{ instance_address: "https://example.com", - pack_name: "test_pack_nonshared", - as: "test_pack_nonshared2" + pack_name: "pack_bad_sha", + as: "pack_bad_sha2" + }) + |> json_response(:internal_server_error) == %{ + "error" => "SHA256 for the pack doesn't match the one sent by the server" } - |> Jason.encode!() - ) - |> json_response(200) == "ok" + end + + test "other error", %{admin_conn: admin_conn} do + mock(fn + %{method: :get, url: "https://example.com/.well-known/nodeinfo"} -> + json(%{links: [%{href: "https://example.com/nodeinfo/2.1.json"}]}) + + %{method: :get, url: "https://example.com/nodeinfo/2.1.json"} -> + json(%{metadata: %{features: ["shareable_emoji_packs"]}}) - assert File.exists?("#{@emoji_dir_path}/test_pack_nonshared2/pack.json") - assert File.exists?("#{@emoji_dir_path}/test_pack_nonshared2/blank.png") + %{ + method: :get, + url: "https://example.com/api/pleroma/emoji/packs/test_pack" + } -> + %Tesla.Env{ + status: 200, + body: %{"test_pack" => Pleroma.Emoji.Pack.load_pack("test_pack")} |> Jason.encode!() + } - assert conn - |> delete(emoji_api_path(conn, :delete, "test_pack_nonshared2")) - |> json_response(200) == "ok" + %{ + method: :get, + url: "https://example.com/api/pleroma/emoji/packs/test_pack/download_shared" + } -> + %Tesla.Env{ + status: 200, + body: File.read!("test/instance_static/emoji/test_pack/pack.json") + } + end) - refute File.exists?("#{@emoji_dir_path}/test_pack_nonshared2") + assert admin_conn + |> post("/api/pleroma/emoji/packs/download_from", %{ + instance_address: "https://example.com", + pack_name: "test_pack", + as: "test_pack2" + }) + |> json_response(:internal_server_error) == %{ + "error" => + "The pack was not set as shared and there is no fallback src to download from" + } + end end describe "updating pack metadata" do setup do - pack_file = "#{@emoji_dir_path}/test_pack/pack.json" + pack_file = "#{@emoji_path}/test_pack/pack.json" original_content = File.read!(pack_file) on_exit(fn -> File.write!(pack_file, original_content) end) - admin = insert(:user, is_admin: true) - %{conn: conn} = oauth_access(["admin:write"], user: admin) - {:ok, - admin: admin, - conn: conn, pack_file: pack_file, new_data: %{ "license" => "Test license changed", @@ -224,11 +321,9 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do end test "for a pack without a fallback source", ctx do - conn = ctx[:conn] - - assert conn + assert ctx[:admin_conn] |> post( - emoji_api_path(conn, :update_metadata, "test_pack"), + "/api/pleroma/emoji/packs/test_pack/update_metadata", %{ "new_data" => ctx[:new_data] } @@ -244,7 +339,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do method: :get, url: "https://nonshared-pack" } -> - text(File.read!("#{@emoji_dir_path}/test_pack_nonshared/nonshared.zip")) + text(File.read!("#{@emoji_path}/test_pack_nonshared/nonshared.zip")) end) new_data = Map.put(ctx[:new_data], "fallback-src", "https://nonshared-pack") @@ -256,11 +351,9 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do "74409E2674DAA06C072729C6C8426C4CB3B7E0B85ED77792DB7A436E11D76DAF" ) - conn = ctx[:conn] - - assert conn + assert ctx[:admin_conn] |> post( - emoji_api_path(conn, :update_metadata, "test_pack"), + "/api/pleroma/emoji/packs/test_pack/update_metadata", %{ "new_data" => new_data } @@ -282,201 +375,418 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do new_data = Map.put(ctx[:new_data], "fallback-src", "https://nonshared-pack") - conn = ctx[:conn] - - assert (conn - |> post( - emoji_api_path(conn, :update_metadata, "test_pack"), - %{ - "new_data" => new_data - } - ) - |> json_response(:bad_request))["error"] =~ "does not have all" + assert ctx[:admin_conn] + |> post( + "/api/pleroma/emoji/packs/test_pack/update_metadata", + %{ + "new_data" => new_data + } + ) + |> json_response(:bad_request) == %{ + "error" => "The fallback archive does not have all files specified in pack.json" + } end end - describe "update_file/2" do + describe "POST /api/pleroma/emoji/packs/:pack_name/update_file" do setup do - pack_file = "#{@emoji_dir_path}/test_pack/pack.json" + pack_file = "#{@emoji_path}/test_pack/pack.json" original_content = File.read!(pack_file) on_exit(fn -> File.write!(pack_file, original_content) end) - admin = insert(:user, is_admin: true) - %{conn: conn} = oauth_access(["admin:write"], user: admin) - {:ok, conn: conn} + :ok + end + + test "create shortcode exists", %{admin_conn: admin_conn} do + assert admin_conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ + "action" => "add", + "shortcode" => "blank", + "filename" => "dir/blank.png", + "file" => %Plug.Upload{ + filename: "blank.png", + path: "#{@emoji_path}/test_pack/blank.png" + } + }) + |> json_response(:conflict) == %{ + "error" => "An emoji with the \"blank\" shortcode already exists" + } end - test "update file without shortcode", %{conn: conn} do - on_exit(fn -> File.rm_rf!("#{@emoji_dir_path}/test_pack/shortcode.png") end) + test "don't rewrite old emoji", %{admin_conn: admin_conn} do + on_exit(fn -> File.rm_rf!("#{@emoji_path}/test_pack/dir/") end) - assert conn + assert admin_conn |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ "action" => "add", + "shortcode" => "blank2", + "filename" => "dir/blank.png", "file" => %Plug.Upload{ - filename: "shortcode.png", - path: "#{Pleroma.Config.get([:instance, :static_dir])}/add/shortcode.png" + filename: "blank.png", + path: "#{@emoji_path}/test_pack/blank.png" } }) - |> json_response(200) == %{"shortcode" => "shortcode.png"} + |> json_response(200) == %{"blank" => "blank.png", "blank2" => "dir/blank.png"} + + assert File.exists?("#{@emoji_path}/test_pack/dir/blank.png") + + assert admin_conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ + "action" => "update", + "shortcode" => "blank", + "new_shortcode" => "blank2", + "new_filename" => "dir_2/blank_3.png" + }) + |> json_response(:conflict) == %{ + "error" => + "New shortcode \"blank2\" is already used. If you want to override emoji use 'force' option" + } end - test "updating pack files", %{conn: conn} do - on_exit(fn -> - File.rm_rf!("#{@emoji_dir_path}/test_pack/blank_url.png") - File.rm_rf!("#{@emoji_dir_path}/test_pack/dir") - File.rm_rf!("#{@emoji_dir_path}/test_pack/dir_2") - end) + test "rewrite old emoji with force option", %{admin_conn: admin_conn} do + on_exit(fn -> File.rm_rf!("#{@emoji_path}/test_pack/dir_2/") end) - same_name = %{ - "action" => "add", - "shortcode" => "blank", - "filename" => "dir/blank.png", - "file" => %Plug.Upload{ - filename: "blank.png", - path: "#{@emoji_dir_path}/test_pack/blank.png" - } - } + assert admin_conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ + "action" => "add", + "shortcode" => "blank2", + "filename" => "dir/blank.png", + "file" => %Plug.Upload{ + filename: "blank.png", + path: "#{@emoji_path}/test_pack/blank.png" + } + }) + |> json_response(200) == %{"blank" => "blank.png", "blank2" => "dir/blank.png"} - different_name = %{same_name | "shortcode" => "blank_2"} + assert File.exists?("#{@emoji_path}/test_pack/dir/blank.png") - assert (conn - |> post(emoji_api_path(conn, :update_file, "test_pack"), same_name) - |> json_response(:conflict))["error"] =~ "already exists" + assert admin_conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ + "action" => "update", + "shortcode" => "blank2", + "new_shortcode" => "blank3", + "new_filename" => "dir_2/blank_3.png", + "force" => true + }) + |> json_response(200) == %{ + "blank" => "blank.png", + "blank3" => "dir_2/blank_3.png" + } - assert conn - |> post(emoji_api_path(conn, :update_file, "test_pack"), different_name) - |> json_response(200) == %{"blank_2" => "dir/blank.png"} + assert File.exists?("#{@emoji_path}/test_pack/dir_2/blank_3.png") + end - assert File.exists?("#{@emoji_dir_path}/test_pack/dir/blank.png") + test "with empty filename", %{admin_conn: admin_conn} do + assert admin_conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ + "action" => "add", + "shortcode" => "blank2", + "filename" => "", + "file" => %Plug.Upload{ + filename: "blank.png", + path: "#{@emoji_path}/test_pack/blank.png" + } + }) + |> json_response(:bad_request) == %{ + "error" => "pack name, shortcode or filename cannot be empty" + } + end - assert conn - |> post(emoji_api_path(conn, :update_file, "test_pack"), %{ + test "add file with not loaded pack", %{admin_conn: admin_conn} do + assert admin_conn + |> post("/api/pleroma/emoji/packs/not_loaded/update_file", %{ + "action" => "add", + "shortcode" => "blank2", + "filename" => "dir/blank.png", + "file" => %Plug.Upload{ + filename: "blank.png", + path: "#{@emoji_path}/test_pack/blank.png" + } + }) + |> json_response(:bad_request) == %{ + "error" => "pack \"not_loaded\" is not found" + } + end + + test "remove file with not loaded pack", %{admin_conn: admin_conn} do + assert admin_conn + |> post("/api/pleroma/emoji/packs/not_loaded/update_file", %{ + "action" => "remove", + "shortcode" => "blank3" + }) + |> json_response(:bad_request) == %{"error" => "pack \"not_loaded\" is not found"} + end + + test "remove file with empty shortcode", %{admin_conn: admin_conn} do + assert admin_conn + |> post("/api/pleroma/emoji/packs/not_loaded/update_file", %{ + "action" => "remove", + "shortcode" => "" + }) + |> json_response(:bad_request) == %{ + "error" => "pack name or shortcode cannot be empty" + } + end + + test "update file with not loaded pack", %{admin_conn: admin_conn} do + assert admin_conn + |> post("/api/pleroma/emoji/packs/not_loaded/update_file", %{ + "action" => "update", + "shortcode" => "blank4", + "new_shortcode" => "blank3", + "new_filename" => "dir_2/blank_3.png" + }) + |> json_response(:bad_request) == %{"error" => "pack \"not_loaded\" is not found"} + end + + test "new with shortcode as file with update", %{admin_conn: admin_conn} do + assert admin_conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ + "action" => "add", + "shortcode" => "blank4", + "filename" => "dir/blank.png", + "file" => %Plug.Upload{ + filename: "blank.png", + path: "#{@emoji_path}/test_pack/blank.png" + } + }) + |> json_response(200) == %{"blank" => "blank.png", "blank4" => "dir/blank.png"} + + assert File.exists?("#{@emoji_path}/test_pack/dir/blank.png") + + assert admin_conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ "action" => "update", - "shortcode" => "blank_2", - "new_shortcode" => "blank_3", + "shortcode" => "blank4", + "new_shortcode" => "blank3", "new_filename" => "dir_2/blank_3.png" }) - |> json_response(200) == %{"blank_3" => "dir_2/blank_3.png"} + |> json_response(200) == %{"blank3" => "dir_2/blank_3.png", "blank" => "blank.png"} - refute File.exists?("#{@emoji_dir_path}/test_pack/dir/") - assert File.exists?("#{@emoji_dir_path}/test_pack/dir_2/blank_3.png") + refute File.exists?("#{@emoji_path}/test_pack/dir/") + assert File.exists?("#{@emoji_path}/test_pack/dir_2/blank_3.png") - assert conn - |> post(emoji_api_path(conn, :update_file, "test_pack"), %{ + assert admin_conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ "action" => "remove", - "shortcode" => "blank_3" + "shortcode" => "blank3" }) - |> json_response(200) == %{"blank_3" => "dir_2/blank_3.png"} + |> json_response(200) == %{"blank" => "blank.png"} + + refute File.exists?("#{@emoji_path}/test_pack/dir_2/") - refute File.exists?("#{@emoji_dir_path}/test_pack/dir_2/") + on_exit(fn -> File.rm_rf!("#{@emoji_path}/test_pack/dir") end) + end + test "new with shortcode from url", %{admin_conn: admin_conn} do mock(fn %{ method: :get, url: "https://test-blank/blank_url.png" } -> - text(File.read!("#{@emoji_dir_path}/test_pack/blank.png")) + text(File.read!("#{@emoji_path}/test_pack/blank.png")) end) - # The name should be inferred from the URL ending - from_url = %{ - "action" => "add", - "shortcode" => "blank_url", - "file" => "https://test-blank/blank_url.png" - } - - assert conn - |> post(emoji_api_path(conn, :update_file, "test_pack"), from_url) + assert admin_conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ + "action" => "add", + "shortcode" => "blank_url", + "file" => "https://test-blank/blank_url.png" + }) |> json_response(200) == %{ - "blank_url" => "blank_url.png" + "blank_url" => "blank_url.png", + "blank" => "blank.png" } - assert File.exists?("#{@emoji_dir_path}/test_pack/blank_url.png") + assert File.exists?("#{@emoji_path}/test_pack/blank_url.png") - assert conn - |> post(emoji_api_path(conn, :update_file, "test_pack"), %{ + on_exit(fn -> File.rm_rf!("#{@emoji_path}/test_pack/blank_url.png") end) + end + + test "new without shortcode", %{admin_conn: admin_conn} do + on_exit(fn -> File.rm_rf!("#{@emoji_path}/test_pack/shortcode.png") end) + + assert admin_conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ + "action" => "add", + "file" => %Plug.Upload{ + filename: "shortcode.png", + path: "#{Pleroma.Config.get([:instance, :static_dir])}/add/shortcode.png" + } + }) + |> json_response(200) == %{"shortcode" => "shortcode.png", "blank" => "blank.png"} + end + + test "remove non existing shortcode in pack.json", %{admin_conn: admin_conn} do + assert admin_conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ "action" => "remove", - "shortcode" => "blank_url" + "shortcode" => "blank2" + }) + |> json_response(:bad_request) == %{"error" => "Emoji \"blank2\" does not exist"} + end + + test "update non existing emoji", %{admin_conn: admin_conn} do + assert admin_conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ + "action" => "update", + "shortcode" => "blank2", + "new_shortcode" => "blank3", + "new_filename" => "dir_2/blank_3.png" }) - |> json_response(200) == %{"blank_url" => "blank_url.png"} + |> json_response(:bad_request) == %{"error" => "Emoji \"blank2\" does not exist"} + end + + test "update with empty shortcode", %{admin_conn: admin_conn} do + assert admin_conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ + "action" => "update", + "shortcode" => "blank", + "new_filename" => "dir_2/blank_3.png" + }) + |> json_response(:bad_request) == %{ + "error" => "new_shortcode or new_filename cannot be empty" + } + end - refute File.exists?("#{@emoji_dir_path}/test_pack/blank_url.png") + test "undefined action", %{admin_conn: admin_conn} do + assert admin_conn + |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ + "action" => "undefined" + }) + |> json_response(:bad_request) == %{ + "error" => "Unknown action: undefined" + } end end - test "creating and deleting a pack" do - on_exit(fn -> - File.rm_rf!("#{@emoji_dir_path}/test_created") - end) + describe "PUT /api/pleroma/emoji/packs/:name" do + test "creating and deleting a pack", %{admin_conn: admin_conn} do + assert admin_conn + |> put("/api/pleroma/emoji/packs/test_created") + |> json_response(200) == "ok" - admin = insert(:user, is_admin: true) - %{conn: conn} = oauth_access(["admin:write"], user: admin) - - assert conn - |> put_req_header("content-type", "application/json") - |> put( - emoji_api_path( - conn, - :create, - "test_created" - ) - ) - |> json_response(200) == "ok" + assert File.exists?("#{@emoji_path}/test_created/pack.json") + + assert Jason.decode!(File.read!("#{@emoji_path}/test_created/pack.json")) == %{ + "pack" => %{}, + "files" => %{} + } - assert File.exists?("#{@emoji_dir_path}/test_created/pack.json") + assert admin_conn + |> delete("/api/pleroma/emoji/packs/test_created") + |> json_response(200) == "ok" - assert Jason.decode!(File.read!("#{@emoji_dir_path}/test_created/pack.json")) == %{ - "pack" => %{}, - "files" => %{} - } + refute File.exists?("#{@emoji_path}/test_created/pack.json") + end + + test "if pack exists", %{admin_conn: admin_conn} do + path = Path.join(@emoji_path, "test_created") + File.mkdir(path) + pack_file = Jason.encode!(%{files: %{}, pack: %{}}) + File.write!(Path.join(path, "pack.json"), pack_file) + + assert admin_conn + |> put("/api/pleroma/emoji/packs/test_created") + |> json_response(:conflict) == %{ + "error" => "A pack named \"test_created\" already exists" + } + + on_exit(fn -> File.rm_rf(path) end) + end - assert conn - |> delete(emoji_api_path(conn, :delete, "test_created")) - |> json_response(200) == "ok" + test "with empty name", %{admin_conn: admin_conn} do + assert admin_conn + |> put("/api/pleroma/emoji/packs/ ") + |> json_response(:bad_request) == %{"error" => "pack name cannot be empty"} + end + end + + test "deleting nonexisting pack", %{admin_conn: admin_conn} do + assert admin_conn + |> delete("/api/pleroma/emoji/packs/non_existing") + |> json_response(:not_found) == %{"error" => "Pack non_existing does not exist"} + end - refute File.exists?("#{@emoji_dir_path}/test_created/pack.json") + test "deleting with empty name", %{admin_conn: admin_conn} do + assert admin_conn + |> delete("/api/pleroma/emoji/packs/ ") + |> json_response(:bad_request) == %{"error" => "pack name cannot be empty"} end - test "filesystem import" do + test "filesystem import", %{admin_conn: admin_conn, conn: conn} do on_exit(fn -> - File.rm!("#{@emoji_dir_path}/test_pack_for_import/emoji.txt") - File.rm!("#{@emoji_dir_path}/test_pack_for_import/pack.json") + File.rm!("#{@emoji_path}/test_pack_for_import/emoji.txt") + File.rm!("#{@emoji_path}/test_pack_for_import/pack.json") end) - conn = build_conn() - resp = conn |> get(emoji_api_path(conn, :list_packs)) |> json_response(200) + resp = conn |> get("/api/pleroma/emoji/packs") |> json_response(200) refute Map.has_key?(resp, "test_pack_for_import") - admin = insert(:user, is_admin: true) - %{conn: conn} = oauth_access(["admin:write"], user: admin) - - assert conn - |> post(emoji_api_path(conn, :import_from_fs)) + assert admin_conn + |> post("/api/pleroma/emoji/packs/import_from_fs") |> json_response(200) == ["test_pack_for_import"] - resp = conn |> get(emoji_api_path(conn, :list_packs)) |> json_response(200) + resp = conn |> get("/api/pleroma/emoji/packs") |> json_response(200) assert resp["test_pack_for_import"]["files"] == %{"blank" => "blank.png"} - File.rm!("#{@emoji_dir_path}/test_pack_for_import/pack.json") - refute File.exists?("#{@emoji_dir_path}/test_pack_for_import/pack.json") + File.rm!("#{@emoji_path}/test_pack_for_import/pack.json") + refute File.exists?("#{@emoji_path}/test_pack_for_import/pack.json") - emoji_txt_content = "blank, blank.png, Fun\n\nblank2, blank.png" + emoji_txt_content = """ + blank, blank.png, Fun + blank2, blank.png + foo, /emoji/test_pack_for_import/blank.png + bar + """ - File.write!("#{@emoji_dir_path}/test_pack_for_import/emoji.txt", emoji_txt_content) + File.write!("#{@emoji_path}/test_pack_for_import/emoji.txt", emoji_txt_content) - assert conn - |> post(emoji_api_path(conn, :import_from_fs)) + assert admin_conn + |> post("/api/pleroma/emoji/packs/import_from_fs") |> json_response(200) == ["test_pack_for_import"] - resp = build_conn() |> get(emoji_api_path(conn, :list_packs)) |> json_response(200) + resp = conn |> get("/api/pleroma/emoji/packs") |> json_response(200) assert resp["test_pack_for_import"]["files"] == %{ "blank" => "blank.png", - "blank2" => "blank.png" + "blank2" => "blank.png", + "foo" => "blank.png" } end + + describe "GET /api/pleroma/emoji/packs/:name" do + test "shows pack.json", %{conn: conn} do + assert %{ + "files" => %{"blank" => "blank.png"}, + "pack" => %{ + "can-download" => true, + "description" => "Test description", + "download-sha256" => _, + "homepage" => "https://pleroma.social", + "license" => "Test license", + "share-files" => true + } + } = + conn + |> get("/api/pleroma/emoji/packs/test_pack") + |> json_response(200) + end + + test "non existing pack", %{conn: conn} do + assert conn + |> get("/api/pleroma/emoji/packs/non_existing") + |> json_response(:not_found) == %{"error" => "Pack non_existing does not exist"} + end + + test "error name", %{conn: conn} do + assert conn + |> get("/api/pleroma/emoji/packs/ ") + |> json_response(:bad_request) == %{"error" => "pack name cannot be empty"} + end + end end -- cgit v1.2.3 From ddb757f7434c7216eec1b6ba4fa8b0b7a54157c1 Mon Sep 17 00:00:00 2001 From: Alexander Strizhakov Date: Sat, 28 Mar 2020 21:15:14 +0300 Subject: emoji api packs changes in routes with docs update --- .../controllers/emoji_api_controller_test.exs | 254 ++++++++------------- 1 file changed, 96 insertions(+), 158 deletions(-) (limited to 'test/web/pleroma_api/controllers/emoji_api_controller_test.exs') diff --git a/test/web/pleroma_api/controllers/emoji_api_controller_test.exs b/test/web/pleroma_api/controllers/emoji_api_controller_test.exs index 6a0d7dd11..d343256fe 100644 --- a/test/web/pleroma_api/controllers/emoji_api_controller_test.exs +++ b/test/web/pleroma_api/controllers/emoji_api_controller_test.exs @@ -41,7 +41,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do assert non_shared["pack"]["can-download"] == false end - describe "POST /api/pleroma/emoji/packs/list_from" do + describe "GET /api/pleroma/emoji/packs/remote" do test "shareable instance", %{admin_conn: admin_conn, conn: conn} do resp = conn @@ -60,8 +60,8 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do end) assert admin_conn - |> post("/api/pleroma/emoji/packs/list_from", %{ - instance_address: "https://example.com" + |> get("/api/pleroma/emoji/packs/remote", %{ + url: "https://example.com" }) |> json_response(200) == resp end @@ -76,20 +76,18 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do end) assert admin_conn - |> post("/api/pleroma/emoji/packs/list_from", %{ - instance_address: "https://example.com" - }) + |> get("/api/pleroma/emoji/packs/remote", %{url: "https://example.com"}) |> json_response(500) == %{ "error" => "The requested instance does not support sharing emoji packs" } end end - describe "GET /api/pleroma/emoji/packs/:name/download_shared" do + describe "GET /api/pleroma/emoji/packs/:name/archive" do test "download shared pack", %{conn: conn} do resp = conn - |> get("/api/pleroma/emoji/packs/test_pack/download_shared") + |> get("/api/pleroma/emoji/packs/test_pack/archive") |> response(200) {:ok, arch} = :zip.unzip(resp, [:memory]) @@ -100,7 +98,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do test "non existing pack", %{conn: conn} do assert conn - |> get("/api/pleroma/emoji/packs/test_pack_for_import/download_shared") + |> get("/api/pleroma/emoji/packs/test_pack_for_import/archive") |> json_response(:not_found) == %{ "error" => "Pack test_pack_for_import does not exist" } @@ -108,7 +106,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do test "non downloadable pack", %{conn: conn} do assert conn - |> get("/api/pleroma/emoji/packs/test_pack_nonshared/download_shared") + |> get("/api/pleroma/emoji/packs/test_pack_nonshared/archive") |> json_response(:forbidden) == %{ "error" => "Pack test_pack_nonshared cannot be downloaded from this instance, either pack sharing was disabled for this pack or some files are missing" @@ -116,7 +114,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do end end - describe "POST /api/pleroma/emoji/packs/download_from" do + describe "POST /api/pleroma/emoji/packs/download" do test "shared pack from remote and non shared from fallback-src", %{ admin_conn: admin_conn, conn: conn @@ -139,10 +137,10 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do %{ method: :get, - url: "https://example.com/api/pleroma/emoji/packs/test_pack/download_shared" + url: "https://example.com/api/pleroma/emoji/packs/test_pack/archive" } -> conn - |> get("/api/pleroma/emoji/packs/test_pack/download_shared") + |> get("/api/pleroma/emoji/packs/test_pack/archive") |> response(200) |> text() @@ -163,9 +161,9 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do end) assert admin_conn - |> post("/api/pleroma/emoji/packs/download_from", %{ - instance_address: "https://example.com", - pack_name: "test_pack", + |> post("/api/pleroma/emoji/packs/download", %{ + url: "https://example.com", + name: "test_pack", as: "test_pack2" }) |> json_response(200) == "ok" @@ -181,10 +179,10 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do assert admin_conn |> post( - "/api/pleroma/emoji/packs/download_from", + "/api/pleroma/emoji/packs/download", %{ - instance_address: "https://example.com", - pack_name: "test_pack_nonshared", + url: "https://example.com", + name: "test_pack_nonshared", as: "test_pack_nonshared2" } ) @@ -211,10 +209,10 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do assert admin_conn |> post( - "/api/pleroma/emoji/packs/download_from", + "/api/pleroma/emoji/packs/download", %{ - instance_address: "https://old-instance", - pack_name: "test_pack", + url: "https://old-instance", + name: "test_pack", as: "test_pack2" } ) @@ -242,7 +240,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do %{ method: :get, - url: "https://example.com/api/pleroma/emoji/packs/pack_bad_sha/download_shared" + url: "https://example.com/api/pleroma/emoji/packs/pack_bad_sha/archive" } -> %Tesla.Env{ status: 200, @@ -251,9 +249,9 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do end) assert admin_conn - |> post("/api/pleroma/emoji/packs/download_from", %{ - instance_address: "https://example.com", - pack_name: "pack_bad_sha", + |> post("/api/pleroma/emoji/packs/download", %{ + url: "https://example.com", + name: "pack_bad_sha", as: "pack_bad_sha2" }) |> json_response(:internal_server_error) == %{ @@ -275,23 +273,14 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do } -> %Tesla.Env{ status: 200, - body: %{"test_pack" => Pleroma.Emoji.Pack.load_pack("test_pack")} |> Jason.encode!() - } - - %{ - method: :get, - url: "https://example.com/api/pleroma/emoji/packs/test_pack/download_shared" - } -> - %Tesla.Env{ - status: 200, - body: File.read!("test/instance_static/emoji/test_pack/pack.json") + body: Pleroma.Emoji.Pack.load_pack("test_pack") |> Jason.encode!() } end) assert admin_conn - |> post("/api/pleroma/emoji/packs/download_from", %{ - instance_address: "https://example.com", - pack_name: "test_pack", + |> post("/api/pleroma/emoji/packs/download", %{ + url: "https://example.com", + name: "test_pack", as: "test_pack2" }) |> json_response(:internal_server_error) == %{ @@ -301,7 +290,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do end end - describe "updating pack metadata" do + describe "PATCH /api/pleroma/emoji/packs/:name" do setup do pack_file = "#{@emoji_path}/test_pack/pack.json" original_content = File.read!(pack_file) @@ -322,12 +311,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do test "for a pack without a fallback source", ctx do assert ctx[:admin_conn] - |> post( - "/api/pleroma/emoji/packs/test_pack/update_metadata", - %{ - "new_data" => ctx[:new_data] - } - ) + |> patch("/api/pleroma/emoji/packs/test_pack", %{"metadata" => ctx[:new_data]}) |> json_response(200) == ctx[:new_data] assert Jason.decode!(File.read!(ctx[:pack_file]))["pack"] == ctx[:new_data] @@ -352,12 +336,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do ) assert ctx[:admin_conn] - |> post( - "/api/pleroma/emoji/packs/test_pack/update_metadata", - %{ - "new_data" => new_data - } - ) + |> patch("/api/pleroma/emoji/packs/test_pack", %{metadata: new_data}) |> json_response(200) == new_data_with_sha assert Jason.decode!(File.read!(ctx[:pack_file]))["pack"] == new_data_with_sha @@ -376,19 +355,14 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do new_data = Map.put(ctx[:new_data], "fallback-src", "https://nonshared-pack") assert ctx[:admin_conn] - |> post( - "/api/pleroma/emoji/packs/test_pack/update_metadata", - %{ - "new_data" => new_data - } - ) + |> patch("/api/pleroma/emoji/packs/test_pack", %{metadata: new_data}) |> json_response(:bad_request) == %{ "error" => "The fallback archive does not have all files specified in pack.json" } end end - describe "POST /api/pleroma/emoji/packs/:pack_name/update_file" do + describe "POST/PATCH/DELETE /api/pleroma/emoji/packs/:name/files" do setup do pack_file = "#{@emoji_path}/test_pack/pack.json" original_content = File.read!(pack_file) @@ -402,11 +376,10 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do test "create shortcode exists", %{admin_conn: admin_conn} do assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "add", - "shortcode" => "blank", - "filename" => "dir/blank.png", - "file" => %Plug.Upload{ + |> post("/api/pleroma/emoji/packs/test_pack/files", %{ + shortcode: "blank", + filename: "dir/blank.png", + file: %Plug.Upload{ filename: "blank.png", path: "#{@emoji_path}/test_pack/blank.png" } @@ -420,11 +393,10 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do on_exit(fn -> File.rm_rf!("#{@emoji_path}/test_pack/dir/") end) assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "add", - "shortcode" => "blank2", - "filename" => "dir/blank.png", - "file" => %Plug.Upload{ + |> post("/api/pleroma/emoji/packs/test_pack/files", %{ + shortcode: "blank2", + filename: "dir/blank.png", + file: %Plug.Upload{ filename: "blank.png", path: "#{@emoji_path}/test_pack/blank.png" } @@ -434,11 +406,10 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do assert File.exists?("#{@emoji_path}/test_pack/dir/blank.png") assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "update", - "shortcode" => "blank", - "new_shortcode" => "blank2", - "new_filename" => "dir_2/blank_3.png" + |> patch("/api/pleroma/emoji/packs/test_pack/files", %{ + shortcode: "blank", + new_shortcode: "blank2", + new_filename: "dir_2/blank_3.png" }) |> json_response(:conflict) == %{ "error" => @@ -450,11 +421,10 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do on_exit(fn -> File.rm_rf!("#{@emoji_path}/test_pack/dir_2/") end) assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "add", - "shortcode" => "blank2", - "filename" => "dir/blank.png", - "file" => %Plug.Upload{ + |> post("/api/pleroma/emoji/packs/test_pack/files", %{ + shortcode: "blank2", + filename: "dir/blank.png", + file: %Plug.Upload{ filename: "blank.png", path: "#{@emoji_path}/test_pack/blank.png" } @@ -464,12 +434,11 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do assert File.exists?("#{@emoji_path}/test_pack/dir/blank.png") assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "update", - "shortcode" => "blank2", - "new_shortcode" => "blank3", - "new_filename" => "dir_2/blank_3.png", - "force" => true + |> patch("/api/pleroma/emoji/packs/test_pack/files", %{ + shortcode: "blank2", + new_shortcode: "blank3", + new_filename: "dir_2/blank_3.png", + force: true }) |> json_response(200) == %{ "blank" => "blank.png", @@ -481,11 +450,10 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do test "with empty filename", %{admin_conn: admin_conn} do assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "add", - "shortcode" => "blank2", - "filename" => "", - "file" => %Plug.Upload{ + |> post("/api/pleroma/emoji/packs/test_pack/files", %{ + shortcode: "blank2", + filename: "", + file: %Plug.Upload{ filename: "blank.png", path: "#{@emoji_path}/test_pack/blank.png" } @@ -497,11 +465,10 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do test "add file with not loaded pack", %{admin_conn: admin_conn} do assert admin_conn - |> post("/api/pleroma/emoji/packs/not_loaded/update_file", %{ - "action" => "add", - "shortcode" => "blank2", - "filename" => "dir/blank.png", - "file" => %Plug.Upload{ + |> post("/api/pleroma/emoji/packs/not_loaded/files", %{ + shortcode: "blank2", + filename: "dir/blank.png", + file: %Plug.Upload{ filename: "blank.png", path: "#{@emoji_path}/test_pack/blank.png" } @@ -513,19 +480,13 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do test "remove file with not loaded pack", %{admin_conn: admin_conn} do assert admin_conn - |> post("/api/pleroma/emoji/packs/not_loaded/update_file", %{ - "action" => "remove", - "shortcode" => "blank3" - }) + |> delete("/api/pleroma/emoji/packs/not_loaded/files", %{shortcode: "blank3"}) |> json_response(:bad_request) == %{"error" => "pack \"not_loaded\" is not found"} end test "remove file with empty shortcode", %{admin_conn: admin_conn} do assert admin_conn - |> post("/api/pleroma/emoji/packs/not_loaded/update_file", %{ - "action" => "remove", - "shortcode" => "" - }) + |> delete("/api/pleroma/emoji/packs/not_loaded/files", %{shortcode: ""}) |> json_response(:bad_request) == %{ "error" => "pack name or shortcode cannot be empty" } @@ -533,22 +494,20 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do test "update file with not loaded pack", %{admin_conn: admin_conn} do assert admin_conn - |> post("/api/pleroma/emoji/packs/not_loaded/update_file", %{ - "action" => "update", - "shortcode" => "blank4", - "new_shortcode" => "blank3", - "new_filename" => "dir_2/blank_3.png" + |> patch("/api/pleroma/emoji/packs/not_loaded/files", %{ + shortcode: "blank4", + new_shortcode: "blank3", + new_filename: "dir_2/blank_3.png" }) |> json_response(:bad_request) == %{"error" => "pack \"not_loaded\" is not found"} end test "new with shortcode as file with update", %{admin_conn: admin_conn} do assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "add", - "shortcode" => "blank4", - "filename" => "dir/blank.png", - "file" => %Plug.Upload{ + |> post("/api/pleroma/emoji/packs/test_pack/files", %{ + shortcode: "blank4", + filename: "dir/blank.png", + file: %Plug.Upload{ filename: "blank.png", path: "#{@emoji_path}/test_pack/blank.png" } @@ -558,11 +517,10 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do assert File.exists?("#{@emoji_path}/test_pack/dir/blank.png") assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "update", - "shortcode" => "blank4", - "new_shortcode" => "blank3", - "new_filename" => "dir_2/blank_3.png" + |> patch("/api/pleroma/emoji/packs/test_pack/files", %{ + shortcode: "blank4", + new_shortcode: "blank3", + new_filename: "dir_2/blank_3.png" }) |> json_response(200) == %{"blank3" => "dir_2/blank_3.png", "blank" => "blank.png"} @@ -570,10 +528,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do assert File.exists?("#{@emoji_path}/test_pack/dir_2/blank_3.png") assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "remove", - "shortcode" => "blank3" - }) + |> delete("/api/pleroma/emoji/packs/test_pack/files", %{shortcode: "blank3"}) |> json_response(200) == %{"blank" => "blank.png"} refute File.exists?("#{@emoji_path}/test_pack/dir_2/") @@ -591,10 +546,9 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do end) assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "add", - "shortcode" => "blank_url", - "file" => "https://test-blank/blank_url.png" + |> post("/api/pleroma/emoji/packs/test_pack/files", %{ + shortcode: "blank_url", + file: "https://test-blank/blank_url.png" }) |> json_response(200) == %{ "blank_url" => "blank_url.png", @@ -610,9 +564,8 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do on_exit(fn -> File.rm_rf!("#{@emoji_path}/test_pack/shortcode.png") end) assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "add", - "file" => %Plug.Upload{ + |> post("/api/pleroma/emoji/packs/test_pack/files", %{ + file: %Plug.Upload{ filename: "shortcode.png", path: "#{Pleroma.Config.get([:instance, :static_dir])}/add/shortcode.png" } @@ -622,51 +575,36 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do test "remove non existing shortcode in pack.json", %{admin_conn: admin_conn} do assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "remove", - "shortcode" => "blank2" - }) + |> delete("/api/pleroma/emoji/packs/test_pack/files", %{shortcode: "blank2"}) |> json_response(:bad_request) == %{"error" => "Emoji \"blank2\" does not exist"} end test "update non existing emoji", %{admin_conn: admin_conn} do assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "update", - "shortcode" => "blank2", - "new_shortcode" => "blank3", - "new_filename" => "dir_2/blank_3.png" + |> patch("/api/pleroma/emoji/packs/test_pack/files", %{ + shortcode: "blank2", + new_shortcode: "blank3", + new_filename: "dir_2/blank_3.png" }) |> json_response(:bad_request) == %{"error" => "Emoji \"blank2\" does not exist"} end test "update with empty shortcode", %{admin_conn: admin_conn} do assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "update", - "shortcode" => "blank", - "new_filename" => "dir_2/blank_3.png" + |> patch("/api/pleroma/emoji/packs/test_pack/files", %{ + shortcode: "blank", + new_filename: "dir_2/blank_3.png" }) |> json_response(:bad_request) == %{ "error" => "new_shortcode or new_filename cannot be empty" } end - - test "undefined action", %{admin_conn: admin_conn} do - assert admin_conn - |> post("/api/pleroma/emoji/packs/test_pack/update_file", %{ - "action" => "undefined" - }) - |> json_response(:bad_request) == %{ - "error" => "Unknown action: undefined" - } - end end - describe "PUT /api/pleroma/emoji/packs/:name" do + describe "POST/DELETE /api/pleroma/emoji/packs/:name" do test "creating and deleting a pack", %{admin_conn: admin_conn} do assert admin_conn - |> put("/api/pleroma/emoji/packs/test_created") + |> post("/api/pleroma/emoji/packs/test_created") |> json_response(200) == "ok" assert File.exists?("#{@emoji_path}/test_created/pack.json") @@ -690,7 +628,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do File.write!(Path.join(path, "pack.json"), pack_file) assert admin_conn - |> put("/api/pleroma/emoji/packs/test_created") + |> post("/api/pleroma/emoji/packs/test_created") |> json_response(:conflict) == %{ "error" => "A pack named \"test_created\" already exists" } @@ -700,7 +638,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do test "with empty name", %{admin_conn: admin_conn} do assert admin_conn - |> put("/api/pleroma/emoji/packs/ ") + |> post("/api/pleroma/emoji/packs/ ") |> json_response(:bad_request) == %{"error" => "pack name cannot be empty"} end end @@ -728,7 +666,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do refute Map.has_key?(resp, "test_pack_for_import") assert admin_conn - |> post("/api/pleroma/emoji/packs/import_from_fs") + |> get("/api/pleroma/emoji/packs/import") |> json_response(200) == ["test_pack_for_import"] resp = conn |> get("/api/pleroma/emoji/packs") |> json_response(200) @@ -747,7 +685,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiAPIControllerTest do File.write!("#{@emoji_path}/test_pack_for_import/emoji.txt", emoji_txt_content) assert admin_conn - |> post("/api/pleroma/emoji/packs/import_from_fs") + |> get("/api/pleroma/emoji/packs/import") |> json_response(200) == ["test_pack_for_import"] resp = conn |> get("/api/pleroma/emoji/packs") |> json_response(200) -- cgit v1.2.3