mirror of
https://github.com/lingble/chatwoot.git
synced 2025-11-04 21:18:02 +00:00
63 lines
2.5 KiB
Ruby
63 lines
2.5 KiB
Ruby
require 'rails_helper'
|
|
|
|
RSpec.describe CopilotThread, type: :model do
|
|
describe 'associations' do
|
|
it { is_expected.to belong_to(:user) }
|
|
it { is_expected.to belong_to(:account) }
|
|
it { is_expected.to belong_to(:assistant).class_name('Captain::Assistant') }
|
|
it { is_expected.to have_many(:copilot_messages).dependent(:destroy_async) }
|
|
end
|
|
|
|
describe 'validations' do
|
|
it { is_expected.to validate_presence_of(:title) }
|
|
end
|
|
|
|
describe '#push_event_data' do
|
|
let(:account) { create(:account) }
|
|
let(:user) { create(:user, account: account) }
|
|
let(:assistant) { create(:captain_assistant, account: account) }
|
|
let(:copilot_thread) { create(:captain_copilot_thread, account: account, user: user, assistant: assistant, title: 'Test Thread') }
|
|
|
|
it 'returns the correct event data' do
|
|
event_data = copilot_thread.push_event_data
|
|
|
|
expect(event_data[:id]).to eq(copilot_thread.id)
|
|
expect(event_data[:title]).to eq('Test Thread')
|
|
expect(event_data[:created_at]).to eq(copilot_thread.created_at.to_i)
|
|
expect(event_data[:user]).to eq(user.push_event_data)
|
|
expect(event_data[:account_id]).to eq(account.id)
|
|
end
|
|
end
|
|
|
|
describe '#previous_history' do
|
|
let(:account) { create(:account) }
|
|
let(:user) { create(:user, account: account) }
|
|
let(:assistant) { create(:captain_assistant, account: account) }
|
|
let(:copilot_thread) { create(:captain_copilot_thread, account: account, user: user, assistant: assistant) }
|
|
|
|
context 'when there are messages in the thread' do
|
|
before do
|
|
create(:captain_copilot_message, copilot_thread: copilot_thread, message_type: 'user', message: { 'content' => 'User message' })
|
|
create(:captain_copilot_message, copilot_thread: copilot_thread, message_type: 'assistant_thinking', message: { 'content' => 'Thinking...' })
|
|
create(:captain_copilot_message, copilot_thread: copilot_thread, message_type: 'assistant', message: { 'content' => 'Assistant message' })
|
|
end
|
|
|
|
it 'returns only user and assistant messages in chronological order' do
|
|
history = copilot_thread.previous_history
|
|
|
|
expect(history.length).to eq(2)
|
|
expect(history[0][:role]).to eq('user')
|
|
expect(history[0][:content]).to eq('User message')
|
|
expect(history[1][:role]).to eq('assistant')
|
|
expect(history[1][:content]).to eq('Assistant message')
|
|
end
|
|
end
|
|
|
|
context 'when there are no messages in the thread' do
|
|
it 'returns an empty array' do
|
|
expect(copilot_thread.previous_history).to eq([])
|
|
end
|
|
end
|
|
end
|
|
end
|