diff --git a/app/controllers/api/v1/widget/inbox_members_controller.rb b/app/controllers/api/v1/widget/inbox_members_controller.rb new file mode 100644 index 000000000..d978a9b6e --- /dev/null +++ b/app/controllers/api/v1/widget/inbox_members_controller.rb @@ -0,0 +1,13 @@ +class Api::V1::Widget::InboxMembersController < Api::V1::Widget::BaseController + before_action :set_web_widget + + def index + @inbox_members = @web_widget.inbox.inbox_members.includes(:user) + end + + private + + def permitted_params + params.permit(:website_token) + end +end diff --git a/app/views/api/v1/widget/inbox_members/index.json.jbuilder b/app/views/api/v1/widget/inbox_members/index.json.jbuilder new file mode 100644 index 000000000..0cff79c74 --- /dev/null +++ b/app/views/api/v1/widget/inbox_members/index.json.jbuilder @@ -0,0 +1,6 @@ +json.payload do + json.array! @inbox_members do |inbox_member| + json.name inbox_member.user.name + json.avatar_url inbox_member.user.avatar_url + end +end diff --git a/config/routes.rb b/config/routes.rb index 5ce7681a6..c2655283a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -27,6 +27,7 @@ Rails.application.routes.draw do namespace :widget do resources :messages, only: [:index, :create, :update] resources :inboxes, only: [:create, :update] + resources :inbox_members, only: [:index] end namespace :actions do diff --git a/spec/controllers/api/v1/widget/inbox_members_controller_spec.rb b/spec/controllers/api/v1/widget/inbox_members_controller_spec.rb new file mode 100644 index 000000000..72b1315b8 --- /dev/null +++ b/spec/controllers/api/v1/widget/inbox_members_controller_spec.rb @@ -0,0 +1,34 @@ +require 'rails_helper' + +RSpec.describe '/api/v1/widget/inbox_members', type: :request do + let(:account) { create(:account) } + let(:web_widget) { create(:channel_widget, account: account) } + let(:agent_1) { create(:user, account: account) } + let(:agent_2) { create(:user, account: account) } + + before do + create(:inbox_member, user: agent_1, inbox: web_widget.inbox) + create(:inbox_member, user: agent_2, inbox: web_widget.inbox) + end + + describe 'POST /api/v1/widget/inbox_members' do + let(:params) { { website_token: web_widget.website_token } } + + context 'with correct website token' do + it 'returns the list of agents' do + get '/api/v1/widget/inbox_members', params: params + + expect(response).to have_http_status(:success) + json_response = JSON.parse(response.body) + expect(json_response['payload'].length).to eq 2 + end + end + + context 'with invalid website token' do + it 'returns the list of agents' do + get '/api/v1/widget/inbox_members', params: { website_token: '' } + expect(response).to have_http_status(:not_found) + end + end + end +end