262 lines
8.7 KiB
Ruby
262 lines
8.7 KiB
Ruby
require "rails_helper"
|
|
|
|
releases = [
|
|
{
|
|
type: :appearance_release,
|
|
obligatory_attribute: :person_name
|
|
},
|
|
{
|
|
type: :talent_release,
|
|
obligatory_attribute: :person_name
|
|
},
|
|
{
|
|
type: :location_release,
|
|
obligatory_attribute: :name
|
|
},
|
|
{
|
|
type: :material_release,
|
|
obligatory_attribute: :name
|
|
}
|
|
]
|
|
|
|
describe "IOS App Support API" do
|
|
let(:current_user) { create(:user, :manager) }
|
|
let!(:project) { create(:project, name: "project one", members: current_user, account: current_user.primary_account) }
|
|
let!(:template) { create(:contract_template, name: "cote1", project: project) }
|
|
|
|
it 'lists projects' do
|
|
get '/api/v1/projects', headers: required_headers(current_user)
|
|
|
|
json = JSON.parse(response.body)
|
|
|
|
expect(response.status).to eq 200
|
|
expect(json["data"].length).to eq 1
|
|
end
|
|
|
|
it 'lists broadcasts' do
|
|
allow(MuxLiveStream).to receive(:new).and_return(double(id: "id", key: "key", playback_id: "playback_id"))
|
|
|
|
br1 = create(:broadcast, project: project, name: "Created Bc", status: "created")
|
|
br2 = create(:broadcast, project: project, name: "Idle Bc", status: "idle")
|
|
|
|
get "/api/v1/projects/#{project.id}/broadcasts", headers: required_headers(current_user)
|
|
|
|
json = JSON.parse(response.body)
|
|
|
|
expect(response.status).to eq 200
|
|
expect(json["data"].length).to eq 2
|
|
end
|
|
|
|
it 'lists contract templates' do
|
|
get "/api/v1/projects/#{project.id}/contract_templates", headers: required_headers(current_user)
|
|
|
|
json = JSON.parse(response.body)
|
|
|
|
expect(response.status).to eq 200
|
|
expect(json["data"].length).to eq 1
|
|
end
|
|
|
|
it 'shows details of contract templates' do
|
|
get "/api/v1/contract_templates/#{template.id}", headers: required_headers(current_user)
|
|
|
|
json = JSON.parse(response.body)
|
|
|
|
expect(response.status).to eq 200
|
|
expect(json["data"]["attributes"].keys.length).to be > 1
|
|
expect(response.body).to match /cote1/
|
|
end
|
|
|
|
it 'lists releases' do
|
|
releases.each do |release|
|
|
r = create(release[:type], release[:obligatory_attribute] => "ct1", :project_id => project.id)
|
|
|
|
get "/api/v1/projects/#{project.id}/#{release[:type].to_s.pluralize}", headers: required_headers(current_user)
|
|
|
|
json = JSON.parse(response.body)
|
|
|
|
expect(response.status).to eq 200
|
|
expect(json["data"].length).to eq 1
|
|
expect(json["data"].first['attributes'][release[:obligatory_attribute].to_s]).to eq r.public_send release[:obligatory_attribute]
|
|
end
|
|
end
|
|
|
|
it 'shows details of releases' do
|
|
releases.each do |release|
|
|
r = create(release[:type], release[:obligatory_attribute] => "ct1", :project_id => project.id)
|
|
|
|
get "/api/v1/#{release[:type].to_s.pluralize}/#{r.id}", headers: required_headers(current_user)
|
|
|
|
json = JSON.parse(response.body)
|
|
|
|
expect(response.status).to eq 200
|
|
expect(json["data"]["attributes"].keys.length).to be > 1
|
|
expect(response.body).to match /ct1/
|
|
end
|
|
end
|
|
|
|
it 'lists notes' do
|
|
releases.each do |release|
|
|
r = create(release[:type], release[:obligatory_attribute] => "ct1", :project_id => project.id)
|
|
n = create(:note, :notable => r, :content => "Simple Note", :user => current_user, :email => current_user.email)
|
|
get "/api/v1/#{release[:type].to_s.pluralize}/#{r.id}/notes", headers: required_headers(current_user)
|
|
|
|
json = JSON.parse(response.body)
|
|
|
|
expect(json["data"].length).to eq 1
|
|
expect(response.body).to match /#{n.content}/
|
|
expect(response.body).to match /#{current_user.email}/
|
|
end
|
|
end
|
|
|
|
it 'creates notes' do
|
|
releases.each do |release|
|
|
r = create(release[:type], release[:obligatory_attribute] => "ct1", :project_id => project.id)
|
|
|
|
note = { "data" => { "type" => "note", "attributes" => { "content" => "This is a note!" } } }
|
|
|
|
post "/api/v1/#{release[:type].to_s.pluralize}/#{r.id}/notes", params: note.to_json, headers: required_headers(current_user)
|
|
|
|
json = JSON.parse(response.body)
|
|
|
|
expect(json["data"]["attributes"].keys.length).to be > 1
|
|
expect(response.body).to match /This is a note!/
|
|
end
|
|
end
|
|
|
|
it 'creates appearance release' do
|
|
allow(BrayniacAI::Validation).to receive(:create).and_return(double(:validation, valid: true))
|
|
release = releases.first
|
|
release_json = { "data" => {
|
|
"type" => "appearance_release",
|
|
"attributes" => {
|
|
"person_first_name" => "Real",
|
|
"person_last_name" => "Person",
|
|
"person_photo" => {
|
|
"io" => "#{photo_base64}",
|
|
"filename" => "adano.jpg",
|
|
},
|
|
"signature" => "#{signature_base64}",
|
|
"person_phone" => "123"
|
|
}
|
|
} }.to_json
|
|
|
|
post "/api/v1/contract_templates/#{template.id}/#{release[:type].to_s.pluralize}", params: release_json, headers: required_headers(current_user)
|
|
|
|
json = JSON.parse(response.body)
|
|
|
|
expect(response.status).to eq 201
|
|
expect(json["data"]["attributes"].keys.length).to be > 1
|
|
expect(response.body).to match /Real/
|
|
expect(response.body).to match /Person/
|
|
end
|
|
|
|
it 'creates location release' do
|
|
release = releases.third
|
|
release_json = { "data" => {
|
|
"type" => "location_release",
|
|
"attributes" => {
|
|
"name" => "Test Premises",
|
|
"address_street1" => "Dummy St.",
|
|
"address_city" => "Dummy City",
|
|
"address_state" => "Dummy State",
|
|
"address_zip" => "12121",
|
|
"address_country" => "US",
|
|
"person_first_name" => "John",
|
|
"person_last_name" => "Doe",
|
|
"person_phone" => "222223333",
|
|
"person_email" => "mail@mail.com",
|
|
"person_company" => "Dummy Company Inc.",
|
|
"person_title" => "mr.",
|
|
"person_address_street1" => "Dummy St. 2",
|
|
"person_address_city" => "Dummy City 2",
|
|
"person_address_state" => "Dummy State 2",
|
|
"person_address_zip" => "1111111",
|
|
"person_address_country" => "US",
|
|
"filming_ended_on" => DateTime.now,
|
|
"filming_started_on" => "01/02/20",
|
|
"filming_hours" => "04-20",
|
|
"signature" => "#{signature_base64}"
|
|
}
|
|
} }.to_json
|
|
|
|
post "/api/v1/contract_templates/#{template.id}/#{release[:type].to_s.pluralize}", params: release_json, headers: required_headers(current_user)
|
|
|
|
json = JSON.parse(response.body)
|
|
|
|
expect(response.status).to eq 201
|
|
expect(json["data"]["attributes"].keys.length).to be > 1
|
|
expect(response.body).to match /John/
|
|
expect(response.body).to match /Doe/
|
|
end
|
|
|
|
it 'creates talent, material and location releases' do
|
|
releases.each do |release|
|
|
next if release[:type] == :appearance_release
|
|
next if release[:type] == :location_release
|
|
|
|
release_json = { "data" => {
|
|
"type" => release[:type].to_s,
|
|
"attributes" => {
|
|
release[:obligatory_attribute] => "Real Release",
|
|
"person_first_name" => "Real",
|
|
"person_last_name" => "Release",
|
|
"photos" => [
|
|
{ "io" => "#{photo_base64}", "filename" => "adano.jpg" }
|
|
],
|
|
"signature" => "#{signature_base64}",
|
|
"person_phone" => "123"
|
|
}
|
|
} }.to_json
|
|
post "/api/v1/contract_templates/#{template.id}/#{release[:type].to_s.pluralize}", params: release_json, headers: required_headers(current_user)
|
|
|
|
json = JSON.parse(response.body)
|
|
expect(json["data"]["attributes"].keys.length).to be > 1
|
|
expect(response.body).to match /Real/
|
|
expect(response.body).to match /Release/
|
|
end
|
|
end
|
|
|
|
it 'adds photos to talent, material and location releases' do
|
|
releases.each do |release|
|
|
next if release[:type] == :appearance_release
|
|
|
|
r = create(release[:type], release[:obligatory_attribute] => "ct1", :project_id => project.id)
|
|
old_photo_count = r.photos.length
|
|
|
|
photos_json = { "data" => {
|
|
"type" => release[:type].to_s,
|
|
"attributes" => {
|
|
"photos" => [
|
|
{ "io" => "#{photo_base64}", "filename" => "adano.jpg" }
|
|
]
|
|
}
|
|
} }.to_json
|
|
|
|
put "/api/v1/#{release[:type].to_s.pluralize}/#{r.id}", params: photos_json, headers: required_headers(current_user)
|
|
json = JSON.parse(response.body)
|
|
r.reload
|
|
expect(json["data"]["attributes"].keys.length).to be > 1
|
|
expect(response.body).to match /ct1/
|
|
expect(r.photos.length).to eq old_photo_count + 1
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def required_headers(user)
|
|
token = Knock::AuthToken.new(payload: { sub: user.id }).token
|
|
{
|
|
'Authorization': "Bearer #{token}",
|
|
'Content-type': "application/vnd.api+json"
|
|
}
|
|
end
|
|
|
|
def photo_base64
|
|
@photo_base64 ||= Base64Image.from_image(file_fixture("person_photo.png")).data_uri
|
|
end
|
|
|
|
def signature_base64
|
|
@signature_base64 ||= Base64Image.from_image(file_fixture("signature.png")).data_uri
|
|
end
|
|
end
|