# frozen_string_literal: true

describe "Group Card", type: :system do
  fab!(:current_user) { Fabricate(:user) }
  fab!(:members) { Fabricate.times(12, :user) }
  fab!(:topic)
  fab!(:group) { Fabricate(:public_group, users: members) }
  let(:mention) { "@#{group.name}" }
  let(:post_with_mention) do
    PostCreator.create!(current_user, topic_id: topic.id, raw: "Hello #{mention}")
  end
  let(:topic_page) { PageObjects::Pages::Topic.new }
  let(:group_card) { PageObjects::Components::GroupCard.new }

  before do
    Jobs.run_immediately!
    sign_in(current_user)
  end

  context "when joining/leaving a group" do
    it "shows only highlighted members" do
      topic_page.visit_topic(topic, post_number: post_with_mention.post_number)
      topic_page.click_mention(post_with_mention, mention)

      expect(group_card).to have_highlighted_member_count_of(
        PageObjects::Components::GroupCard::MAX_MEMBER_HIGHLIGHT_COUNT,
      )

      group_card.click_join_button

      expect(group_card).to have_leave_button

      group.reload

      expect(group.users).to include(current_user)
      expect(group_card).to have_highlighted_member_count_of(
        PageObjects::Components::GroupCard::MAX_MEMBER_HIGHLIGHT_COUNT,
      )

      group_card.click_leave_button

      expect(group_card).to have_join_button

      group.reload

      expect(group.users).not_to include(current_user)
      expect(group_card).to have_highlighted_member_count_of(
        PageObjects::Components::GroupCard::MAX_MEMBER_HIGHLIGHT_COUNT,
      )
    end
  end
end