Files
codeocean/spec/services/exercise_service/push_external_spec.rb
2022-11-25 11:10:06 +01:00

65 lines
1.9 KiB
Ruby

# frozen_string_literal: true
require 'rails_helper'
RSpec.describe ExerciseService::PushExternal do
describe '.new' do
subject(:push_external) { described_class.new(zip:, codeharbor_link:) }
let(:zip) { ProformaService::ExportTask.call(exercise: build(:dummy)) }
let(:codeharbor_link) { build(:codeharbor_link) }
it 'assigns zip' do
expect(push_external.instance_variable_get(:@zip)).to be zip
end
it 'assigns codeharbor_link' do
expect(push_external.instance_variable_get(:@codeharbor_link)).to be codeharbor_link
end
end
describe '#execute' do
subject(:push_external) { described_class.call(zip:, codeharbor_link:) }
let(:zip) { ProformaService::ExportTask.call(exercise: build(:dummy)) }
let(:codeharbor_link) { build(:codeharbor_link) }
let(:status) { 200 }
let(:response) { '' }
before { stub_request(:post, codeharbor_link.push_url).to_return(status:, body: response) }
it 'calls the correct url' do
expect(push_external).to have_requested(:post, codeharbor_link.push_url)
end
it 'submits the correct headers' do
expect(push_external).to have_requested(:post, codeharbor_link.push_url)
.with(headers: {content_type: 'application/zip',
authorization: "Bearer #{codeharbor_link.api_key}",
content_length: zip.string.length})
end
it 'submits the correct body' do
expect(push_external).to have_requested(:post, codeharbor_link.push_url)
.with(body: zip.string)
end
context 'when response status is success' do
it { is_expected.to be_nil }
context 'when response status is 500' do
let(:status) { 500 }
let(:response) { 'an error occured' }
it { is_expected.to be response }
end
end
context 'when an error occurs' do
before { allow(Faraday).to receive(:new).and_raise(StandardError) }
it { is_expected.not_to be_nil }
end
end
end