# frozen_string_literal: true require 'spec_helper' RSpec.describe Spearly::Auth::TeamMember do let!(:connection_double) { instance_double(Faraday::Connection) } before do stub_const('ENV', { 'SPEARLY_API_URL' => 'https://api.spearly.test' }) allow(Faraday).to receive(:new).and_return(connection_double) end describe '.invite_user_to_team()' do let!(:response_double) { instance_double(Faraday::Response, status: 201, body: { 'data' => { 'id' => 'team_invitation_1' } }.to_json) } let!(:team_id) { '711' } let!(:client) { Spearly::Auth::Client.new('token') } let!(:params) do { email: 'hey@jude.test', roles: { cms: 'admin', cloud: 'developer' } } end before do allow(connection_double).to receive(:run_request).and_return(response_double) end it 'makes POST request to /teams/:team_id/invite' do uri_parsed = Addressable::URI.parse('/teams/711/invite').normalize.to_s expect(connection_double).to receive(:run_request).with(:post, uri_parsed, params, 'Accept' => 'application/vnd.spearly.v2+json', 'Authorization' => 'token') client.invite_user_to_team(team_id, params) end it 'returns data array if status is 201' do res = client.invite_user_to_team(team_id, params) expect(res).to eq('data' => { 'id' => 'team_invitation_1' }) end it 'throws AuthorizationError if 401' do response_double = instance_double(Faraday::Response, status: 401) allow(connection_double).to receive(:run_request).and_return(response_double) expect do client.invite_user_to_team(team_id, params) end.to raise_error(Spearly::Auth::AuthorizationError) end it 'throws NotFoundError if 404' do response_double = instance_double(Faraday::Response, status: 404) allow(connection_double).to receive(:run_request).and_return(response_double) expect do client.invite_user_to_team(team_id, params) end.to raise_error(Spearly::Auth::NotFoundError) end it 'throws ServerError if 500' do response_double = instance_double(Faraday::Response, status: 500) allow(connection_double).to receive(:run_request).and_return(response_double) expect do client.invite_user_to_team(team_id, params) end.to raise_error(Spearly::Auth::ServerError) end it 'throws ServiceUnavailableError if 503' do response_double = instance_double(Faraday::Response, status: 503) allow(connection_double).to receive(:run_request).and_return(response_double) expect do client.invite_user_to_team(team_id, params) end.to raise_error(Spearly::Auth::ServiceUnavailableError) end end describe '.get_team_members()' do let!(:response_double) { instance_double(Faraday::Response, status: 200, body: { 'data' => [{ 'id' => 'team_member_1' }] }.to_json) } let!(:team_id) { '711' } let!(:client) { Spearly::Auth::Client.new('token') } before do allow(connection_double).to receive(:run_request).and_return(response_double) end it 'makes GET request to /teams/:team_id/members' do uri_parsed = Addressable::URI.parse('/teams/711/members').normalize.to_s expect(connection_double).to receive(:run_request).with(:get, uri_parsed, nil, 'Accept' => 'application/vnd.spearly.v2+json', 'Authorization' => 'token') client.get_team_members(team_id) end it 'returns data array if status is 200' do res = client.get_team_members(team_id) expect(res).to eq('data' => [{ 'id' => 'team_member_1' }]) end it 'throws AuthorizationError if 401' do response_double = instance_double(Faraday::Response, status: 401) allow(connection_double).to receive(:run_request).and_return(response_double) expect do client.get_team_members(team_id) end.to raise_error(Spearly::Auth::AuthorizationError) end it 'throws NotFoundError if 404' do response_double = instance_double(Faraday::Response, status: 404) allow(connection_double).to receive(:run_request).and_return(response_double) expect do client.get_team_members(team_id) end.to raise_error(Spearly::Auth::NotFoundError) end it 'throws ServerError if 500' do response_double = instance_double(Faraday::Response, status: 500) allow(connection_double).to receive(:run_request).and_return(response_double) expect do client.get_team_members(team_id) end.to raise_error(Spearly::Auth::ServerError) end it 'throws ServiceUnavailableError if 503' do response_double = instance_double(Faraday::Response, status: 503) allow(connection_double).to receive(:run_request).and_return(response_double) expect do client.get_team_members(team_id) end.to raise_error(Spearly::Auth::ServiceUnavailableError) end end end