require 'rails_helper'

RSpec.describe Zoom::Actions::User do
  let(:wrapper) { Zoom.new }

  describe '.update_user_settings' do
    it 'raises exception if id param is missing' do
      params = {
        in_meeting: {
          not_allowed_param: 1
        }
      }

      expect do
        wrapper.user_settings_update(params)
      end.to raise_exception(Zoom::ParameterMissing)
    end

    it 'raises exception if not allowed param is present' do
      params = {
        id: 'dw3-3sd33',
        in_meeting: {
          not_allowed_param: 1
        }
      }

      expect do
        wrapper.user_settings_update(params)
      end.to raise_exception(Zoom::ParameterNotPermitted)
    end

    it 'sends PATCH request to the Zoom API endpoint' do
      params = {
        id: 'zoom-120-id',
        in_meeting: {
          auto_saving_chat: true,
          co_host: true,
          non_verbal_feedback: true,
          breakout_room: true,
          group_hd: true,
          far_end_camera_control: true,
          allow_live_streaming: true
        }
      }

      allow(Zoom::Utils).to receive(:parse_response).and_return 'Success!'

      path = "/users/#{params[:id]}/settings"
      body_params = { body: params.except(:id).to_json }
      allow(wrapper.class)
        .to receive(:patch)
        .with(path, hash_including(body_params))
        .and_return({})

      mock_response = wrapper.user_settings_update params
      expect(mock_response).to eq 'Success!'
    end
  end

end
