discourse/plugins/chat/spec/lib/chat_sdk/thread_spec.rb
Jarek Radosz b3423c40b0
DEV: Fix random typos (#30023)
(late) Nov 2024 edition
2024-12-02 07:34:05 +08:00

138 lines
3.7 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# frozen_string_literal: true
describe ChatSDK::Thread do
describe ".update_title" do
fab!(:thread_1) { Fabricate(:chat_thread) }
let(:params) do
{ title: "New Title", thread_id: thread_1.id, guardian: Discourse.system_user.guardian }
end
it "changes the title" do
expect { described_class.update_title(**params) }.to change { thread_1.reload.title }.from(
thread_1.title,
).to(params[:title])
end
context "when missing param" do
it "fails" do
params.delete(:thread_id)
expect { described_class.update_title(**params) }.to raise_error(
"missing keyword: :thread_id",
)
end
end
context "when guardian can't see the channel" do
fab!(:thread_1) { Fabricate(:chat_thread, channel: Fabricate(:private_category_channel)) }
it "fails" do
params[:guardian] = Fabricate(:user).guardian
expect { described_class.update_title(**params) }.to raise_error(
"Guardian can't view channel",
)
end
end
context "when guardian can't edit the thread" do
it "fails" do
params[:guardian] = Fabricate(:user).guardian
expect { described_class.update_title(**params) }.to raise_error(
"Guardian can't edit thread",
)
end
end
context "when the threading is not enabled" do
before { thread_1.channel.update!(threading_enabled: false) }
it "fails" do
expect { described_class.update_title(**params) }.to raise_error(
"Threading is not enabled for this channel",
)
end
end
context "when the thread doesn't exist" do
it "fails" do
params[:thread_id] = -999
expect { described_class.update_title(**params) }.to raise_error(
"Couldnt find thread with id: `-999`",
)
end
end
end
describe ".first_messages" do
fab!(:thread_1) { Fabricate(:chat_thread) }
fab!(:messages) do
Fabricate.times(5, :chat_message, thread: thread_1, chat_channel: thread_1.channel)
end
let(:params) { { thread_id: thread_1.id, guardian: Discourse.system_user.guardian } }
it "returns messages" do
expect(described_class.first_messages(**params)).to eq([thread_1.original_message, *messages])
end
end
describe ".last_messages" do
fab!(:thread_1) { Fabricate(:chat_thread) }
fab!(:messages) do
Fabricate.times(
5,
:chat_message,
thread: thread_1,
chat_channel: thread_1.channel,
use_service: true,
)
end
let(:params) do
{ thread_id: thread_1.id, guardian: Discourse.system_user.guardian, page_size: 5 }
end
it "returns messages" do
expect(described_class.last_messages(**params)).to eq([*messages])
end
end
describe ".messages" do
fab!(:thread_1) { Fabricate(:chat_thread) }
fab!(:messages) do
Fabricate.times(
5,
:chat_message,
thread: thread_1,
chat_channel: thread_1.channel,
use_service: true,
)
end
let(:params) { { thread_id: thread_1.id, guardian: Discourse.system_user.guardian } }
it "returns messages" do
expect(described_class.messages(**params)).to eq([thread_1.original_message, *messages])
end
describe "page_size:" do
before { params[:page_size] = 2 }
it "limits returned messages" do
expect(described_class.messages(**params)).to eq([thread_1.original_message, messages[0]])
end
end
context "when target_message doesnt exist" do
it "fails" do
expect { described_class.messages(**params, target_message_id: -999) }.to raise_error(
"Target message doesn't exist",
)
end
end
end
end