Introduce group posts

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel
2020-07-09 17:24:28 +02:00
parent bec1c69d4b
commit 9c9f1385fb
249 changed files with 11886 additions and 5023 deletions

View File

@@ -5,9 +5,9 @@ defmodule Mobilizon.ActorsTest do
import Mobilizon.Factory
alias Mobilizon.{Actors, Config, Conversations, Events, Tombstone, Users}
alias Mobilizon.{Actors, Config, Discussions, Events, Tombstone, Users}
alias Mobilizon.Actors.{Actor, Bot, Follower, Member}
alias Mobilizon.Conversations.Comment
alias Mobilizon.Discussions.Comment
alias Mobilizon.Events.Event
alias Mobilizon.Media.File, as: FileModel
alias Mobilizon.Service.Workers
@@ -291,6 +291,56 @@ defmodule Mobilizon.ActorsTest do
assert actor = actor_fetched
end
test "perform delete the actor actually deletes the actor", %{
actor: %Actor{avatar: %{url: avatar_url}, banner: %{url: banner_url}, id: actor_id} = actor
} do
%Event{url: event1_url} = event1 = insert(:event, organizer_actor: actor)
insert(:event, organizer_actor: actor)
%Comment{url: comment1_url} = comment1 = insert(:comment, actor: actor)
insert(:comment, actor: actor)
%URI{path: "/media/" <> avatar_path} = URI.parse(avatar_url)
%URI{path: "/media/" <> banner_path} = URI.parse(banner_url)
assert File.exists?(
Config.get!([Uploader.Local, :uploads]) <>
"/" <> avatar_path
)
assert File.exists?(
Config.get!([Uploader.Local, :uploads]) <>
"/" <> banner_path
)
assert {:ok, %Actor{}} = Actors.perform(:delete_actor, actor)
assert %Actor{
name: nil,
summary: nil,
suspended: true,
avatar: nil,
banner: nil,
user_id: nil
} = Actors.get_actor(actor_id)
assert {:error, :event_not_found} = Events.get_event(event1.id)
assert %Tombstone{} = Tombstone.find_tombstone(event1_url)
assert %Comment{deleted_at: deleted_at} = Discussions.get_comment(comment1.id)
refute is_nil(deleted_at)
assert %Tombstone{} = Tombstone.find_tombstone(comment1_url)
refute File.exists?(
Config.get!([Uploader.Local, :uploads]) <>
"/" <> avatar_path
)
refute File.exists?(
Config.get!([Uploader.Local, :uploads]) <>
"/" <> banner_path
)
end
test "delete_actor/1 deletes the actor", %{
actor: %Actor{avatar: %{url: avatar_url}, banner: %{url: banner_url}, id: actor_id} = actor
} do
@@ -333,7 +383,7 @@ defmodule Mobilizon.ActorsTest do
assert {:error, :event_not_found} = Events.get_event(event1.id)
assert %Tombstone{} = Tombstone.find_tombstone(event1_url)
assert %Comment{deleted_at: deleted_at} = Conversations.get_comment(comment1.id)
assert %Comment{deleted_at: deleted_at} = Discussions.get_comment(comment1.id)
refute is_nil(deleted_at)
assert %Tombstone{} = Tombstone.find_tombstone(comment1_url)

View File

@@ -1,13 +1,11 @@
defmodule Mobilizon.ConversationsTest do
defmodule Mobilizon.DiscussionsTest do
use Mobilizon.DataCase
import Mobilizon.Factory
alias Mobilizon.Actors.Actor
alias Mobilizon.Conversations
alias Mobilizon.Conversations.Comment
alias Mobilizon.Service.Workers
alias Mobilizon.Storage.Page
alias Mobilizon.Discussions
alias Mobilizon.Discussions.Comment
describe "comments" do
@valid_attrs %{text: "some text"}
@@ -16,13 +14,13 @@ defmodule Mobilizon.ConversationsTest do
test "list_comments/0 returns all comments" do
%Comment{id: comment_id} = insert(:comment)
comment_ids = Conversations.list_comments() |> Enum.map(& &1.id)
comment_ids = Discussions.list_comments() |> Enum.map(& &1.id)
assert comment_ids == [comment_id]
end
test "get_comment!/1 returns the comment with given id" do
%Comment{id: comment_id} = insert(:comment)
comment_fetched = Conversations.get_comment!(comment_id)
comment_fetched = Discussions.get_comment!(comment_id)
assert comment_fetched.id == comment_id
end
@@ -30,7 +28,7 @@ defmodule Mobilizon.ConversationsTest do
%Actor{} = actor = insert(:actor)
comment_data = Map.merge(@valid_attrs, %{actor_id: actor.id})
case Conversations.create_comment(comment_data) do
case Discussions.create_comment(comment_data) do
{:ok, %Comment{} = comment} ->
assert comment.text == "some text"
assert comment.actor_id == actor.id
@@ -41,13 +39,13 @@ defmodule Mobilizon.ConversationsTest do
end
test "create_comment/1 with invalid data returns error changeset" do
assert {:error, %Ecto.Changeset{}} = Conversations.create_comment(@invalid_attrs)
assert {:error, %Ecto.Changeset{}} = Discussions.create_comment(@invalid_attrs)
end
test "update_comment/2 with valid data updates the comment" do
%Comment{} = comment = insert(:comment)
case Conversations.update_comment(comment, @update_attrs) do
case Discussions.update_comment(comment, @update_attrs) do
{:ok, %Comment{} = comment} ->
assert comment.text == "some updated text"
@@ -58,15 +56,15 @@ defmodule Mobilizon.ConversationsTest do
test "update_comment/2 with invalid data returns error changeset" do
%Comment{} = comment = insert(:comment)
assert {:error, %Ecto.Changeset{}} = Conversations.update_comment(comment, @invalid_attrs)
%Comment{} = comment_fetched = Conversations.get_comment!(comment.id)
assert {:error, %Ecto.Changeset{}} = Discussions.update_comment(comment, @invalid_attrs)
%Comment{} = comment_fetched = Discussions.get_comment!(comment.id)
assert comment = comment_fetched
end
test "delete_comment/1 deletes the comment" do
%Comment{} = comment = insert(:comment)
assert {:ok, %Comment{}} = Conversations.delete_comment(comment)
refute is_nil(Conversations.get_comment!(comment.id).deleted_at)
assert {:ok, %Comment{}} = Discussions.delete_comment(comment)
refute is_nil(Discussions.get_comment!(comment.id).deleted_at)
end
end
end

View File

@@ -141,7 +141,7 @@ defmodule Mobilizon.EventsTest do
end
test "list_public_events_for_actor/1", %{actor: actor, event: event} do
assert {:ok, [event_found], 1} = Events.list_public_events_for_actor(actor)
assert %Page{elements: [event_found], total: 1} = Events.list_public_events_for_actor(actor)
assert event_found.title == event.title
end
@@ -149,7 +149,7 @@ defmodule Mobilizon.EventsTest do
event1 = insert(:event, organizer_actor: actor)
case Events.list_public_events_for_actor(actor, 1, 10) do
{:ok, events_found, 2} ->
%Page{elements: events_found, total: 2} ->
event_ids = MapSet.new(events_found |> Enum.map(& &1.id))
assert event_ids == MapSet.new([event.id, event1.id])
@@ -162,7 +162,7 @@ defmodule Mobilizon.EventsTest do
event1 = insert(:event, organizer_actor: actor)
case Events.list_public_events_for_actor(actor, 1, 1) do
{:ok, [%Event{id: event_found_id}], 2} ->
%Page{elements: [%Event{id: event_found_id}], total: 2} ->
assert event_found_id in [event.id, event1.id]
err ->

View File

@@ -0,0 +1,82 @@
defmodule Mobilizon.PostsTest do
use Mobilizon.DataCase
import Mobilizon.Factory
alias Mobilizon.Actors.Actor
alias Mobilizon.Posts
alias Mobilizon.Posts.Post
describe "posts" do
@valid_attrs %{body: "some text", title: "some title"}
@update_attrs %{body: "some updated text", title: "some updated title"}
@invalid_attrs %{body: nil}
test "list_posts/0 returns all posts" do
group = insert(:group)
%Post{id: post_id} = insert(:post, attributed_to: group)
post_ids = Posts.get_posts_for_group(group).elements |> Enum.map(& &1.id)
assert post_ids == [post_id]
end
test "get_post!/1 returns the post with given id" do
%Post{id: post_id} = insert(:post)
post_fetched = Posts.get_post(post_id)
assert post_fetched.id == post_id
end
test "create_post/1 with valid data creates a post" do
%Actor{} = actor = insert(:actor)
%Actor{} = group = insert(:group)
post_data = Map.merge(@valid_attrs, %{author_id: actor.id, attributed_to_id: group.id})
case Posts.create_post(post_data) do
{:ok, %Post{} = post} ->
assert post.body == "some text"
assert post.author_id == actor.id
assert post.title == "some title"
assert post.slug == "some-title-" <> ShortUUID.encode!(post.id)
err ->
flunk("Failed to create a post #{inspect(err)}")
end
end
test "create_post/1 with invalid data returns error changeset" do
assert {:error, %Ecto.Changeset{}} = Posts.create_post(@invalid_attrs)
end
test "update_post/2 with valid data updates the post" do
%Actor{} = actor = insert(:actor)
%Actor{} = group = insert(:group)
post_data = Map.merge(@valid_attrs, %{author_id: actor.id, attributed_to_id: group.id})
{:ok, %Post{} = post} = Posts.create_post(post_data)
case Posts.update_post(post, @update_attrs) do
{:ok, %Post{} = updated_post} ->
assert updated_post.body == @update_attrs.body
assert updated_post.title == @update_attrs.title
# Slug and URL don't change
assert updated_post.slug == post.slug
assert updated_post.url == post.url
err ->
flunk("Failed to update a post #{inspect(err)}")
end
end
test "update_post/2 with invalid data returns error changeset" do
%Post{} = post = insert(:post)
assert {:error, %Ecto.Changeset{}} = Posts.update_post(post, @invalid_attrs)
%Post{} = post_fetched = Posts.get_post(post.id)
assert post = post_fetched
end
test "delete_post/1 deletes the post" do
%Post{} = post = insert(:post)
assert {:ok, %Post{}} = Posts.delete_post(post)
assert is_nil(Posts.get_post(post.id))
end
end
end