1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
5 defmodule Pleroma.Web.AdminAPI.MediaProxyCacheControllerTest do
6 use Pleroma.Web.ConnCase
11 alias Pleroma.Web.MediaProxy
13 setup do: clear_config([:media_proxy])
16 admin = insert(:user, is_admin: true)
17 token = insert(:oauth_admin_token, user: admin)
21 |> assign(:user, admin)
22 |> assign(:token, token)
24 clear_config([:media_proxy, :enabled], true)
25 clear_config([:media_proxy, :invalidation, :enabled], true)
26 clear_config([:media_proxy, :invalidation, :provider], MediaProxy.Invalidation.Script)
28 {:ok, %{admin: admin, token: token, conn: conn}}
31 describe "GET /api/pleroma/admin/media_proxy_caches" do
32 test "shows banned MediaProxy URLs", %{conn: conn} do
33 MediaProxy.put_in_banned_urls([
34 "http://localhost:4001/media/a688346.jpg",
35 "http://localhost:4001/media/fb1f4d.jpg"
38 MediaProxy.put_in_banned_urls("http://localhost:4001/media/gb1f44.jpg")
39 MediaProxy.put_in_banned_urls("http://localhost:4001/media/tb13f47.jpg")
40 MediaProxy.put_in_banned_urls("http://localhost:4001/media/wb1f46.jpg")
44 |> get("/api/pleroma/admin/media_proxy_caches?page_size=2")
45 |> json_response_and_validate_schema(200)
47 assert response["page_size"] == 2
48 assert response["count"] == 5
50 assert response["urls"] == [
51 "http://localhost:4001/media/fb1f4d.jpg",
52 "http://localhost:4001/media/a688346.jpg"
57 |> get("/api/pleroma/admin/media_proxy_caches?page_size=2&page=2")
58 |> json_response_and_validate_schema(200)
60 assert response["urls"] == [
61 "http://localhost:4001/media/gb1f44.jpg",
62 "http://localhost:4001/media/tb13f47.jpg"
65 assert response["page_size"] == 2
66 assert response["count"] == 5
70 |> get("/api/pleroma/admin/media_proxy_caches?page_size=2&page=3")
71 |> json_response_and_validate_schema(200)
73 assert response["urls"] == ["http://localhost:4001/media/wb1f46.jpg"]
76 test "search banned MediaProxy URLs", %{conn: conn} do
77 MediaProxy.put_in_banned_urls([
78 "http://localhost:4001/media/a688346.jpg",
79 "http://localhost:4001/media/ff44b1f4d.jpg"
82 MediaProxy.put_in_banned_urls("http://localhost:4001/media/gb1f44.jpg")
83 MediaProxy.put_in_banned_urls("http://localhost:4001/media/tb13f47.jpg")
84 MediaProxy.put_in_banned_urls("http://localhost:4001/media/wb1f46.jpg")
88 |> get("/api/pleroma/admin/media_proxy_caches?page_size=2&query=F44")
89 |> json_response_and_validate_schema(200)
91 assert response["urls"] == [
92 "http://localhost:4001/media/gb1f44.jpg",
93 "http://localhost:4001/media/ff44b1f4d.jpg"
96 assert response["page_size"] == 2
97 assert response["count"] == 2
101 describe "POST /api/pleroma/admin/media_proxy_caches/delete" do
102 test "deleted MediaProxy URLs from banned", %{conn: conn} do
103 MediaProxy.put_in_banned_urls([
104 "http://localhost:4001/media/a688346.jpg",
105 "http://localhost:4001/media/fb1f4d.jpg"
109 |> put_req_header("content-type", "application/json")
110 |> post("/api/pleroma/admin/media_proxy_caches/delete", %{
111 urls: ["http://localhost:4001/media/a688346.jpg"]
113 |> json_response_and_validate_schema(200)
115 refute MediaProxy.in_banned_urls("http://localhost:4001/media/a688346.jpg")
116 assert MediaProxy.in_banned_urls("http://localhost:4001/media/fb1f4d.jpg")
120 describe "POST /api/pleroma/admin/media_proxy_caches/purge" do
121 test "perform invalidates cache of MediaProxy", %{conn: conn} do
123 "http://example.com/media/a688346.jpg",
124 "http://example.com/media/fb1f4d.jpg"
128 {MediaProxy.Invalidation.Script, [],
130 purge: fn _, _ -> {"ok", 0} end
134 |> put_req_header("content-type", "application/json")
135 |> post("/api/pleroma/admin/media_proxy_caches/purge", %{urls: urls, ban: false})
136 |> json_response_and_validate_schema(200)
138 refute MediaProxy.in_banned_urls("http://example.com/media/a688346.jpg")
139 refute MediaProxy.in_banned_urls("http://example.com/media/fb1f4d.jpg")
143 test "perform invalidates cache of MediaProxy and adds url to banned", %{conn: conn} do
145 "http://example.com/media/a688346.jpg",
146 "http://example.com/media/fb1f4d.jpg"
149 with_mocks [{MediaProxy.Invalidation.Script, [], [purge: fn _, _ -> {"ok", 0} end]}] do
151 |> put_req_header("content-type", "application/json")
153 "/api/pleroma/admin/media_proxy_caches/purge",
154 %{urls: urls, ban: true}
156 |> json_response_and_validate_schema(200)
158 assert MediaProxy.in_banned_urls("http://example.com/media/a688346.jpg")
159 assert MediaProxy.in_banned_urls("http://example.com/media/fb1f4d.jpg")