feat: Add Public APIs for API Channel (#2375)
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe 'Public Inbox Contacts API', type: :request do
|
||||
let!(:api_channel) { create(:channel_api) }
|
||||
let!(:contact) { create(:contact) }
|
||||
let!(:contact_inbox) { create(:contact_inbox, contact: contact, inbox: api_channel.inbox) }
|
||||
|
||||
describe 'POST /public/api/v1/inboxes/{identifier}/contact' do
|
||||
it 'creates a contact and return the source id' do
|
||||
post "/public/api/v1/inboxes/#{api_channel.identifier}/contacts"
|
||||
|
||||
expect(response).to have_http_status(:success)
|
||||
data = JSON.parse(response.body)
|
||||
expect(data['source_id']).not_to eq nil
|
||||
expect(data['pubsub_token']).not_to eq nil
|
||||
end
|
||||
end
|
||||
|
||||
describe 'GET /public/api/v1/inboxes/{identifier}/contact/{source_id}' do
|
||||
it 'gets a contact when present' do
|
||||
get "/public/api/v1/inboxes/#{api_channel.identifier}/contacts/#{contact_inbox.source_id}"
|
||||
|
||||
expect(response).to have_http_status(:success)
|
||||
data = JSON.parse(response.body)
|
||||
expect(data['source_id']).to eq contact_inbox.source_id
|
||||
expect(data['pubsub_token']).to eq contact.pubsub_token
|
||||
end
|
||||
end
|
||||
|
||||
describe 'PATCH /public/api/v1/inboxes/{identifier}/contact/{source_id}' do
|
||||
it 'updates a contact when present' do
|
||||
patch "/public/api/v1/inboxes/#{api_channel.identifier}/contacts/#{contact_inbox.source_id}",
|
||||
params: { name: 'John Smith' }
|
||||
|
||||
expect(response).to have_http_status(:success)
|
||||
data = JSON.parse(response.body)
|
||||
expect(data['name']).to eq 'John Smith'
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,28 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe 'Public Inbox Contact Conversations API', type: :request do
|
||||
let!(:api_channel) { create(:channel_api) }
|
||||
let!(:contact) { create(:contact) }
|
||||
let!(:contact_inbox) { create(:contact_inbox, contact: contact, inbox: api_channel.inbox) }
|
||||
|
||||
describe 'GET /public/api/v1/inboxes/{identifier}/contact/{source_id}/conversations' do
|
||||
it 'return the conversations for that contact' do
|
||||
create(:conversation, contact_inbox: contact_inbox)
|
||||
get "/public/api/v1/inboxes/#{api_channel.identifier}/contacts/#{contact_inbox.source_id}/conversations"
|
||||
|
||||
expect(response).to have_http_status(:success)
|
||||
data = JSON.parse(response.body)
|
||||
expect(data.length).to eq 1
|
||||
end
|
||||
end
|
||||
|
||||
describe 'POST /public/api/v1/inboxes/{identifier}/contact/{source_id}/conversations' do
|
||||
it 'creates a conversation for that contact' do
|
||||
post "/public/api/v1/inboxes/#{api_channel.identifier}/contacts/#{contact_inbox.source_id}/conversations"
|
||||
|
||||
expect(response).to have_http_status(:success)
|
||||
data = JSON.parse(response.body)
|
||||
expect(data['id']).not_to eq nil
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,57 @@
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe 'Public Inbox Contact Conversation Messages API', type: :request do
|
||||
let!(:api_channel) { create(:channel_api) }
|
||||
let!(:contact) { create(:contact) }
|
||||
let!(:contact_inbox) { create(:contact_inbox, contact: contact, inbox: api_channel.inbox) }
|
||||
let!(:conversation) { create(:conversation, contact: contact, contact_inbox: contact_inbox) }
|
||||
|
||||
describe 'GET /public/api/v1/inboxes/{identifier}/contact/{source_id}/conversations/{conversation_id}/messages' do
|
||||
it 'return the messages for that conversation' do
|
||||
2.times.each { create(:message, account: conversation.account, inbox: conversation.inbox, conversation: conversation) }
|
||||
|
||||
get "/public/api/v1/inboxes/#{api_channel.identifier}/contacts/#{contact_inbox.source_id}/conversations/#{conversation.display_id}/messages"
|
||||
|
||||
expect(response).to have_http_status(:success)
|
||||
data = JSON.parse(response.body)
|
||||
expect(data.length).to eq 2
|
||||
end
|
||||
end
|
||||
|
||||
describe 'POST /public/api/v1/inboxes/{identifier}/contact/{source_id}/conversations/{conversation_id}/messages' do
|
||||
it 'creates a message in the conversation' do
|
||||
post "/public/api/v1/inboxes/#{api_channel.identifier}/contacts/#{contact_inbox.source_id}/conversations/#{conversation.display_id}/messages",
|
||||
params: { content: 'hello' }
|
||||
|
||||
expect(response).to have_http_status(:success)
|
||||
data = JSON.parse(response.body)
|
||||
expect(data['content']).to eq('hello')
|
||||
end
|
||||
|
||||
it 'creates attachment message in conversation' do
|
||||
file = fixture_file_upload(Rails.root.join('spec/assets/avatar.png'), 'image/png')
|
||||
post "/public/api/v1/inboxes/#{api_channel.identifier}/contacts/#{contact_inbox.source_id}/conversations/#{conversation.display_id}/messages",
|
||||
params: { content: 'hello', attachments: [file] }
|
||||
|
||||
expect(response).to have_http_status(:success)
|
||||
data = JSON.parse(response.body)
|
||||
expect(data['content']).to eq('hello')
|
||||
|
||||
expect(conversation.messages.last.attachments.first.file.present?).to eq(true)
|
||||
expect(conversation.messages.last.attachments.first.file_type).to eq('image')
|
||||
end
|
||||
end
|
||||
|
||||
describe 'PATCH /public/api/v1/inboxes/{identifier}/contact/{source_id}/conversations/{conversation_id}/messages/{id}' do
|
||||
it 'creates a message in the conversation' do
|
||||
message = create(:message, account: conversation.account, inbox: conversation.inbox, conversation: conversation)
|
||||
patch "/public/api/v1/inboxes/#{api_channel.identifier}/contacts/#{contact_inbox.source_id}/conversations/" \
|
||||
"#{conversation.display_id}/messages/#{message.id}",
|
||||
params: { submitted_values: [{ title: 'test' }] }
|
||||
|
||||
expect(response).to have_http_status(:success)
|
||||
data = JSON.parse(response.body)
|
||||
expect(data['content_attributes']['submitted_values'].first['title']).to eq 'test'
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user