diff options
author | Maksim Pechnikov <parallel588@gmail.com> | 2020-10-22 10:44:00 +0300 |
---|---|---|
committer | Alexander Strizhakov <alex.strizhakov@gmail.com> | 2021-03-20 08:36:28 +0300 |
commit | f0eb5cf5b2a849bd4971eaec633557b82c6fc27a (patch) | |
tree | 8a88599bb4b2ce076239c8a3b3d37fd445975859 /test | |
parent | c5e0821a12cd26cafa0101be43dc4d0df8cd7e15 (diff) | |
download | pleroma-f0eb5cf5b2a849bd4971eaec633557b82c6fc27a.tar.gz |
updated user tags
Diffstat (limited to 'test')
-rw-r--r-- | test/mix/tasks/pleroma/user_test.exs | 6 | ||||
-rw-r--r-- | test/pleroma/repo/migrations/fix_legacy_tags_test.exs | 28 | ||||
-rw-r--r-- | test/pleroma/tag_test.exs | 94 | ||||
-rw-r--r-- | test/pleroma/user_test.exs | 26 | ||||
-rw-r--r-- | test/pleroma/web/activity_pub/mrf/tag_policy_test.exs | 20 | ||||
-rw-r--r-- | test/pleroma/web/admin_api/controllers/admin_api_controller_test.exs | 92 | ||||
-rw-r--r-- | test/pleroma/web/admin_api/controllers/tag_controller_test.exs (renamed from test/web/admin_api/controllers/tag_controller_test.exs) | 30 | ||||
-rw-r--r-- | test/pleroma/web/admin_api/search_test.exs | 9 |
8 files changed, 151 insertions, 154 deletions
diff --git a/test/mix/tasks/pleroma/user_test.exs b/test/mix/tasks/pleroma/user_test.exs index a2178bbd1..baf4ac29d 100644 --- a/test/mix/tasks/pleroma/user_test.exs +++ b/test/mix/tasks/pleroma/user_test.exs @@ -548,7 +548,7 @@ defmodule Mix.Tasks.Pleroma.UserTest do :ok = Mix.Tasks.Pleroma.User.run(["tag", user.nickname, "pleroma"]) user = User.get_cached_by_nickname(user.nickname) - assert "pleroma" in user.tags + assert "pleroma" in Enum.map(user.tags, & &1.name) end test "it prints an error message when user is not exist" do @@ -561,8 +561,8 @@ defmodule Mix.Tasks.Pleroma.UserTest do describe "untagging" do test "it deletes tags from a user" do - user = insert(:user, tags: ["pleroma"]) - assert "pleroma" in user.tags + user = insert(:user, tags: [build(:tag, name: "pleroma")]) + assert "pleroma" in Enum.map(user.tags, & &1.name) :ok = Mix.Tasks.Pleroma.User.run(["untag", user.nickname, "pleroma"]) diff --git a/test/pleroma/repo/migrations/fix_legacy_tags_test.exs b/test/pleroma/repo/migrations/fix_legacy_tags_test.exs deleted file mode 100644 index 0a1d1d0bb..000000000 --- a/test/pleroma/repo/migrations/fix_legacy_tags_test.exs +++ /dev/null @@ -1,28 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/> -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Repo.Migrations.FixLegacyTagsTest do - alias Pleroma.User - use Pleroma.DataCase, async: true - import Pleroma.Factory - import Pleroma.Tests.Helpers - - setup_all do: require_migration("20200802170532_fix_legacy_tags") - - test "change/0 converts legacy user tags into correct values", %{migration: migration} do - user = insert(:user, tags: ["force_nsfw", "force_unlisted", "verified"]) - user2 = insert(:user) - - assert :ok == migration.change() - - fixed_user = User.get_by_id(user.id) - fixed_user2 = User.get_by_id(user2.id) - - assert fixed_user.tags == ["mrf_tag:media-force-nsfw", "mrf_tag:force-unlisted", "verified"] - assert fixed_user2.tags == [] - - # user2 should not have been updated - assert fixed_user2.updated_at == fixed_user2.inserted_at - end -end diff --git a/test/pleroma/tag_test.exs b/test/pleroma/tag_test.exs new file mode 100644 index 000000000..97b64db86 --- /dev/null +++ b/test/pleroma/tag_test.exs @@ -0,0 +1,94 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.TagTest do + use Pleroma.DataCase + + import Pleroma.Factory + + alias Pleroma.Tag + + describe "upsert/1" do + test "create new normalize tag" do + Tag.upsert(" verify \n") + + assert [tag] = Pleroma.Repo.all(Tag) + assert tag.name == "verify" + end + + test "create new tag" do + Tag.upsert("verify") + + assert [tag] = Pleroma.Repo.all(Tag) + assert tag.name == "verify" + end + + test "do nothing when tag exists" do + insert(:tag, name: "verify") + Tag.upsert("verify") + + assert [tag] = Pleroma.Repo.all(Tag) + assert tag.name == "verify" + end + end + + describe "upsert_tags/1" do + test "create new normalize tags" do + Tag.upsert_tags([" verify \n", "bot", "unconfirmed "]) + + assert tags = Pleroma.Repo.all(Tag) + assert Enum.sort(Enum.map(tags, & &1.name)) == ["bot", "unconfirmed", "verify"] + end + + test "do nothing when tag exists" do + insert(:tag, name: "verify") + + Tag.upsert_tags([" verify \n", "bot", "unconfirmed "]) + + assert tags = Pleroma.Repo.all(Tag) + assert Enum.sort(Enum.map(tags, & &1.name)) == ["bot", "unconfirmed", "verify"] + end + end + + describe "get_tag_ids/1" do + test "returns tags by name" do + verify_tag = insert(:tag, name: "verify") + bot_tag = insert(:tag, name: "bot") + unconfirmed_tag = insert(:tag, name: "unconfirmed") + + tag_ids = Tag.get_tag_ids(["bot", "verify"]) + assert verify_tag.id in tag_ids + assert bot_tag.id in tag_ids + refute unconfirmed_tag.id in tag_ids + end + end + + describe "list_tags/0" do + test "returns all users tags + mrf tags" do + insert(:tag, name: "verify") + insert(:tag, name: "bot") + insert(:tag, name: "unconfirmed") + insert(:tag, name: "mrf_tag:media-strip") + + assert Enum.sort(Tag.list_tags()) == [ + "bot", + "mrf_tag:disable-any-subscription", + "mrf_tag:disable-remote-subscription", + "mrf_tag:force-unlisted", + "mrf_tag:media-force-nsfw", + "mrf_tag:media-strip", + "mrf_tag:sandbox", + "unconfirmed", + "verify" + ] + end + end + + describe "normalize_tags/1" do + test "returns normalize tags" do + assert ["verify", "bot"] == Tag.normalize_tags([" verify \n", "\n bot "]) + assert ["verify"] == Tag.normalize_tags(" verify \n") + end + end +end diff --git a/test/pleroma/user_test.exs b/test/pleroma/user_test.exs index 6f5bcab57..e0f66a74b 100644 --- a/test/pleroma/user_test.exs +++ b/test/pleroma/user_test.exs @@ -133,15 +133,19 @@ defmodule Pleroma.UserTest do describe "when tags are nil" do test "tagging a user" do - user = insert(:user, %{tags: nil}) + insert(:tag, name: "cool") + insert(:tag, name: "dude") + user = insert(:user, %{tags: []}) + user = User.tag(user, ["cool", "dude"]) + user_tags = Enum.map(user.tags, & &1.name) - assert "cool" in user.tags - assert "dude" in user.tags + assert "cool" in user_tags + assert "dude" in user_tags end test "untagging a user" do - user = insert(:user, %{tags: nil}) + user = insert(:user, %{tags: []}) user = User.untag(user, ["cool", "dude"]) assert user.tags == [] @@ -1606,6 +1610,8 @@ defmodule Pleroma.UserTest do end test "delete/1 purges a user when they wouldn't be fully deleted" do + _tag = insert(:tag, name: "verify") + user = insert(:user, %{ bio: "eyy lmao", @@ -1614,7 +1620,7 @@ defmodule Pleroma.UserTest do keys: "RSA begin buplic key", public_key: "--PRIVATE KEYE--", avatar: %{"a" => "b"}, - tags: ["qqqqq"], + # tags: ["qqqqq"], banner: %{"a" => "b"}, background: %{"a" => "b"}, note_count: 9, @@ -1641,9 +1647,17 @@ defmodule Pleroma.UserTest do also_known_as: ["https://lol.olo/users/loll"] }) + user = User.tag(user, "verify") + assert Enum.map(user.tags, & &1.name) == ["verify"] + assert Repo.aggregate(from(ut in "users_tags"), :count, :user_id) == 1 {:ok, job} = User.delete(user) {:ok, _} = ObanHelpers.perform(job) - user = User.get_by_id(user.id) + + user = + User.get_by_id(user.id) + |> Repo.preload([:tags]) + + assert Repo.aggregate(from(ut in "users_tags"), :count, :user_id) == 0 assert %User{ bio: "", diff --git a/test/pleroma/web/activity_pub/mrf/tag_policy_test.exs b/test/pleroma/web/activity_pub/mrf/tag_policy_test.exs index faaadff79..7b1486365 100644 --- a/test/pleroma/web/activity_pub/mrf/tag_policy_test.exs +++ b/test/pleroma/web/activity_pub/mrf/tag_policy_test.exs @@ -11,7 +11,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.TagPolicyTest do describe "mrf_tag:disable-any-subscription" do test "rejects message" do - actor = insert(:user, tags: ["mrf_tag:disable-any-subscription"]) + actor = insert(:user, tags: [build(:tag, name: "mrf_tag:disable-any-subscription")]) message = %{"object" => actor.ap_id, "type" => "Follow", "actor" => actor.ap_id} assert {:reject, _} = TagPolicy.filter(message) end @@ -19,15 +19,17 @@ defmodule Pleroma.Web.ActivityPub.MRF.TagPolicyTest do describe "mrf_tag:disable-remote-subscription" do test "rejects non-local follow requests" do - actor = insert(:user, tags: ["mrf_tag:disable-remote-subscription"]) - follower = insert(:user, tags: ["mrf_tag:disable-remote-subscription"], local: false) + tag = insert(:tag, name: "mrf_tag:disable-remote-subscription") + actor = insert(:user, tags: [tag]) + follower = insert(:user, tags: [tag], local: false) message = %{"object" => actor.ap_id, "type" => "Follow", "actor" => follower.ap_id} assert {:reject, _} = TagPolicy.filter(message) end test "allows non-local follow requests" do - actor = insert(:user, tags: ["mrf_tag:disable-remote-subscription"]) - follower = insert(:user, tags: ["mrf_tag:disable-remote-subscription"], local: true) + tag = insert(:tag, name: "mrf_tag:disable-remote-subscription") + actor = insert(:user, tags: [tag]) + follower = insert(:user, tags: [tag], local: true) message = %{"object" => actor.ap_id, "type" => "Follow", "actor" => follower.ap_id} assert {:ok, _message} = TagPolicy.filter(message) end @@ -35,7 +37,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.TagPolicyTest do describe "mrf_tag:sandbox" do test "removes from public timelines" do - actor = insert(:user, tags: ["mrf_tag:sandbox"]) + actor = insert(:user, tags: [build(:tag, name: "mrf_tag:sandbox")]) message = %{ "actor" => actor.ap_id, @@ -59,7 +61,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.TagPolicyTest do describe "mrf_tag:force-unlisted" do test "removes from the federated timeline" do - actor = insert(:user, tags: ["mrf_tag:force-unlisted"]) + actor = insert(:user, tags: [build(:tag, name: "mrf_tag:force-unlisted")]) message = %{ "actor" => actor.ap_id, @@ -83,7 +85,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.TagPolicyTest do describe "mrf_tag:media-strip" do test "removes attachments" do - actor = insert(:user, tags: ["mrf_tag:media-strip"]) + actor = insert(:user, tags: [build(:tag, name: "mrf_tag:media-strip")]) message = %{ "actor" => actor.ap_id, @@ -103,7 +105,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.TagPolicyTest do describe "mrf_tag:media-force-nsfw" do test "Mark as sensitive on presence of attachments" do - actor = insert(:user, tags: ["mrf_tag:media-force-nsfw"]) + actor = insert(:user, tags: [build(:tag, name: "mrf_tag:media-force-nsfw")]) message = %{ "actor" => actor.ap_id, diff --git a/test/pleroma/web/admin_api/controllers/admin_api_controller_test.exs b/test/pleroma/web/admin_api/controllers/admin_api_controller_test.exs index 8cd9f939b..bf67218f8 100644 --- a/test/pleroma/web/admin_api/controllers/admin_api_controller_test.exs +++ b/test/pleroma/web/admin_api/controllers/admin_api_controller_test.exs @@ -90,98 +90,6 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do end end - describe "PUT /api/pleroma/admin/users/tag" do - setup %{conn: conn} do - user1 = insert(:user, %{tags: ["x"]}) - user2 = insert(:user, %{tags: ["y"]}) - user3 = insert(:user, %{tags: ["unchanged"]}) - - conn = - conn - |> put_req_header("accept", "application/json") - |> put( - "/api/pleroma/admin/users/tag?nicknames[]=#{user1.nickname}&nicknames[]=" <> - "#{user2.nickname}&tags[]=foo&tags[]=bar" - ) - - %{conn: conn, user1: user1, user2: user2, user3: user3} - end - - test "it appends specified tags to users with specified nicknames", %{ - conn: conn, - admin: admin, - user1: user1, - user2: user2 - } do - assert empty_json_response(conn) - assert User.get_cached_by_id(user1.id).tags == ["x", "foo", "bar"] - assert User.get_cached_by_id(user2.id).tags == ["y", "foo", "bar"] - - log_entry = Repo.one(ModerationLog) - - users = - [user1.nickname, user2.nickname] - |> Enum.map(&"@#{&1}") - |> Enum.join(", ") - - tags = ["foo", "bar"] |> Enum.join(", ") - - assert ModerationLog.get_log_entry_message(log_entry) == - "@#{admin.nickname} added tags: #{tags} to users: #{users}" - end - - test "it does not modify tags of not specified users", %{conn: conn, user3: user3} do - assert empty_json_response(conn) - assert User.get_cached_by_id(user3.id).tags == ["unchanged"] - end - end - - describe "DELETE /api/pleroma/admin/users/tag" do - setup %{conn: conn} do - user1 = insert(:user, %{tags: ["x"]}) - user2 = insert(:user, %{tags: ["y", "z"]}) - user3 = insert(:user, %{tags: ["unchanged"]}) - - conn = - conn - |> put_req_header("accept", "application/json") - |> delete( - "/api/pleroma/admin/users/tag?nicknames[]=#{user1.nickname}&nicknames[]=" <> - "#{user2.nickname}&tags[]=x&tags[]=z" - ) - - %{conn: conn, user1: user1, user2: user2, user3: user3} - end - - test "it removes specified tags from users with specified nicknames", %{ - conn: conn, - admin: admin, - user1: user1, - user2: user2 - } do - assert empty_json_response(conn) - assert User.get_cached_by_id(user1.id).tags == [] - assert User.get_cached_by_id(user2.id).tags == ["y"] - - log_entry = Repo.one(ModerationLog) - - users = - [user1.nickname, user2.nickname] - |> Enum.map(&"@#{&1}") - |> Enum.join(", ") - - tags = ["x", "z"] |> Enum.join(", ") - - assert ModerationLog.get_log_entry_message(log_entry) == - "@#{admin.nickname} removed tags: #{tags} from users: #{users}" - end - - test "it does not modify tags of not specified users", %{conn: conn, user3: user3} do - assert empty_json_response(conn) - assert User.get_cached_by_id(user3.id).tags == ["unchanged"] - end - end - describe "/api/pleroma/admin/users/:nickname/permission_group" do test "GET is giving user_info", %{admin: admin, conn: conn} do conn = diff --git a/test/web/admin_api/controllers/tag_controller_test.exs b/test/pleroma/web/admin_api/controllers/tag_controller_test.exs index 88eeafac0..1ead1ca76 100644 --- a/test/web/admin_api/controllers/tag_controller_test.exs +++ b/test/pleroma/web/admin_api/controllers/tag_controller_test.exs @@ -58,9 +58,9 @@ defmodule Pleroma.Web.AdminAPI.TagControllerTest do describe "PUT /api/pleroma/admin/users/tag" do setup %{conn: conn} do - user1 = insert(:user, %{tags: ["x"]}) - user2 = insert(:user, %{tags: ["y"]}) - user3 = insert(:user, %{tags: ["unchanged"]}) + user1 = insert(:user, %{tags: [build(:tag, name: "x")]}) + user2 = insert(:user, %{tags: [build(:tag, name: "y")]}) + user3 = insert(:user, %{tags: [build(:tag, name: "unchanged")]}) conn = conn @@ -80,8 +80,10 @@ defmodule Pleroma.Web.AdminAPI.TagControllerTest do user2: user2 } do assert empty_json_response(conn) - assert User.get_cached_by_id(user1.id).tags == ["x", "foo", "bar"] - assert User.get_cached_by_id(user2.id).tags == ["y", "foo", "bar"] + {:ok, tags} = Repo.get_assoc(User.get_cached_by_id(user1.id), :tags) + assert Enum.map(tags, & &1.name) == ["x", "foo", "bar"] + {:ok, tags} = Repo.get_assoc(User.get_cached_by_id(user2.id), :tags) + assert Enum.map(tags, & &1.name) == ["y", "foo", "bar"] log_entry = Repo.one(ModerationLog) @@ -98,15 +100,16 @@ defmodule Pleroma.Web.AdminAPI.TagControllerTest do test "it does not modify tags of not specified users", %{conn: conn, user3: user3} do assert empty_json_response(conn) - assert User.get_cached_by_id(user3.id).tags == ["unchanged"] + {:ok, tags} = Repo.get_assoc(User.get_cached_by_id(user3.id), :tags) + assert Enum.map(tags, & &1.name) == ["unchanged"] end end describe "DELETE /api/pleroma/admin/users/tag" do setup %{conn: conn} do - user1 = insert(:user, %{tags: ["x"]}) - user2 = insert(:user, %{tags: ["y", "z"]}) - user3 = insert(:user, %{tags: ["unchanged"]}) + user1 = insert(:user, %{tags: [build(:tag, name: "x")]}) + user2 = insert(:user, %{tags: [build(:tag, name: "y"), build(:tag, name: "z")]}) + user3 = insert(:user, %{tags: [build(:tag, name: "unchanged")]}) conn = conn @@ -126,8 +129,10 @@ defmodule Pleroma.Web.AdminAPI.TagControllerTest do user2: user2 } do assert empty_json_response(conn) - assert User.get_cached_by_id(user1.id).tags == [] - assert User.get_cached_by_id(user2.id).tags == ["y"] + {:ok, tags} = Repo.get_assoc(User.get_cached_by_id(user1.id), :tags) + assert tags == [] + {:ok, tags} = Repo.get_assoc(User.get_cached_by_id(user2.id), :tags) + assert Enum.map(tags, & &1.name) == ["y"] log_entry = Repo.one(ModerationLog) @@ -144,7 +149,8 @@ defmodule Pleroma.Web.AdminAPI.TagControllerTest do test "it does not modify tags of not specified users", %{conn: conn, user3: user3} do assert empty_json_response(conn) - assert User.get_cached_by_id(user3.id).tags == ["unchanged"] + {:ok, tags} = Repo.get_assoc(User.get_cached_by_id(user3.id), :tags) + assert Enum.map(tags, & &1.name) == ["unchanged"] end end end diff --git a/test/pleroma/web/admin_api/search_test.exs b/test/pleroma/web/admin_api/search_test.exs index b8eeec65b..40e0007e8 100644 --- a/test/pleroma/web/admin_api/search_test.exs +++ b/test/pleroma/web/admin_api/search_test.exs @@ -130,17 +130,18 @@ defmodule Pleroma.Web.AdminAPI.SearchTest do end test "it returns users with tags" do - user1 = insert(:user, tags: ["first"]) - user2 = insert(:user, tags: ["second"]) + user1 = insert(:user, tags: [build(:tag, name: "first")]) + user2 = insert(:user, tags: [build(:tag, name: "second")]) insert(:user) insert(:user) {:ok, _results, total} = Search.user() {:ok, users, count} = Search.user(%{tags: ["first", "second"]}) + assert total == 4 assert count == 2 - assert user1 in users - assert user2 in users + assert user1.id in collect_ids(users) + assert user2.id in collect_ids(users) end test "it returns users by actor_types" do |