Add tests for emoji pack sharing
authorEkaterina Vaartis <vaartis@cock.li>
Mon, 12 Aug 2019 07:35:34 +0000 (10:35 +0300)
committerEkaterina Vaartis <vaartis@cock.li>
Wed, 18 Sep 2019 21:16:33 +0000 (00:16 +0300)
config/test.exs
test/instance_static/emoji/test_pack/blank.png [new file with mode: 0644]
test/instance_static/emoji/test_pack/pack.yml [new file with mode: 0644]
test/instance_static/emoji/test_pack_nonshared/pack.yml [new file with mode: 0644]
test/web/emoji_api_controller_test.exs [new file with mode: 0644]

index df512b5d7c59f5422173d6c07dd1de4b67b3096e..da2778aa749ef6b32052f0bce6ae06f91b72eb47 100644 (file)
@@ -30,7 +30,8 @@ config :pleroma, :instance,
   notify_email: "noreply@example.com",
   skip_thread_containment: false,
   federating: false,
-  external_user_synchronization: false
+  external_user_synchronization: false,
+  static_dir: "test/instance_static/"
 
 config :pleroma, :activitypub, sign_object_fetches: false
 
diff --git a/test/instance_static/emoji/test_pack/blank.png b/test/instance_static/emoji/test_pack/blank.png
new file mode 100644 (file)
index 0000000..8f50fa0
Binary files /dev/null and b/test/instance_static/emoji/test_pack/blank.png differ
diff --git a/test/instance_static/emoji/test_pack/pack.yml b/test/instance_static/emoji/test_pack/pack.yml
new file mode 100644 (file)
index 0000000..851b06d
--- /dev/null
@@ -0,0 +1,13 @@
+pack:
+  license: Test license
+  homepage: https://pleroma.social
+  description: Test description
+
+  fallblack-src: https://example.com
+  # SHA256 of the fallback-src
+  fallback-src-sha256: 65CDCCBCA9388A68023519F997367783BE69ED42864398CAC568E56F65CE0E75
+
+  share-files: true
+
+files:
+  blank: blank.png
diff --git a/test/instance_static/emoji/test_pack_nonshared/pack.yml b/test/instance_static/emoji/test_pack_nonshared/pack.yml
new file mode 100644 (file)
index 0000000..45c3404
--- /dev/null
@@ -0,0 +1,13 @@
+pack:
+  license: Test license
+  homepage: https://pleroma.social
+  description: Test description
+
+  fallblack-src: https://example.com
+  # SHA256 of the fallback-src
+  fallback-src-sha256: 65CDCCBCA9388A68023519F997367783BE69ED42864398CAC568E56F65CE0E75
+
+  share-files: false
+
+files:
+  blank: blank.png
diff --git a/test/web/emoji_api_controller_test.exs b/test/web/emoji_api_controller_test.exs
new file mode 100644 (file)
index 0000000..c037883
--- /dev/null
@@ -0,0 +1,98 @@
+defmodule Pleroma.Web.EmojiAPI.EmojiAPIControllerTest do
+  use Pleroma.Web.ConnCase
+
+  import Tesla.Mock
+
+  import Pleroma.Factory
+
+  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")
+
+    pack = resp["test_pack"]
+
+    assert Map.has_key?(pack["pack"], "download-sha256")
+    assert pack["pack"]["can-download"]
+
+    assert pack["files"] == %{"blank" => "blank.png"}
+
+    # Non-shared pack
+
+    assert Map.has_key?(resp, "test_pack_nonshared")
+
+    pack = resp["test_pack_nonshared"]
+
+    refute pack["pack"]["shared"]
+    refute pack["pack"]["can-download"]
+  end
+
+  test "downloading a shared pack from download_shared" do
+    conn = build_conn()
+
+    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.yml' end)
+    assert Enum.find(arch, fn {n, _} -> n == 'blank.png' end)
+  end
+
+  test "downloading a shared pack from another instance via download_from" do
+    on_exit(fn ->
+      File.rm_rf!("test/instance_static/emoji/test_pack2")
+    end)
+
+    mock(fn
+      %{
+        method: :get,
+        url: "https://example.com/api/pleroma/emoji/packs/list"
+      } ->
+        conn = build_conn()
+
+        conn
+        |> get(emoji_api_path(conn, :list_packs))
+        |> json_response(200)
+        |> json()
+
+      %{
+        method: :get,
+        url: "https://example.com/api/pleroma/emoji/packs/download_shared/test_pack"
+      } ->
+        conn = build_conn()
+
+        conn
+        |> get(emoji_api_path(conn, :download_shared, "test_pack"))
+        |> response(200)
+        |> text()
+    end)
+
+    admin = insert(:user, info: %{is_admin: true})
+
+    conn = build_conn()
+
+    assert conn
+           |> put_req_header("content-type", "application/json")
+           |> assign(:user, admin)
+           |> post(
+             emoji_api_path(
+               conn,
+               :download_from
+             ),
+             %{
+               instance_address: "https://example.com",
+               pack_name: "test_pack",
+               as: "test_pack2"
+             }
+             |> Jason.encode!()
+           )
+           |> text_response(200) == "ok"
+
+    assert File.exists?("test/instance_static/emoji/test_pack2/pack.yml")
+    assert File.exists?("test/instance_static/emoji/test_pack2/blank.png")
+  end
+end