diff options
| author | eugenijm <eugenijm@protonmail.com> | 2020-08-30 15:15:14 +0300 | 
|---|---|---|
| committer | eugenijm <eugenijm@protonmail.com> | 2020-09-17 16:48:07 +0300 | 
| commit | 582ad5d4e1587b3dba9d879bd68dd9a315c8446e (patch) | |
| tree | b65929cb8afe3bfa939ffc4bb71379b98d69a8cf /test/web | |
| parent | 5426eb59976044f88247486da86a91b8f9eb35b5 (diff) | |
| download | pleroma-582ad5d4e1587b3dba9d879bd68dd9a315c8446e.tar.gz pleroma-582ad5d4e1587b3dba9d879bd68dd9a315c8446e.zip | |
AdminAPI: Allow to modify Terms of Service and Instance Panel via Admin API
Diffstat (limited to 'test/web')
| -rw-r--r-- | test/web/admin_api/controllers/instance_document_controller_test.exs | 112 | 
1 files changed, 112 insertions, 0 deletions
| diff --git a/test/web/admin_api/controllers/instance_document_controller_test.exs b/test/web/admin_api/controllers/instance_document_controller_test.exs new file mode 100644 index 000000000..60dcc9dff --- /dev/null +++ b/test/web/admin_api/controllers/instance_document_controller_test.exs @@ -0,0 +1,112 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.AdminAPI.InstanceDocumentControllerTest do +  use Pleroma.Web.ConnCase, async: true +  import Pleroma.Factory +  alias Pleroma.Config + +  @dir "test/tmp/instance_static" +  @default_instance_panel ~s(<p>Welcome to <a href="https://pleroma.social" target="_blank">Pleroma!</a></p>) + +  setup do +    File.mkdir_p!(@dir) +    on_exit(fn -> File.rm_rf(@dir) end) +  end + +  setup do: clear_config([:instance, :static_dir], @dir) + +  setup do +    admin = insert(:user, is_admin: true) +    token = insert(:oauth_admin_token, user: admin) + +    conn = +      build_conn() +      |> assign(:user, admin) +      |> assign(:token, token) + +    {:ok, %{admin: admin, token: token, conn: conn}} +  end + +  describe "GET /api/pleroma/admin/instance_document/:name" do +    test "return the instance document url", %{conn: conn} do +      conn = get(conn, "/api/pleroma/admin/instance_document/instance-panel") + +      assert %{"url" => url} = json_response_and_validate_schema(conn, 200) +      index = get(build_conn(), url) +      response = html_response(index, 200) +      assert String.contains?(response, @default_instance_panel) +    end + +    test "it returns 403 if requested by a non-admin" do +      non_admin_user = insert(:user) +      token = insert(:oauth_token, user: non_admin_user) + +      conn = +        build_conn() +        |> assign(:user, non_admin_user) +        |> assign(:token, token) +        |> get("/api/pleroma/admin/instance_document/instance-panel") + +      assert json_response(conn, :forbidden) +    end + +    test "it returns 404 if the instance document with the given name doesn't exist", %{ +      conn: conn +    } do +      conn = get(conn, "/api/pleroma/admin/instance_document/1234") + +      assert json_response_and_validate_schema(conn, 404) +    end +  end + +  describe "PATCH /api/pleroma/admin/instance_document/:name" do +    test "uploads the instance document", %{conn: conn} do +      image = %Plug.Upload{ +        content_type: "text/html", +        path: Path.absname("test/fixtures/custom_instance_panel.html"), +        filename: "custom_instance_panel.html" +      } + +      conn = +        conn +        |> put_req_header("content-type", "multipart/form-data") +        |> patch("/api/pleroma/admin/instance_document/instance-panel", %{ +          "file" => image +        }) + +      assert %{"url" => url} = json_response_and_validate_schema(conn, 200) +      index = get(build_conn(), url) +      assert html_response(index, 200) == "<h2>Custom instance panel</h2>" +    end +  end + +  describe "DELETE /api/pleroma/admin/instance_document/:name" do +    test "deletes the instance document", %{conn: conn} do +      File.mkdir!(@dir <> "/instance/") +      File.write!(@dir <> "/instance/panel.html", "Custom instance panel") + +      conn_resp = +        conn +        |> get("/api/pleroma/admin/instance_document/instance-panel") + +      assert %{"url" => url} = json_response_and_validate_schema(conn_resp, 200) +      index = get(build_conn(), url) +      assert html_response(index, 200) == "Custom instance panel" + +      conn +      |> delete("/api/pleroma/admin/instance_document/instance-panel") +      |> json_response_and_validate_schema(200) + +      conn_resp = +        conn +        |> get("/api/pleroma/admin/instance_document/instance-panel") + +      assert %{"url" => url} = json_response_and_validate_schema(conn_resp, 200) +      index = get(build_conn(), url) +      response = html_response(index, 200) +      assert String.contains?(response, @default_instance_panel) +    end +  end +end | 
