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.MastodonAPI.FilterControllerTest do
6 use Pleroma.Web.ConnCase
8 alias Pleroma.Web.ApiSpec
9 alias Pleroma.Web.ApiSpec.Schemas.Filter
10 alias Pleroma.Web.ApiSpec.Schemas.FilterCreateRequest
11 alias Pleroma.Web.ApiSpec.Schemas.FiltersResponse
12 alias Pleroma.Web.ApiSpec.Schemas.FilterUpdateRequest
13 alias Pleroma.Web.MastodonAPI.FilterView
15 import OpenApiSpex.TestAssertions
17 test "creating a filter" do
18 %{conn: conn} = oauth_access(["write:filters"])
20 filter = %Pleroma.Filter{
27 |> put_req_header("content-type", "application/json")
28 |> post("/api/v1/filters", %{"phrase" => filter.phrase, context: filter.context})
30 assert response = json_response(conn, 200)
31 assert response["phrase"] == filter.phrase
32 assert response["context"] == filter.context
33 assert response["irreversible"] == false
34 assert response["id"] != nil
35 assert response["id"] != ""
36 assert_schema(response, "Filter", ApiSpec.spec())
39 test "fetching a list of filters" do
40 %{user: user, conn: conn} = oauth_access(["read:filters"])
42 query_one = %Pleroma.Filter{
49 query_two = %Pleroma.Filter{
56 {:ok, filter_one} = Pleroma.Filter.create(query_one)
57 {:ok, filter_two} = Pleroma.Filter.create(query_two)
61 |> get("/api/v1/filters")
68 filters: [filter_two, filter_one]
71 assert_schema(response, "FiltersResponse", ApiSpec.spec())
74 test "get a filter" do
75 %{user: user, conn: conn} = oauth_access(["read:filters"])
77 query = %Pleroma.Filter{
84 {:ok, filter} = Pleroma.Filter.create(query)
86 conn = get(conn, "/api/v1/filters/#{filter.filter_id}")
88 assert response = json_response(conn, 200)
89 assert_schema(response, "Filter", ApiSpec.spec())
92 test "update a filter" do
93 %{user: user, conn: conn} = oauth_access(["write:filters"])
95 query = %Pleroma.Filter{
103 {:ok, _filter} = Pleroma.Filter.create(query)
105 new = %Pleroma.Filter{
112 |> put_req_header("content-type", "application/json")
113 |> put("/api/v1/filters/#{query.filter_id}", %{
118 assert response = json_response(conn, 200)
119 assert response["phrase"] == new.phrase
120 assert response["context"] == new.context
121 assert response["irreversible"] == true
122 assert_schema(response, "Filter", ApiSpec.spec())
125 test "delete a filter" do
126 %{user: user, conn: conn} = oauth_access(["write:filters"])
128 query = %Pleroma.Filter{
135 {:ok, filter} = Pleroma.Filter.create(query)
137 conn = delete(conn, "/api/v1/filters/#{filter.filter_id}")
139 assert response = json_response(conn, 200)
140 assert response == %{}
143 describe "OpenAPI" do
144 test "Filter example matches schema" do
145 api_spec = ApiSpec.spec()
146 schema = Filter.schema()
147 assert_schema(schema.example, "Filter", api_spec)
150 test "FiltersResponse example matches schema" do
151 api_spec = ApiSpec.spec()
152 schema = FiltersResponse.schema()
153 assert_schema(schema.example, "FiltersResponse", api_spec)
156 test "FilterCreateRequest example matches schema" do
157 api_spec = ApiSpec.spec()
158 schema = FilterCreateRequest.schema()
159 assert_schema(schema.example, "FilterCreateRequest", api_spec)
162 test "FilterUpdateRequest example matches schema" do
163 api_spec = ApiSpec.spec()
164 schema = FilterUpdateRequest.schema()
165 assert_schema(schema.example, "FilterUpdateRequest", api_spec)