Skip to content

Commit

Permalink
UX: Group membership PMs thread
Browse files Browse the repository at this point in the history
  • Loading branch information
brrusselburg committed May 10, 2024
1 parent 3e7601c commit a4df064
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 8 deletions.
13 changes: 11 additions & 2 deletions app/controllers/groups_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -457,6 +457,14 @@ def handle_membership_request
user = User.find_by(id: params[:user_id])
raise Discourse::InvalidParameters.new(:user_id) if user.blank?

# find original membership request PM
request_topic =
Topic.find_by(
title: I18n.t("groups.request_membership_pm.title", group_name: group.name),
archetype: "private_message",
user_id: user.id,
)

ActiveRecord::Base.transaction do
if params[:accept]
group.add(user)
Expand All @@ -469,9 +477,10 @@ def handle_membership_request
if params[:accept]
PostCreator.new(
current_user,
title: I18n.t("groups.request_accepted_pm.title", group_name: group.name),
post_type: Post.types[:regular],
topic_id: request_topic.id,
raw: I18n.t("groups.request_accepted_pm.body", group_name: group.name),
archetype: Archetype.private_message,
reply_to_post_number: 1,
target_usernames: user.username,
skip_validations: true,
).create!
Expand Down
1 change: 0 additions & 1 deletion config/locales/server.en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -638,7 +638,6 @@ en:
request_membership_pm:
title: "Membership Request for @%{group_name}"
request_accepted_pm:
title: "You've been accepted into @%{group_name}"
body: |
Your request to enter @%{group_name} has been accepted and you are now a member.
Expand Down
28 changes: 23 additions & 5 deletions spec/requests/groups_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2165,20 +2165,38 @@ def expect_type_to_return_right_groups(type, expected_group_ids)
sign_in(user)
end

it "sends a private message when accepted" do
it "sends a reply to the request membership topic when accepted" do
GroupRequest.create!(group: group, user: other_user)

# send the initial request PM
PostCreator.new(
other_user,
title: I18n.t("groups.request_membership_pm.title", group_name: group.name),
raw: "*British accent* Please, sir, may I have some group?",
archetype: Archetype.private_message,
target_usernames: "#{user.username}",
skip_validations: true,
).create!

topic = Topic.last

expect {
put "/groups/#{group.id}/handle_membership_request.json",
params: {
user_id: other_user.id,
accept: true,
}
}.to change { Topic.count }.by(1).and change { Post.count }.by(1)
}.to_not change { Topic.count }

topic = Topic.last
expect(topic.archetype).to eq(Archetype.private_message)
expect(topic.title).to eq(I18n.t("groups.request_accepted_pm.title", group_name: group.name))
expect(topic.first_post.raw).to eq(
expect(Topic.first.title).to eq(
I18n.t("groups.request_membership_pm.title", group_name: group.name),
)

post = Post.last
expect(post.topic_id).to eq(Topic.last.id)
expect(topic.posts.count).to eq(2)
expect(post.raw).to eq(
I18n.t("groups.request_accepted_pm.body", group_name: group.name).strip,
)
end
Expand Down

0 comments on commit a4df064

Please sign in to comment.