112 lines
3.2 KiB
Ruby
112 lines
3.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
|
|
RSpec.describe Api::AcquiredMediaReleasesController, type: :controller do
|
|
let(:current_user) { create(:user) }
|
|
let(:project) { create(:project, name: 'first', account: current_user.primary_account) }
|
|
|
|
describe '#index' do
|
|
it 'returns a succesful response' do
|
|
create(:acquired_media_release, name: 'ct1', project_id: project.id)
|
|
|
|
sign_in_to_api(current_user)
|
|
get :index, params: { project_id: project.id }
|
|
|
|
expect(response).to be_successful
|
|
old_body = response.body
|
|
|
|
get :index, params: { project_id: project.id, updated_since: (DateTime.current + 10.days).to_date.to_s }
|
|
expect(response.body).not_to eq(old_body)
|
|
end
|
|
end
|
|
|
|
describe '#show' do
|
|
it 'returns a succesful response' do
|
|
tested_release = create(:acquired_media_release, name: 'ct1', project_id: project.id)
|
|
|
|
sign_in_to_api(current_user)
|
|
get :show, params: { id: tested_release.id }
|
|
|
|
expect(response).to be_successful
|
|
end
|
|
|
|
it 'contains files attachment data' do
|
|
tested_release = create(:acquired_media_release, name: 'ct1', project_id: project.id)
|
|
|
|
sign_in_to_api(current_user)
|
|
get :show, params: { id: tested_release.id }
|
|
|
|
expect(response.body).to match /file_infos/
|
|
expect(response.body).to match /files/
|
|
end
|
|
end
|
|
|
|
describe '#create' do
|
|
before do
|
|
template = create(:contract_template, name: 'ct1', project_id: project.id)
|
|
signature = signature_base64
|
|
@parameters = {
|
|
contract_template_id: template.id,
|
|
acquired_media_release: {
|
|
signature: signature,
|
|
person_phone: '123',
|
|
name: 'aaa',
|
|
signed_at: '2020-01-01 16:50:26 UTC'
|
|
}
|
|
}
|
|
sign_in_to_api(current_user)
|
|
end
|
|
|
|
it 'returns 201 - created response' do
|
|
post :create, params: @parameters
|
|
expect(response.status).to eq 201
|
|
|
|
expect(AcquiredMediaRelease.last.signature).to be_attached
|
|
end
|
|
|
|
it 'saves signed on date correctly' do
|
|
post :create, params: @parameters
|
|
expect(response.status).to eq 201
|
|
expect(AcquiredMediaRelease.last.signed_on).to eq '01/01/20'
|
|
end
|
|
|
|
it 'runs attach contract to background job' do
|
|
expect do
|
|
post :create, params: @parameters
|
|
end.to have_enqueued_job(AttachContractToReleasableJob).with(AcquiredMediaRelease.last)
|
|
end
|
|
|
|
it 'runs set tags for background releasable job' do
|
|
expect do
|
|
post :create, params: @parameters
|
|
end.to have_enqueued_job(SetTagsForReleasableJob).with(AcquiredMediaRelease.last)
|
|
end
|
|
|
|
it 'fails if there is no signature' do
|
|
template = create(:contract_template, name: 'ct1', project_id: project.id)
|
|
parameters = {
|
|
contract_template_id: template.id,
|
|
acquired_media_release: {
|
|
name: 'aaa'
|
|
}
|
|
}
|
|
|
|
sign_in_to_api(current_user)
|
|
expect do
|
|
post :create, params: parameters
|
|
end.to raise_error(ActiveRecord::RecordInvalid)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def signature_base64
|
|
@signature_base64 ||= Base64Image.from_image(file_fixture('signature.png')).data_uri
|
|
end
|
|
|
|
def response_body_data_attributes
|
|
JSON.parse(response.body).dig('data', 'attributes')
|
|
end
|
|
end
|