discourse/spec/lib/post_locker_spec.rb
Daniel Waterworth 6e161d3e75
DEV: Allow fab! without block (#24314)
The most common thing that we do with fab! is:

    fab!(:thing) { Fabricate(:thing) }

This commit adds a shorthand for this which is just simply:

    fab!(:thing)

i.e. If you omit the block, then, by default, you'll get a `Fabricate`d object using the fabricator of the same name.
2023-11-09 16:47:59 -06:00

48 lines
1.3 KiB
Ruby

# frozen_string_literal: true
RSpec.describe PostLocker do
fab!(:moderator)
fab!(:post)
it "doesn't allow regular users to lock posts" do
expect { PostLocker.new(post, post.user).lock }.to raise_error(Discourse::InvalidAccess)
expect(post).not_to be_locked
expect(post.locked_by_id).to be_blank
end
it "doesn't allow regular users to unlock posts" do
PostLocker.new(post, moderator).lock
expect { PostLocker.new(post, post.user).lock }.to raise_error(Discourse::InvalidAccess)
expect(post).to be_locked
expect(post.locked_by_id).to eq(moderator.id)
end
it "allows staff to lock and unlock posts" do
expect(post).not_to be_locked
expect(post.locked_by_id).to be_blank
PostLocker.new(post, moderator).lock
expect(post).to be_locked
expect(post.locked_by_id).to eq(moderator.id)
expect(
UserHistory.where(
acting_user_id: moderator.id,
action: UserHistory.actions[:post_locked],
).exists?,
).to eq(true)
PostLocker.new(post, moderator).unlock
expect(post).not_to be_locked
expect(post.locked_by_id).to be_blank
expect(
UserHistory.where(
acting_user_id: moderator.id,
action: UserHistory.actions[:post_unlocked],
).exists?,
).to eq(true)
end
end