1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2020 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 on_exit(fn -> Cachex.clear(:banned_urls_cache) end)
20 admin = insert(:user, is_admin: true)
21 token = insert(:oauth_admin_token, user: admin)
25 |> assign(:user, admin)
26 |> assign(:token, token)
28 Config.put([:media_proxy, :enabled], true)
29 Config.put([:media_proxy, :invalidation, :enabled], true)
30 Config.put([:media_proxy, :invalidation, :provider], MediaProxy.Invalidation.Script)
32 {:ok, %{admin: admin, token: token, conn: conn}}
35 describe "GET /api/pleroma/admin/media_proxy_caches" do
36 test "shows banned MediaProxy URLs", %{conn: conn} do
37 MediaProxy.put_in_banned_urls([
38 "http://localhost:4001/media/a688346.jpg",
39 "http://localhost:4001/media/fb1f4d.jpg"
42 MediaProxy.put_in_banned_urls("http://localhost:4001/media/gb1f44.jpg")
43 MediaProxy.put_in_banned_urls("http://localhost:4001/media/tb13f47.jpg")
44 MediaProxy.put_in_banned_urls("http://localhost:4001/media/wb1f46.jpg")
48 |> get("/api/pleroma/admin/media_proxy_caches?page_size=2")
49 |> json_response_and_validate_schema(200)
51 assert response["page_size"] == 2
52 assert response["count"] == 5
54 assert response["urls"] == [
55 "http://localhost:4001/media/fb1f4d.jpg",
56 "http://localhost:4001/media/a688346.jpg"
61 |> get("/api/pleroma/admin/media_proxy_caches?page_size=2&page=2")
62 |> json_response_and_validate_schema(200)
64 assert response["urls"] == [
65 "http://localhost:4001/media/gb1f44.jpg",
66 "http://localhost:4001/media/tb13f47.jpg"
69 assert response["page_size"] == 2
70 assert response["count"] == 5
74 |> get("/api/pleroma/admin/media_proxy_caches?page_size=2&page=3")
75 |> json_response_and_validate_schema(200)
77 assert response["urls"] == ["http://localhost:4001/media/wb1f46.jpg"]
80 test "search banned MediaProxy URLs", %{conn: conn} do
81 MediaProxy.put_in_banned_urls([
82 "http://localhost:4001/media/a688346.jpg",
83 "http://localhost:4001/media/ff44b1f4d.jpg"
86 MediaProxy.put_in_banned_urls("http://localhost:4001/media/gb1f44.jpg")
87 MediaProxy.put_in_banned_urls("http://localhost:4001/media/tb13f47.jpg")
88 MediaProxy.put_in_banned_urls("http://localhost:4001/media/wb1f46.jpg")
92 |> get("/api/pleroma/admin/media_proxy_caches?page_size=2&query=f44")
93 |> json_response_and_validate_schema(200)
95 assert response["urls"] == [
96 "http://localhost:4001/media/gb1f44.jpg",
97 "http://localhost:4001/media/ff44b1f4d.jpg"
100 assert response["page_size"] == 2
101 assert response["count"] == 2
105 describe "POST /api/pleroma/admin/media_proxy_caches/delete" do
106 test "deleted MediaProxy URLs from banned", %{conn: conn} do
107 MediaProxy.put_in_banned_urls([
108 "http://localhost:4001/media/a688346.jpg",
109 "http://localhost:4001/media/fb1f4d.jpg"
113 |> put_req_header("content-type", "application/json")
114 |> post("/api/pleroma/admin/media_proxy_caches/delete", %{
115 urls: ["http://localhost:4001/media/a688346.jpg"]
117 |> json_response_and_validate_schema(200)
119 refute MediaProxy.in_banned_urls("http://localhost:4001/media/a688346.jpg")
120 assert MediaProxy.in_banned_urls("http://localhost:4001/media/fb1f4d.jpg")
124 describe "POST /api/pleroma/admin/media_proxy_caches/purge" do
125 test "perform invalidates cache of MediaProxy", %{conn: conn} do
127 "http://example.com/media/a688346.jpg",
128 "http://example.com/media/fb1f4d.jpg"
132 {MediaProxy.Invalidation.Script, [],
134 purge: fn _, _ -> {"ok", 0} end
138 |> put_req_header("content-type", "application/json")
139 |> post("/api/pleroma/admin/media_proxy_caches/purge", %{urls: urls, ban: false})
140 |> json_response_and_validate_schema(200)
142 refute MediaProxy.in_banned_urls("http://example.com/media/a688346.jpg")
143 refute MediaProxy.in_banned_urls("http://example.com/media/fb1f4d.jpg")
147 test "perform invalidates cache of MediaProxy and adds url to banned", %{conn: conn} do
149 "http://example.com/media/a688346.jpg",
150 "http://example.com/media/fb1f4d.jpg"
153 with_mocks [{MediaProxy.Invalidation.Script, [], [purge: fn _, _ -> {"ok", 0} end]}] do
155 |> put_req_header("content-type", "application/json")
157 "/api/pleroma/admin/media_proxy_caches/purge",
158 %{urls: urls, ban: true}
160 |> json_response_and_validate_schema(200)
162 assert MediaProxy.in_banned_urls("http://example.com/media/a688346.jpg")
163 assert MediaProxy.in_banned_urls("http://example.com/media/fb1f4d.jpg")