discourse/plugins/chat/spec/services/update_channel_status_spec.rb

55 lines
1.4 KiB
Ruby

# frozen_string_literal: true
RSpec.describe(Chat::Service::UpdateChannelStatus) do
subject(:result) do
described_class.call(guardian: guardian, channel_id: channel.id, status: status)
end
fab!(:channel) { Fabricate(:chat_channel) }
fab!(:current_user) { Fabricate(:admin) }
let(:guardian) { Guardian.new(current_user) }
let(:status) { "open" }
context "when no channel_id is given" do
subject(:result) { described_class.call(guardian: guardian, status: status) }
it { is_expected.to fail_to_find_a_model(:channel) }
end
context "when user is not allowed to change channel status" do
fab!(:current_user) { Fabricate(:user) }
it { is_expected.to fail_a_policy(:check_channel_permission) }
end
context "when status is not allowed" do
(ChatChannel.statuses.keys - ChatChannel.editable_statuses.keys).each do |na_status|
context "when status is '#{na_status}'" do
let(:status) { na_status }
it { is_expected.to fail_a_contract }
end
end
end
context "when new status is the same than the existing one" do
let(:status) { channel.status }
it { is_expected.to fail_a_policy(:check_channel_permission) }
end
context "when status is allowed" do
let(:status) { "closed" }
it "sets the service result as successful" do
expect(result).to be_a_success
end
it "changes the status" do
result
expect(channel.reload).to be_closed
end
end
end