diff --git a/app/assets/javascripts/discourse/app/templates/modal/request-group-membership-form.hbs b/app/assets/javascripts/discourse/app/templates/modal/request-group-membership-form.hbs index dbd26377b8f..3d171b6f678 100644 --- a/app/assets/javascripts/discourse/app/templates/modal/request-group-membership-form.hbs +++ b/app/assets/javascripts/discourse/app/templates/modal/request-group-membership-form.hbs @@ -5,7 +5,7 @@ {{i18n "groups.membership_request.reason"}} - + diff --git a/app/models/group_request.rb b/app/models/group_request.rb index 706fcceab97..c923622aac3 100644 --- a/app/models/group_request.rb +++ b/app/models/group_request.rb @@ -1,8 +1,12 @@ # frozen_string_literal: true class GroupRequest < ActiveRecord::Base + REASON_CHARACTER_LIMIT = 280 + belongs_to :group belongs_to :user + + validates :reason, length: { maximum: REASON_CHARACTER_LIMIT } end # == Schema Information diff --git a/spec/models/group_request_spec.rb b/spec/models/group_request_spec.rb new file mode 100644 index 00000000000..3dd9a660a31 --- /dev/null +++ b/spec/models/group_request_spec.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +RSpec.describe GroupRequest do + it { is_expected.to belong_to :user } + it { is_expected.to belong_to :group } + + it do + is_expected.to validate_length_of(:reason).is_at_most(described_class::REASON_CHARACTER_LIMIT) + end +end diff --git a/spec/requests/groups_controller_spec.rb b/spec/requests/groups_controller_spec.rb index 6b432c1b2a7..87c7ad0628e 100644 --- a/spec/requests/groups_controller_spec.rb +++ b/spec/requests/groups_controller_spec.rb @@ -2198,6 +2198,20 @@ RSpec.describe GroupsController do expect(response.status).to eq(409) end + it "limits the character count of the reason" do + sign_in(user) + + post "/groups/#{group.name}/request_membership.json", + params: { + reason: "x" * (GroupRequest::REASON_CHARACTER_LIMIT + 1), + } + + expect(response.status).to eq(422) + expect(response.parsed_body["errors"]).to contain_exactly( + "Reason is too long (maximum is 280 characters)", + ) + end + it "should create the right PM" do owner1 = Fabricate(:user, last_seen_at: Time.zone.now) owner2 = Fabricate(:user, last_seen_at: Time.zone.now - 1.day)