2015-03-09 14:44:12 +00:00
require 'spec_helper'
describe JamTrackImporter do
let ( :s3_manager ) { S3Manager . new ( app_config . aws_bucket_jamtracks , app_config . aws_access_key_id , app_config . aws_secret_access_key ) }
let ( :sample_yml ) {
{
" name " = > " Back in Black " ,
" plan_code " = > " jamtrack-acdc-backinblack " ,
" recording_type " = > 'Cover' ,
" pro " = > 'ASCAP' ,
" genre " = > 'rock'
}
}
describe " load_metalocation " do
include UsesTempFiles
metafile = 'meta.yml'
in_directory_with_file ( metafile )
before ( :each ) do
2015-08-09 18:37:43 +00:00
JamTrackImporter . storage_format = 'default'
2015-03-09 14:44:12 +00:00
content_for_file ( YAML . dump ( sample_yml ) )
end
it " no meta " do
s3_metalocation = 'audio/Artist 1/Bogus Place/meta.yml'
2015-08-09 18:37:43 +00:00
JamTrackImporter . storage_format = 'default'
2015-03-09 14:44:12 +00:00
JamTrackImporter . load_metalocation ( s3_metalocation ) . should be_nil
end
it " successfully " do
s3_metalocation = 'audio/Artist 1/Song 1/meta.yml'
s3_manager . upload ( s3_metalocation , metafile )
JamTrackImporter . load_metalocation ( s3_metalocation ) . should eq ( sample_yml )
end
end
2015-08-09 18:37:43 +00:00
describe " sort_tracks " do
let ( :jam_track ) { FactoryGirl . create ( :jam_track ) }
let ( :importer ) { JamTrackImporter . new ( ) }
let ( :vocal ) { Instrument . find ( 'voice' ) }
let ( :drums ) { Instrument . find ( 'drums' ) }
let ( :bass_guitar ) { Instrument . find ( 'bass guitar' ) }
let ( :piano ) { Instrument . find ( 'piano' ) }
let ( :keyboard ) { Instrument . find ( 'keyboard' ) }
let ( :acoustic_guitar ) { Instrument . find ( 'acoustic guitar' ) }
let ( :electric_guitar ) { Instrument . find ( 'electric guitar' ) }
let ( :other ) { Instrument . find ( 'other' ) }
it " the big sort " do
# specified in https://jamkazam.atlassian.net/browse/VRFS-3296
vocal_lead = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : vocal , part : 'Lead' )
vocal_lead_female = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : vocal , part : 'Lead Female' )
vocal_lead_male = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : vocal , part : 'Lead Male' )
vocal_backing = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : vocal , part : 'Backing' )
vocal_random = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : vocal , part : 'Random' )
drums_drums = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : drums , part : 'Drums' )
drums_percussion = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : drums , part : 'Percussion' )
drums_random_1 = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : drums , part : 'A' )
drums_random_2 = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : drums , part : 'C' )
bass_guitar_bass = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : bass_guitar , part : 'Bass' )
bass_guitar_random_1 = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : bass_guitar , part : 'some bass' )
bass_guitar_random_2 = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : bass_guitar , part : 'zome bass' )
piano_piano = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : piano , part : 'Piano' )
keyboard_synth_1 = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : keyboard , part : 'Synth 1' )
keyboard_synth_2 = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : keyboard , part : 'Synth 2' )
keyboard_pads = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : keyboard , part : 'Pads' )
keyboard_random_1 = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : keyboard , part : 'A' )
keyboard_random_2 = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : keyboard , part : 'Z' )
acoust_guitar_lead = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : acoustic_guitar , part : 'Lead' )
acoust_guitar_lead_x = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : acoustic_guitar , part : 'Lead X' )
acoust_guitar_solo_1 = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : acoustic_guitar , part : 'Solo 1' )
acoust_guitar_solo_2 = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : acoustic_guitar , part : 'Solo 2' )
acoust_guitar_rhythm = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : acoustic_guitar , part : 'Rhythm' )
acoust_guitar_random_1 = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : acoustic_guitar , part : 'A' )
acoust_guitar_random_2 = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : acoustic_guitar , part : 'Z' )
elect_guitar_lead = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : electric_guitar , part : 'Lead' )
elect_guitar_lead_x = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : electric_guitar , part : 'Lead X' )
elect_guitar_solo_1 = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : electric_guitar , part : 'Solo 1' )
elect_guitar_solo_2 = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : electric_guitar , part : 'Solo 2' )
elect_guitar_rhythm = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : electric_guitar , part : 'Rhythm' )
elect_guitar_random_1 = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : electric_guitar , part : 'A' )
elect_guitar_random_2 = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : electric_guitar , part : 'Z' )
other_1 = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : other , part : 'Other 1' )
other_2 = FactoryGirl . build ( :jam_track_track , jam_track : jam_track , instrument : other , part : 'Other 2' )
expected = [
vocal_lead ,
vocal_lead_female ,
vocal_lead_male ,
vocal_backing ,
vocal_random ,
drums_drums ,
drums_percussion ,
drums_random_1 ,
drums_random_2 ,
bass_guitar_bass ,
piano_piano ,
keyboard_synth_1 ,
keyboard_synth_2 ,
keyboard_pads ,
keyboard_random_1 ,
keyboard_random_2 ,
acoust_guitar_lead ,
acoust_guitar_lead_x ,
acoust_guitar_rhythm ,
acoust_guitar_random_1 ,
acoust_guitar_solo_1 ,
acoust_guitar_solo_2 ,
acoust_guitar_random_2 ,
elect_guitar_lead ,
elect_guitar_lead_x ,
elect_guitar_solo_1 ,
elect_guitar_solo_2 ,
elect_guitar_rhythm ,
elect_guitar_random_1 ,
elect_guitar_random_2 ,
bass_guitar_random_1 ,
bass_guitar_random_2 ,
other_1 ,
other_2
]
shuffled = expected . shuffle
sorted_tracks = importer . sort_tracks ( shuffled )
importer . set_custom_weight ( vocal_lead ) . should eq ( 100 )
expected . each_with_index do | expected_track , i |
sorted_tracks [ i ] . should eq ( expected_track )
end
end
end
2015-03-09 14:44:12 +00:00
describe " synchronize " do
2016-08-03 01:46:15 +00:00
let ( :jam_track ) { jt = JamTrack . new ; jt . id = '1' ; jt }
2015-08-09 18:37:43 +00:00
let ( :importer ) { JamTrackImporter . new ( ) }
2015-03-09 14:44:12 +00:00
let ( :minimum_meta ) { nil }
let ( :metalocation ) { 'audio/Artist 1/Song 1/meta.yml' }
let ( :options ) { { skip_audio_upload : true } }
it " bare minimum specification " do
2015-04-20 18:55:33 +00:00
importer . synchronize_metadata ( jam_track , minimum_meta , metalocation , 'Artist 1' , 'Song 1' , options )
2015-03-09 14:44:12 +00:00
jam_track . plan_code . should eq ( 'jamtrack-artist1-song1' )
jam_track . name . should eq ( " Song 1 " )
jam_track . description . should == " This is a JamTrack audio file for use exclusively with the JamKazam service. This JamTrack is a high quality cover of the Artist 1 song \" Song 1 \" . "
jam_track . time_signature . should be_nil
jam_track . status . should eq ( 'Staging' )
jam_track . recording_type . should eq ( 'Cover' )
jam_track . original_artist . should eq ( 'Artist 1' )
jam_track . songwriter . should be_nil
jam_track . publisher . should be_nil
2015-04-22 14:44:57 +00:00
jam_track . sales_region . should eq ( 'Worldwide' )
2015-03-09 14:44:12 +00:00
jam_track . price . should eq ( 1 . 99 )
end
end
describe " parse_wav " do
it " Guitar " do
2015-08-09 18:37:43 +00:00
result = JamTrackImporter . new . parse_file ( 'blah/Ready for Love Stem - Guitar - Main.wav' )
2015-03-09 14:44:12 +00:00
result [ :instrument ] . should eq ( 'electric guitar' )
result [ :part ] . should eq ( 'Main' )
end
end
end