65 lines
1.9 KiB
Ruby
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
|