Fix tagging problems for existing instances.
authorlain <lain@soykaf.club>
Mon, 17 Dec 2018 19:12:01 +0000 (20:12 +0100)
committerlain <lain@soykaf.club>
Mon, 17 Dec 2018 19:12:01 +0000 (20:12 +0100)
lib/pleroma/user.ex
test/user_test.exs

index 49928bc1387689b10d68e60890d6452a54cbc59d..3ad1ab87a69347c775e9fa7f2081414d53e814d6 100644 (file)
@@ -838,7 +838,7 @@ defmodule Pleroma.User do
     do: tag(User.get_by_nickname(nickname), tags)
 
   def tag(%User{} = user, tags),
-    do: update_tags(user, Enum.uniq(user.tags ++ normalize_tags(tags)))
+    do: update_tags(user, Enum.uniq((user.tags || []) ++ normalize_tags(tags)))
 
   def untag(user_identifiers, tags) when is_list(user_identifiers) do
     Repo.transaction(fn ->
@@ -849,7 +849,8 @@ defmodule Pleroma.User do
   def untag(nickname, tags) when is_binary(nickname),
     do: untag(User.get_by_nickname(nickname), tags)
 
-  def untag(%User{} = user, tags), do: update_tags(user, user.tags -- normalize_tags(tags))
+  def untag(%User{} = user, tags),
+    do: update_tags(user, (user.tags || []) -- normalize_tags(tags))
 
   defp update_tags(%User{} = user, new_tags) do
     {:ok, updated_user} =
index 9baa5ef242586c3cc1f80276ad01a1b054b78f2f..1e73770df11789849429e66b2e0fdd2d2474800e 100644 (file)
@@ -11,6 +11,23 @@ defmodule Pleroma.UserTest do
     :ok
   end
 
+  describe "when tags are nil" do
+    test "tagging a user" do
+      user = insert(:user, %{tags: nil})
+      user = User.tag(user, ["cool", "dude"])
+
+      assert "cool" in user.tags
+      assert "dude" in user.tags
+    end
+
+    test "untagging a user" do
+      user = insert(:user, %{tags: nil})
+      user = User.untag(user, ["cool", "dude"])
+
+      assert user.tags == []
+    end
+  end
+
   test "ap_id returns the activity pub id for the user" do
     user = UserBuilder.build()