defmodule Mobilizon.GraphQL.Resolvers.ConversationTest do use Mobilizon.Web.ConnCase alias Mobilizon.Actors alias Mobilizon.Actors.Actor alias Mobilizon.GraphQL.AbsintheHelpers import Mobilizon.Factory setup %{conn: conn} do user = insert(:user) actor = insert(:actor, user: user, preferred_username: "test") {:ok, conn: conn, user: user, actor: actor} end @event_conversations_query """ query Event($uuid: UUID!) { event(uuid: $uuid) { id uuid conversations { total elements { id lastComment { id text } comments { total elements { id text } } actor { id preferredUsername } } } } } """ describe "Find conversations for event" do test "for a given event", %{conn: conn, user: user, actor: actor} do event = insert(:event, organizer_actor: actor) conversation = insert(:conversation, event: event) another_comment = build(:comment, origin_comment: conversation.origin_comment) conversation_participant = insert(:conversation_participant, actor: actor, conversation: conversation) res = conn |> auth_conn(user) |> AbsintheHelpers.graphql_query( query: @event_conversations_query, variables: %{uuid: conversation.event.uuid} ) assert res["errors"] == nil assert res["data"]["event"]["uuid"] == to_string(conversation.event.uuid) assert res["data"]["event"]["conversations"]["total"] == 1 conversation_data = hd(res["data"]["event"]["conversations"]["elements"]) assert conversation_data["id"] == to_string(conversation.id) assert conversation_data["lastComment"]["text"] == conversation.last_comment.text assert conversation_data["comments"]["total"] == 2 assert conversation_data["comments"]["elements"] |> Enum.any?(fn comment -> comment.text == conversation.origin_comment.text end) assert conversation_data["actor"]["preferredUsername"] == conversation_participant.actor.preferred_username end end end