FIX: Limit user status to 100 characters (#20040)
* FIX: Limit user status to 100 characters * FIX: Make sure the emoji is valid
This commit is contained in:
parent
8fc11215e1
commit
b6f75e231c
|
@ -1,8 +1,12 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class UserStatus < ActiveRecord::Base
|
class UserStatus < ActiveRecord::Base
|
||||||
|
MAX_DESCRIPTION_LENGTH = 100
|
||||||
|
|
||||||
belongs_to :user
|
belongs_to :user
|
||||||
|
|
||||||
|
validate :emoji_exists
|
||||||
|
validates :description, length: { maximum: MAX_DESCRIPTION_LENGTH }
|
||||||
validate :ends_at_greater_than_set_at,
|
validate :ends_at_greater_than_set_at,
|
||||||
if: Proc.new { |t| t.will_save_change_to_set_at? || t.will_save_change_to_ends_at? }
|
if: Proc.new { |t| t.will_save_change_to_set_at? || t.will_save_change_to_ends_at? }
|
||||||
|
|
||||||
|
@ -10,6 +14,10 @@ class UserStatus < ActiveRecord::Base
|
||||||
ends_at && ends_at < Time.zone.now
|
ends_at && ends_at < Time.zone.now
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def emoji_exists
|
||||||
|
emoji && Emoji.exists?(emoji)
|
||||||
|
end
|
||||||
|
|
||||||
def ends_at_greater_than_set_at
|
def ends_at_greater_than_set_at
|
||||||
if ends_at && set_at > ends_at
|
if ends_at && set_at > ends_at
|
||||||
errors.add(:ends_at, I18n.t("user_status.errors.ends_at_should_be_greater_than_set_at"))
|
errors.add(:ends_at, I18n.t("user_status.errors.ends_at_should_be_greater_than_set_at"))
|
||||||
|
|
|
@ -75,6 +75,27 @@ RSpec.describe UserStatusController do
|
||||||
expect(response.status).to eq(400)
|
expect(response.status).to eq(400)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "validates emoji" do
|
||||||
|
put "/user-status.json", params: { description: "invalid_emoji_name" }
|
||||||
|
expect(response.status).to eq(400)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "limits description’s length" do
|
||||||
|
put "/user-status.json",
|
||||||
|
params: {
|
||||||
|
emoji: "tooth",
|
||||||
|
description: "x" * UserStatus::MAX_DESCRIPTION_LENGTH,
|
||||||
|
}
|
||||||
|
expect(response.status).to eq(200)
|
||||||
|
|
||||||
|
put "/user-status.json",
|
||||||
|
params: {
|
||||||
|
emoji: "tooth",
|
||||||
|
description: "x" * (UserStatus::MAX_DESCRIPTION_LENGTH + 1),
|
||||||
|
}
|
||||||
|
expect(response.status).to eq(422)
|
||||||
|
end
|
||||||
|
|
||||||
it "sets user status" do
|
it "sets user status" do
|
||||||
status = "off to dentist"
|
status = "off to dentist"
|
||||||
status_emoji = "tooth"
|
status_emoji = "tooth"
|
||||||
|
|
Loading…
Reference in New Issue