diff --git a/app/assets/javascripts/discourse/app/components/group-card-contents.hbs b/app/assets/javascripts/discourse/app/components/group-card-contents.hbs index 5a88c81c591..83a3eae0eb2 100644 --- a/app/assets/javascripts/discourse/app/components/group-card-contents.hbs +++ b/app/assets/javascripts/discourse/app/components/group-card-contents.hbs @@ -75,7 +75,7 @@ {{#if this.group.members}} <div class="card-row third-row"> <div class="members metadata"> - {{#each this.group.members as |user|}} + {{#each this.highlightedMembers as |user|}} <a {{on "click" this.close}} href={{user.path}} diff --git a/app/assets/javascripts/discourse/app/components/group-card-contents.js b/app/assets/javascripts/discourse/app/components/group-card-contents.js index 547840d197c..bdadccc22c0 100644 --- a/app/assets/javascripts/discourse/app/components/group-card-contents.js +++ b/app/assets/javascripts/discourse/app/components/group-card-contents.js @@ -30,9 +30,15 @@ export default Component.extend(CardContentsBase, CleansUp, { group: null, - @discourseComputed("group.user_count", "group.members.length") - moreMembersCount: (memberCount, maxMemberDisplay) => - memberCount - maxMemberDisplay, + @discourseComputed("group.members.[]") + highlightedMembers(members) { + return members.slice(0, maxMembersToDisplay); + }, + + @discourseComputed("group.user_count", "group.members.[]") + moreMembersCount(memberCount) { + return Math.max(memberCount - maxMembersToDisplay, 0); + }, @discourseComputed("group.name") groupClass: (name) => (name ? `group-card-${name}` : ""), diff --git a/spec/system/group_card_spec.rb b/spec/system/group_card_spec.rb new file mode 100644 index 00000000000..497b55b6003 --- /dev/null +++ b/spec/system/group_card_spec.rb @@ -0,0 +1,52 @@ +# frozen_string_literal: true + +describe "Group Card", type: :system do + fab!(:current_user) { Fabricate(:user) } + fab!(:members) { Fabricate.times(12, :user) } + fab!(:topic) { Fabricate(: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 diff --git a/spec/system/page_objects/components/group-card.rb b/spec/system/page_objects/components/group-card.rb new file mode 100644 index 00000000000..ffba614ea54 --- /dev/null +++ b/spec/system/page_objects/components/group-card.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +module PageObjects + module Components + class GroupCard < PageObjects::Components::Base + MAX_MEMBER_HIGHLIGHT_COUNT = 10 + JOIN_BUTTON_SELECTOR = ".group-details-button .group-index-join" + LEAVE_BUTTON_SELECTOR = ".group-details-button .group-index-leave" + + def click_join_button + find(JOIN_BUTTON_SELECTOR).click + end + + def click_leave_button + find(LEAVE_BUTTON_SELECTOR).click + end + + def has_highlighted_member_count_of?(expected_count) + all(".card-content .members.metadata a.card-tiny-avatar", count: expected_count) + end + + def has_join_button? + has_css?(JOIN_BUTTON_SELECTOR) + end + + def has_leave_button? + has_css?(LEAVE_BUTTON_SELECTOR) + end + end + end +end diff --git a/spec/system/page_objects/pages/topic.rb b/spec/system/page_objects/pages/topic.rb index b791f537922..8105849e027 100644 --- a/spec/system/page_objects/pages/topic.rb +++ b/spec/system/page_objects/pages/topic.rb @@ -146,6 +146,12 @@ module PageObjects @fast_edit_component.fast_edit_input end + def click_mention(post, mention) + within post_by_number(post) do + find("a.mention-group", text: mention).click + end + end + private def topic_footer_button_id(button)