field(:context, :string)
end
+ def changeset(mute, params \\ %{}) do
+ mute
+ |> Ecto.Changeset.cast(params, [:user_id, :context])
+ |> Ecto.Changeset.foreign_key_constraint(:user_id)
+ |> Ecto.Changeset.unique_constraint(:user_id, name: :unique_index)
+ end
+
def add_mute(user, id) do
activity = Activity.get_by_id(id)
context = activity.data["context"]
- mute = %Pleroma.Web.ThreadMute{user_id: user.id, context: context}
- Repo.insert(mute)
- {:ok, activity}
+ changeset = changeset(%Pleroma.Web.ThreadMute{}, %{user_id: user.id, context: context})
+
+ case Repo.insert(changeset) do
+ {:ok, _} -> {:ok, activity}
+ {:error, _} -> {:error, "conversation is already muted"}
+ end
end
def remove_mute(user, id) do
end
test "add mute", %{user: user, activity: activity} do
- id = activity.id
- {:ok, _activity} = add_mute(user, id)
+ {:ok, _activity} = add_mute(user, activity.id)
assert muted?(user, activity)
end
test "remove mute", %{user: user, activity: activity} do
- id = activity.id
-
- add_mute(user, id)
- {:ok, _activity} = remove_mute(user, id)
+ add_mute(user, activity.id)
+ {:ok, _activity} = remove_mute(user, activity.id)
refute muted?(user, activity)
end
+
+ test "check that mutes can't be duplicate", %{user: user, activity: activity} do
+ add_mute(user, activity.id)
+ assert muted?(user, activity)
+ {:error, _} = add_mute(user, activity.id)
+ end
end
end