From 4d7ecf7a90c62bf1cbbfca5093fd031188786890 Mon Sep 17 00:00:00 2001 From: Sean King Date: Sat, 17 Oct 2020 22:48:24 -0600 Subject: [PATCH 01/12] Add display-name parameter for custom emoji packs --- docs/API/pleroma_api.md | 1 + lib/mix/tasks/pleroma/emoji.ex | 4 ++++ lib/pleroma/emoji/loader.ex | 4 +++- lib/pleroma/web/api_spec/operations/pleroma_emoji_pack_operation.ex | 4 ++++ 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/API/pleroma_api.md b/docs/API/pleroma_api.md index 3fd141bd2..bfb7b385f 100644 --- a/docs/API/pleroma_api.md +++ b/docs/API/pleroma_api.md @@ -416,6 +416,7 @@ The status posting endpoint takes an additional parameter, `in_reply_to_conversa * Params: * `name`: pack name * `metadata`: metadata to replace the old one + * `display-name`: Pack name that returns in `category` for each emoji in its pack whenever called from `/api/v1/custom_emojis` * `license`: Pack license * `homepage`: Pack home page url * `description`: Pack description diff --git a/lib/mix/tasks/pleroma/emoji.ex b/lib/mix/tasks/pleroma/emoji.ex index 1750373f9..db9da0be6 100644 --- a/lib/mix/tasks/pleroma/emoji.ex +++ b/lib/mix/tasks/pleroma/emoji.ex @@ -119,6 +119,7 @@ defmodule Mix.Tasks.Pleroma.Emoji do pack_json = %{ pack: %{ + "display-name" => pack["display_name"], "license" => pack["license"], "homepage" => pack["homepage"], "description" => pack["description"], @@ -144,6 +145,7 @@ defmodule Mix.Tasks.Pleroma.Emoji do args, strict: [ name: :string, + display_name: :string, license: :string, homepage: :string, description: :string, @@ -154,6 +156,7 @@ defmodule Mix.Tasks.Pleroma.Emoji do proposed_name = Path.basename(src) |> Path.rootname() name = get_option(opts, :name, "Pack name:", proposed_name) + display_name = get_option(opts, :display_name, "Emoji pack name to be displayed:") license = get_option(opts, :license, "License:") homepage = get_option(opts, :homepage, "Homepage:") description = get_option(opts, :description, "Description:") @@ -190,6 +193,7 @@ defmodule Mix.Tasks.Pleroma.Emoji do pack_json = %{ name => %{ + display_name: display_name, license: license, homepage: homepage, description: description, diff --git a/lib/pleroma/emoji/loader.ex b/lib/pleroma/emoji/loader.ex index 03a6bca0b..223c3575d 100644 --- a/lib/pleroma/emoji/loader.ex +++ b/lib/pleroma/emoji/loader.ex @@ -96,10 +96,12 @@ defmodule Pleroma.Emoji.Loader do if File.exists?(pack_file) do contents = Jason.decode!(File.read!(pack_file)) + display_name = (if contents["pack"]["display-name"], do: contents["pack"]["display-name"], else: "pack:#{pack_name}") + contents["files"] |> Enum.map(fn {name, rel_file} -> filename = Path.join("/emoji/#{pack_name}", rel_file) - {name, filename, ["pack:#{pack_name}"]} + {name, filename, ["#{display_name}"]} end) else # Load from emoji.txt / all files diff --git a/lib/pleroma/web/api_spec/operations/pleroma_emoji_pack_operation.ex b/lib/pleroma/web/api_spec/operations/pleroma_emoji_pack_operation.ex index 79f52dcb3..675a7029d 100644 --- a/lib/pleroma/web/api_spec/operations/pleroma_emoji_pack_operation.ex +++ b/lib/pleroma/web/api_spec/operations/pleroma_emoji_pack_operation.ex @@ -246,6 +246,7 @@ defmodule Pleroma.Web.ApiSpec.PleromaEmojiPackOperation do pack: %Schema{ type: :object, properties: %{ + "display-name": %Schema{type: :string}, license: %Schema{type: :string}, homepage: %Schema{type: :string, format: :uri}, description: %Schema{type: :string}, @@ -258,6 +259,7 @@ defmodule Pleroma.Web.ApiSpec.PleromaEmojiPackOperation do example: %{ "files" => %{"emacs" => "emacs.png", "guix" => "guix.png"}, "pack" => %{ + "display-name" => "Test display name", "license" => "Test license", "homepage" => "https://pleroma.social", "description" => "Test description", @@ -285,6 +287,7 @@ defmodule Pleroma.Web.ApiSpec.PleromaEmojiPackOperation do type: :object, description: "Metadata to replace the old one", properties: %{ + "display-name": %Schema{type: :string}, license: %Schema{type: :string}, homepage: %Schema{type: :string, format: :uri}, description: %Schema{type: :string}, @@ -308,6 +311,7 @@ defmodule Pleroma.Web.ApiSpec.PleromaEmojiPackOperation do %Schema{ type: :object, properties: %{ + "display-name": %Schema{type: :string}, license: %Schema{type: :string}, homepage: %Schema{type: :string, format: :uri}, description: %Schema{type: :string}, From 29d55e4757793552051eeecfcc52eeecffa7550e Mon Sep 17 00:00:00 2001 From: Sean King Date: Sat, 17 Oct 2020 23:38:19 -0600 Subject: [PATCH 02/12] Fix formatting error --- lib/pleroma/emoji/loader.ex | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/emoji/loader.ex b/lib/pleroma/emoji/loader.ex index 223c3575d..fab0d97b0 100644 --- a/lib/pleroma/emoji/loader.ex +++ b/lib/pleroma/emoji/loader.ex @@ -96,7 +96,10 @@ defmodule Pleroma.Emoji.Loader do if File.exists?(pack_file) do contents = Jason.decode!(File.read!(pack_file)) - display_name = (if contents["pack"]["display-name"], do: contents["pack"]["display-name"], else: "pack:#{pack_name}") + display_name = + if contents["pack"]["display-name"], + do: contents["pack"]["display-name"], + else: "pack:#{pack_name}" contents["files"] |> Enum.map(fn {name, rel_file} -> From 22494519c8ef245e3db26c100d3d2c8125d8e0f1 Mon Sep 17 00:00:00 2001 From: Sean King Date: Sun, 18 Oct 2020 10:37:02 -0600 Subject: [PATCH 03/12] Fix emoji tests --- lib/mix/tasks/pleroma/emoji.ex | 3 ++- test/fixtures/emoji/packs/default-manifest.json | 3 ++- test/fixtures/emoji/packs/manifest.json | 3 ++- test/mix/tasks/pleroma/emoji_test.exs | 6 ++++++ 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/lib/mix/tasks/pleroma/emoji.ex b/lib/mix/tasks/pleroma/emoji.ex index db9da0be6..72c798433 100644 --- a/lib/mix/tasks/pleroma/emoji.ex +++ b/lib/mix/tasks/pleroma/emoji.ex @@ -20,6 +20,7 @@ defmodule Mix.Tasks.Pleroma.Emoji do Enum.each(manifest, fn {name, info} -> to_print = [ {"Name", name}, + {"Display name", info["display-name"]}, {"Homepage", info["homepage"]}, {"Description", info["description"]}, {"License", info["license"]}, @@ -156,7 +157,7 @@ defmodule Mix.Tasks.Pleroma.Emoji do proposed_name = Path.basename(src) |> Path.rootname() name = get_option(opts, :name, "Pack name:", proposed_name) - display_name = get_option(opts, :display_name, "Emoji pack name to be displayed:") + display_name = get_option(opts, :display_name, "Display name:") license = get_option(opts, :license, "License:") homepage = get_option(opts, :homepage, "Homepage:") description = get_option(opts, :description, "Description:") diff --git a/test/fixtures/emoji/packs/default-manifest.json b/test/fixtures/emoji/packs/default-manifest.json index c8433808d..dfe9692bb 100644 --- a/test/fixtures/emoji/packs/default-manifest.json +++ b/test/fixtures/emoji/packs/default-manifest.json @@ -1,5 +1,6 @@ { "finmoji": { + "display-name": "Finmoji", "license": "CC BY-NC-ND 4.0", "homepage": "https://finland.fi/emoji/", "description": "Finland is the first country in the world to publish its own set of country themed emojis. The Finland emoji collection contains 56 tongue-in-cheek emotions, which were created to explain some hard-to-describe Finnish emotions, Finnish words and customs.", @@ -7,4 +8,4 @@ "src_sha256": "384025A1AC6314473863A11AC7AB38A12C01B851A3F82359B89B4D4211D3291D", "files": "finmoji.json" } -} \ No newline at end of file +} diff --git a/test/fixtures/emoji/packs/manifest.json b/test/fixtures/emoji/packs/manifest.json index 2d51a459b..2e57048dd 100644 --- a/test/fixtures/emoji/packs/manifest.json +++ b/test/fixtures/emoji/packs/manifest.json @@ -1,5 +1,6 @@ { "blobs.gg": { + "display-name": "Blob Emoji", "src_sha256": "3a12f3a181678d5b3584a62095411b0d60a335118135910d879920f8ade5a57f", "src": "https://git.pleroma.social/pleroma/emoji-index/raw/master/packs/blobs_gg.zip", "license": "Apache 2.0", @@ -7,4 +8,4 @@ "files": "blobs_gg.json", "description": "Blob Emoji from blobs.gg repacked as apng" } -} \ No newline at end of file +} diff --git a/test/mix/tasks/pleroma/emoji_test.exs b/test/mix/tasks/pleroma/emoji_test.exs index 0fb8603ac..b57e5f605 100644 --- a/test/mix/tasks/pleroma/emoji_test.exs +++ b/test/mix/tasks/pleroma/emoji_test.exs @@ -154,6 +154,8 @@ defmodule Mix.Tasks.Pleroma.EmojiTest do url, "--name", name, + "--display-name", + "display_name", "--license", "license", "--homepage", @@ -193,6 +195,8 @@ defmodule Mix.Tasks.Pleroma.EmojiTest do url, "--name", name, + "--display-name", + "display_name", "--license", "license", "--homepage", @@ -219,6 +223,8 @@ defmodule Mix.Tasks.Pleroma.EmojiTest do url, "--name", name, + "--display-name", + "display_name", "--license", "license", "--homepage", From 8401c8c1e68eca7ec7397de9695e23b4fdb08f93 Mon Sep 17 00:00:00 2001 From: Sean King Date: Sun, 18 Oct 2020 13:21:57 -0600 Subject: [PATCH 04/12] Shorten the display name parameter --- lib/pleroma/emoji/loader.ex | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lib/pleroma/emoji/loader.ex b/lib/pleroma/emoji/loader.ex index fab0d97b0..ae44f1bc8 100644 --- a/lib/pleroma/emoji/loader.ex +++ b/lib/pleroma/emoji/loader.ex @@ -96,10 +96,7 @@ defmodule Pleroma.Emoji.Loader do if File.exists?(pack_file) do contents = Jason.decode!(File.read!(pack_file)) - display_name = - if contents["pack"]["display-name"], - do: contents["pack"]["display-name"], - else: "pack:#{pack_name}" + display_name = contents["pack"]["display-name"] || "pack:#{pack_name}" contents["files"] |> Enum.map(fn {name, rel_file} -> From 2091718f146a7262cd329a1b8264b8f5979b1060 Mon Sep 17 00:00:00 2001 From: Sean King Date: Sun, 18 Oct 2020 18:53:14 -0600 Subject: [PATCH 05/12] Add display-name to instance_static test emoji packs --- test/instance_static/emoji/blobs.gg/pack.json | 11 ----------- test/instance_static/emoji/pack_bad_sha/pack.json | 3 ++- test/instance_static/emoji/test_pack/pack.json | 3 ++- test/instance_static/emoji/test_pack_nonshared/pack.json | 3 ++- .../pleroma_api/controllers/emoji_pack_controller_test.exs | 3 +++ 5 files changed, 9 insertions(+), 14 deletions(-) delete mode 100644 test/instance_static/emoji/blobs.gg/pack.json diff --git a/test/instance_static/emoji/blobs.gg/pack.json b/test/instance_static/emoji/blobs.gg/pack.json deleted file mode 100644 index 481891b08..000000000 --- a/test/instance_static/emoji/blobs.gg/pack.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "files": { - "blank": "blank.png" - }, - "pack": { - "description": "Test description", - "homepage": "https://pleroma.social", - "license": "Test license", - "share-files": true - } -} \ No newline at end of file diff --git a/test/instance_static/emoji/pack_bad_sha/pack.json b/test/instance_static/emoji/pack_bad_sha/pack.json index 35caf4298..379941ff9 100644 --- a/test/instance_static/emoji/pack_bad_sha/pack.json +++ b/test/instance_static/emoji/pack_bad_sha/pack.json @@ -1,5 +1,6 @@ { "pack": { + "display-name": "Test display name", "license": "Test license", "homepage": "https://pleroma.social", "description": "Test description", @@ -10,4 +11,4 @@ "files": { "blank": "blank.png" } -} \ No newline at end of file +} diff --git a/test/instance_static/emoji/test_pack/pack.json b/test/instance_static/emoji/test_pack/pack.json index 5b33fbb32..c108fbe62 100644 --- a/test/instance_static/emoji/test_pack/pack.json +++ b/test/instance_static/emoji/test_pack/pack.json @@ -4,9 +4,10 @@ "blank2": "blank2.png" }, "pack": { + "display-name": "Test display name", "description": "Test description", "homepage": "https://pleroma.social", "license": "Test license", "share-files": true } -} \ No newline at end of file +} diff --git a/test/instance_static/emoji/test_pack_nonshared/pack.json b/test/instance_static/emoji/test_pack_nonshared/pack.json index 09f6274d1..f473db5a0 100644 --- a/test/instance_static/emoji/test_pack_nonshared/pack.json +++ b/test/instance_static/emoji/test_pack_nonshared/pack.json @@ -1,5 +1,6 @@ { "pack": { + "display-name": "Test display name", "license": "Test license", "homepage": "https://pleroma.social", "description": "Test description", @@ -10,4 +11,4 @@ "files": { "blank": "blank.png" } -} \ No newline at end of file +} diff --git a/test/pleroma/web/pleroma_api/controllers/emoji_pack_controller_test.exs b/test/pleroma/web/pleroma_api/controllers/emoji_pack_controller_test.exs index 386ad8634..5d91b4dcd 100644 --- a/test/pleroma/web/pleroma_api/controllers/emoji_pack_controller_test.exs +++ b/test/pleroma/web/pleroma_api/controllers/emoji_pack_controller_test.exs @@ -358,6 +358,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do {:ok, pack_file: pack_file, new_data: %{ + "display-name" => "Test display name changed", "license" => "Test license changed", "homepage" => "https://pleroma.social", "description" => "Test description", @@ -533,6 +534,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do "files_count" => 2, "pack" => %{ "can-download" => true, + "display-name" => "Test display name", "description" => "Test description", "download-sha256" => _, "homepage" => "https://pleroma.social", @@ -573,6 +575,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do "files_count" => 1, "pack" => %{ "can-download" => true, + "display-name" => "Test display name", "description" => "Test description", "download-sha256" => _, "homepage" => "https://pleroma.social", From 1e17c8a3084ede9f5d2a966e07916ed84028b6b4 Mon Sep 17 00:00:00 2001 From: Sean King Date: Sun, 18 Oct 2020 18:56:05 -0600 Subject: [PATCH 06/12] Fix blobs.gg pack.json missing --- test/instance_static/emoji/blobs.gg/pack.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 test/instance_static/emoji/blobs.gg/pack.json diff --git a/test/instance_static/emoji/blobs.gg/pack.json b/test/instance_static/emoji/blobs.gg/pack.json new file mode 100644 index 000000000..a1c8829cf --- /dev/null +++ b/test/instance_static/emoji/blobs.gg/pack.json @@ -0,0 +1,12 @@ +{ + "files": { + "blank": "blank.png" + }, + "pack": { + "display-name": "Test display name", + "description": "Test description", + "homepage": "https://pleroma.social", + "license": "Test license", + "share-files": true + } +} From 7ba6efd9dfa5b5a8b5a3c048f4d0fd7e532b101a Mon Sep 17 00:00:00 2001 From: Sean King Date: Sun, 18 Oct 2020 22:07:57 -0600 Subject: [PATCH 07/12] Do tests related to a no_display_name emoji pack --- .../emoji/test_pack_no_display_name/blank.png | Bin 0 -> 95 bytes .../emoji/test_pack_no_display_name/pack.json | 11 +++++++ .../controllers/emoji_pack_controller_test.exs | 33 +++++++++++++++++---- 3 files changed, 38 insertions(+), 6 deletions(-) create mode 100644 test/instance_static/emoji/test_pack_no_display_name/blank.png create mode 100644 test/instance_static/emoji/test_pack_no_display_name/pack.json diff --git a/test/instance_static/emoji/test_pack_no_display_name/blank.png b/test/instance_static/emoji/test_pack_no_display_name/blank.png new file mode 100644 index 0000000000000000000000000000000000000000..8f50fa02340e7e09e562f86e00b6e4bd6ad1d565 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^4Is=2Bp6=1#-sr$rjj7PU get("/api/pleroma/emoji/packs") |> json_response_and_validate_schema(200) - assert resp["count"] == 4 + assert resp["count"] == 5 assert resp["packs"] |> Map.keys() - |> length() == 4 + |> length() == 5 shared = resp["packs"]["test_pack"] assert shared["files"] == %{"blank" => "blank.png", "blank2" => "blank2.png"} @@ -53,12 +53,15 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do assert non_shared["pack"]["share-files"] == false assert non_shared["pack"]["can-download"] == false + no_display_name = resp["packs"]["test_pack_no_display_name"] + assert no_display_name["pack"]["display-name"] == nil + resp = conn |> get("/api/pleroma/emoji/packs?page_size=1") |> json_response_and_validate_schema(200) - assert resp["count"] == 4 + assert resp["count"] == 5 packs = Map.keys(resp["packs"]) @@ -71,7 +74,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do |> get("/api/pleroma/emoji/packs?page_size=1&page=2") |> json_response_and_validate_schema(200) - assert resp["count"] == 4 + assert resp["count"] == 5 packs = Map.keys(resp["packs"]) assert length(packs) == 1 [pack2] = packs @@ -81,7 +84,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do |> get("/api/pleroma/emoji/packs?page_size=1&page=3") |> json_response_and_validate_schema(200) - assert resp["count"] == 4 + assert resp["count"] == 5 packs = Map.keys(resp["packs"]) assert length(packs) == 1 [pack3] = packs @@ -91,7 +94,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do |> get("/api/pleroma/emoji/packs?page_size=1&page=4") |> json_response_and_validate_schema(200) - assert resp["count"] == 4 + assert resp["count"] == 5 packs = Map.keys(resp["packs"]) assert length(packs) == 1 [pack4] = packs @@ -596,6 +599,24 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do } end + test "for pack with no display name", %{conn: conn} do + assert %{ + "files" => files, + "files_count" => 1, + "pack" => %{ + "can-download" => true, + "description" => "Test description", + "download-sha256" => _, + "homepage" => "https://pleroma.social", + "license" => "Test license", + "share-files" => true + } + } = + conn + |> get("/api/pleroma/emoji/pack?name=test_pack_no_display_name") + |> json_response_and_validate_schema(200) + end + test "error name", %{conn: conn} do assert conn |> get("/api/pleroma/emoji/pack?name= ") From d4409376d056b9fb82262d9cfc6ed719bc945c42 Mon Sep 17 00:00:00 2001 From: Sean King Date: Mon, 19 Oct 2020 11:57:10 -0600 Subject: [PATCH 08/12] Add unit tests for Mastodon API --- .../{blank.png => blank5.png} | Bin .../emoji/test_pack_no_display_name/pack.json | 2 +- .../emoji/test_pack_with_display_name/blank6.png | Bin 0 -> 95 bytes .../emoji/test_pack_with_display_name/pack.json | 12 +++++++++ .../controllers/custom_emoji_controller_test.exs | 29 +++++++++++++++++++++ .../controllers/emoji_pack_controller_test.exs | 12 ++++----- 6 files changed, 48 insertions(+), 7 deletions(-) rename test/instance_static/emoji/test_pack_no_display_name/{blank.png => blank5.png} (100%) create mode 100644 test/instance_static/emoji/test_pack_with_display_name/blank6.png create mode 100644 test/instance_static/emoji/test_pack_with_display_name/pack.json diff --git a/test/instance_static/emoji/test_pack_no_display_name/blank.png b/test/instance_static/emoji/test_pack_no_display_name/blank5.png similarity index 100% rename from test/instance_static/emoji/test_pack_no_display_name/blank.png rename to test/instance_static/emoji/test_pack_no_display_name/blank5.png diff --git a/test/instance_static/emoji/test_pack_no_display_name/pack.json b/test/instance_static/emoji/test_pack_no_display_name/pack.json index c8e4b8de7..f13dd9c5e 100644 --- a/test/instance_static/emoji/test_pack_no_display_name/pack.json +++ b/test/instance_static/emoji/test_pack_no_display_name/pack.json @@ -1,6 +1,6 @@ { "files": { - "blank": "blank.png" + "blank5": "blank5.png" }, "pack": { "description": "Test description", diff --git a/test/instance_static/emoji/test_pack_with_display_name/blank6.png b/test/instance_static/emoji/test_pack_with_display_name/blank6.png new file mode 100644 index 0000000000000000000000000000000000000000..8f50fa02340e7e09e562f86e00b6e4bd6ad1d565 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^4Is=2Bp6=1#-sr$rjj7PU get("/api/v1/custom_emojis") + |> json_response_and_validate_schema(200) + + assert test_pack = + conn + |> get("/api/pleroma/emoji/pack?name=test_pack_with_display_name") + |> json_response_and_validate_schema(200) + + assert emoji = Enum.at(Enum.filter(resp, fn(x) -> x["shortcode"] == "blank6" end), 0) + assert emoji["category"] == test_pack["pack"]["display-name"] + assert Enum.at(emoji["tags"], 0) == test_pack["pack"]["display-name"] + end + + test "without display name", %{conn: conn} do + assert resp = + conn + |> get("/api/v1/custom_emojis") + |> json_response_and_validate_schema(200) + + assert test_pack_name = "test_pack_no_display_name" + + assert emoji = Enum.at(Enum.filter(resp, fn(x) -> x["shortcode"] == "blank5" end), 0) + assert emoji["category"] == "pack:#{test_pack_name}" + assert Enum.at(emoji["tags"], 0) == "pack:#{test_pack_name}" + end end diff --git a/test/pleroma/web/pleroma_api/controllers/emoji_pack_controller_test.exs b/test/pleroma/web/pleroma_api/controllers/emoji_pack_controller_test.exs index ca9f50446..886df76fb 100644 --- a/test/pleroma/web/pleroma_api/controllers/emoji_pack_controller_test.exs +++ b/test/pleroma/web/pleroma_api/controllers/emoji_pack_controller_test.exs @@ -37,11 +37,11 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do test "GET /api/pleroma/emoji/packs", %{conn: conn} do resp = conn |> get("/api/pleroma/emoji/packs") |> json_response_and_validate_schema(200) - assert resp["count"] == 5 + assert resp["count"] == 6 assert resp["packs"] |> Map.keys() - |> length() == 5 + |> length() == 6 shared = resp["packs"]["test_pack"] assert shared["files"] == %{"blank" => "blank.png", "blank2" => "blank2.png"} @@ -61,7 +61,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do |> get("/api/pleroma/emoji/packs?page_size=1") |> json_response_and_validate_schema(200) - assert resp["count"] == 5 + assert resp["count"] == 6 packs = Map.keys(resp["packs"]) @@ -74,7 +74,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do |> get("/api/pleroma/emoji/packs?page_size=1&page=2") |> json_response_and_validate_schema(200) - assert resp["count"] == 5 + assert resp["count"] == 6 packs = Map.keys(resp["packs"]) assert length(packs) == 1 [pack2] = packs @@ -84,7 +84,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do |> get("/api/pleroma/emoji/packs?page_size=1&page=3") |> json_response_and_validate_schema(200) - assert resp["count"] == 5 + assert resp["count"] == 6 packs = Map.keys(resp["packs"]) assert length(packs) == 1 [pack3] = packs @@ -94,7 +94,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do |> get("/api/pleroma/emoji/packs?page_size=1&page=4") |> json_response_and_validate_schema(200) - assert resp["count"] == 5 + assert resp["count"] == 6 packs = Map.keys(resp["packs"]) assert length(packs) == 1 [pack4] = packs From 8d56dd8ce13b18f0f961a277d42b81fb6a955e4a Mon Sep 17 00:00:00 2001 From: Sean King Date: Mon, 19 Oct 2020 13:27:13 -0600 Subject: [PATCH 09/12] Fix formatting --- .../web/mastodon_api/controllers/custom_emoji_controller_test.exs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/pleroma/web/mastodon_api/controllers/custom_emoji_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/custom_emoji_controller_test.exs index 42cdc26b2..15a089a8c 100644 --- a/test/pleroma/web/mastodon_api/controllers/custom_emoji_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/custom_emoji_controller_test.exs @@ -32,7 +32,7 @@ defmodule Pleroma.Web.MastodonAPI.CustomEmojiControllerTest do |> get("/api/pleroma/emoji/pack?name=test_pack_with_display_name") |> json_response_and_validate_schema(200) - assert emoji = Enum.at(Enum.filter(resp, fn(x) -> x["shortcode"] == "blank6" end), 0) + assert emoji = Enum.at(Enum.filter(resp, fn x -> x["shortcode"] == "blank6" end), 0) assert emoji["category"] == test_pack["pack"]["display-name"] assert Enum.at(emoji["tags"], 0) == test_pack["pack"]["display-name"] end @@ -45,7 +45,7 @@ defmodule Pleroma.Web.MastodonAPI.CustomEmojiControllerTest do assert test_pack_name = "test_pack_no_display_name" - assert emoji = Enum.at(Enum.filter(resp, fn(x) -> x["shortcode"] == "blank5" end), 0) + assert emoji = Enum.at(Enum.filter(resp, fn x -> x["shortcode"] == "blank5" end), 0) assert emoji["category"] == "pack:#{test_pack_name}" assert Enum.at(emoji["tags"], 0) == "pack:#{test_pack_name}" end From 8092dd7265916d000ab17172b097a98e3dd850e4 Mon Sep 17 00:00:00 2001 From: Sean King Date: Mon, 19 Oct 2020 20:11:10 -0600 Subject: [PATCH 10/12] Remove display-name parameter from JSON when it's submitted blank --- lib/pleroma/emoji/pack.ex | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/lib/pleroma/emoji/pack.ex b/lib/pleroma/emoji/pack.ex index 0670f29f1..b1dcc6771 100644 --- a/lib/pleroma/emoji/pack.ex +++ b/lib/pleroma/emoji/pack.ex @@ -274,10 +274,13 @@ defmodule Pleroma.Emoji.Pack do @spec update_metadata(String.t(), map()) :: {:ok, t()} | {:error, File.posix()} def update_metadata(name, data) do with {:ok, pack} <- load_pack(name) do - if fallback_sha_changed?(pack, data) do - update_sha_and_save_metadata(pack, data) - else - save_metadata(data, pack) + cond do + fallback_sha_changed?(pack, data) -> + update_sha_and_save_metadata(pack, data) + display_name_blank?(data) -> + remove_display_name_and_save_metadata(pack, data) + true -> + save_metadata(data, pack) end end end @@ -616,14 +619,30 @@ defmodule Pleroma.Emoji.Pack do is_binary(data[:"fallback-src"]) and data[:"fallback-src"] != pack.pack["fallback-src"] end + defp display_name_blank?(data) do + data[:"display-name"] == "" + end + + defp remove_display_name_and_save_metadata(pack, data) do + data + |> Map.delete(:"display-name") + |> save_metadata(pack) + end + defp update_sha_and_save_metadata(pack, data) do with {:ok, %{body: zip}} <- Tesla.get(data[:"fallback-src"]), :ok <- validate_has_all_files(pack, zip) do fallback_sha = :sha256 |> :crypto.hash(zip) |> Base.encode16() - data - |> Map.put("fallback-src-sha256", fallback_sha) - |> save_metadata(pack) + if display_name_blank?(data) do + data + |> Map.put("fallback-src-sha256", fallback_sha) + remove_display_name_and_save_metadata(pack, data) + else + data + |> Map.put("fallback-src-sha256", fallback_sha) + |> save_metadata(pack) + end end end From 996bda165e64315c9ffc86e6e1556c7790dda480 Mon Sep 17 00:00:00 2001 From: Sean King Date: Mon, 19 Oct 2020 20:41:49 -0600 Subject: [PATCH 11/12] Fix formatting error again --- lib/pleroma/emoji/pack.ex | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/pleroma/emoji/pack.ex b/lib/pleroma/emoji/pack.ex index b1dcc6771..eb0dc152c 100644 --- a/lib/pleroma/emoji/pack.ex +++ b/lib/pleroma/emoji/pack.ex @@ -277,8 +277,10 @@ defmodule Pleroma.Emoji.Pack do cond do fallback_sha_changed?(pack, data) -> update_sha_and_save_metadata(pack, data) + display_name_blank?(data) -> remove_display_name_and_save_metadata(pack, data) + true -> save_metadata(data, pack) end @@ -637,6 +639,7 @@ defmodule Pleroma.Emoji.Pack do if display_name_blank?(data) do data |> Map.put("fallback-src-sha256", fallback_sha) + remove_display_name_and_save_metadata(pack, data) else data From 7fe38f7411b80ce8022d7045aed7a6159d9facb8 Mon Sep 17 00:00:00 2001 From: Sean King Date: Wed, 2 Dec 2020 21:20:43 -0700 Subject: [PATCH 12/12] Check also if emoji pack display name is nil --- lib/pleroma/emoji/pack.ex | 2 +- test/pleroma/web/pleroma_api/controllers/emoji_pack_controller_test.exs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/emoji/pack.ex b/lib/pleroma/emoji/pack.ex index 85e8132ec..c8f1d7dce 100644 --- a/lib/pleroma/emoji/pack.ex +++ b/lib/pleroma/emoji/pack.ex @@ -622,7 +622,7 @@ defmodule Pleroma.Emoji.Pack do end defp display_name_blank?(data) do - data[:"display-name"] == "" + data[:"display-name"] == "" or data[:"display-name"] == nil end defp remove_display_name_and_save_metadata(pack, data) do diff --git a/test/pleroma/web/pleroma_api/controllers/emoji_pack_controller_test.exs b/test/pleroma/web/pleroma_api/controllers/emoji_pack_controller_test.exs index ff8ec6859..fbe8d4cce 100644 --- a/test/pleroma/web/pleroma_api/controllers/emoji_pack_controller_test.exs +++ b/test/pleroma/web/pleroma_api/controllers/emoji_pack_controller_test.exs @@ -601,7 +601,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackControllerTest do test "for pack with no display name", %{conn: conn} do assert %{ - "files" => files, + "files" => _files, "files_count" => 1, "pack" => %{ "can-download" => true,