jam-cloud/web/spec/features/youtube_spec.rb

96 lines
3.9 KiB
Ruby
Raw Permalink Normal View History

require 'spec_helper'
require 'google_client'
require 'rest_client'
describe "YouTube", :slow=>true, :js=>true, :type => :feature, :capybara_feature => true, intermittent: true do
subject { page }
2015-07-20 15:45:55 +00:00
# Authenticate with a test google account. This should create
# a UserAuthorization record, just as if a real user logged into google:
before(:all) do
Capybara.javascript_driver = :poltergeist
Capybara.current_driver = Capybara.javascript_driver
Capybara.default_max_wait_time = 10
@previous_run_server = Capybara.run_server
Capybara.run_server = false
@user=FactoryGirl.create(:user, :email => "jamkazamtest@gmail.com")
@youtube_client = GoogleClient.new()
authorize_google_user(@youtube_client, @user, "filthyblueberryjam")
google_auth = UserAuthorization.google_auth(@user).first # Consider returning this from above now that it is reliable
end
after(:all) do
2015-07-20 15:45:55 +00:00
@user.destroy
@youtube_client.shutdown
Capybara.run_server = @previous_run_server
end
2015-07-20 15:45:55 +00:00
# This test retrieves and verified the signed youtube
# upload URL in the same manner as the JK client:
it "should retrieve upload url" do
length = 3276
upload_hash=@youtube_client.sign_youtube_upload(@user, "test_video.mp4", length)
upload_hash.should_not be_nil
upload_hash.length.should be >=1
upload_hash['method'].should eq("PUT")
upload_hash['url'].should_not be_nil
upload_hash['Authorization'].should_not be_nil
upload_hash['Content-Length'].should_not be_nil
upload_hash['Content-Length'].should eq(length)
upload_hash['Content-Type'].should_not be_nil
@youtube_client.verify_youtube_upload(@user, upload_hash['url'], length).should be false
end
2015-07-20 15:45:55 +00:00
# Check that we can actually upload to the signed youtube URL:
it "upload url should allow uploading" do
vid_path = Rails.root.join('spec', 'files', 'test_video.mp4')
length = File.size?(vid_path)
upload_hash=@youtube_client.sign_youtube_upload(@user, "test_video.mp4", length)
#puts upload_hash.inspect
upload_hash.should_not be_nil
upload_hash.length.should be >=1
upload_hash['method'].should eq("PUT")
upload_hash['url'].should_not be_nil
upload_hash['Authorization'].should_not be_nil
upload_hash['Content-Length'].should_not be_nil
upload_hash['Content-Length'].should eq(length)
upload_hash['Content-Type'].should_not be_nil
# Upload this file as the client would:
RestClient.put(upload_hash['url'], File.read(vid_path))
@youtube_client.verify_youtube_upload(@user, upload_hash['url'], length).should be true
#@youtube_client.youtube_upload_status(@user, upload_hash['url'], length)
2015-07-20 15:45:55 +00:00
end
2015-07-20 15:45:55 +00:00
# Ensure that uploading, then verifying and completing the upload sets the appropriate flag:
it "sets upload flag when complete" do
@music_session = FactoryGirl.create(:active_music_session, :creator => @user, :musician_access => true)
@connection = FactoryGirl.create(:connection, :user => @user, :music_session => @music_session)
@video_source = FactoryGirl.create(:video_source, :connection => @connection)
@recording = FactoryGirl.create(:recording, owner: @user, band: nil, duration:1)
2015-07-20 15:45:55 +00:00
vid_path = Rails.root.join('spec', 'files', 'test_video.mp4')
length = File.size?(vid_path)
upload_hash=@youtube_client.sign_youtube_upload(@user, "test_video.mp4", length)
upload_hash.should_not be_nil
upload_hash['url'].should_not be_nil
RestClient.put(upload_hash['url'], File.read(vid_path))
2015-07-20 15:45:55 +00:00
recorded_video = FactoryGirl.create(:recorded_video,
recording: @recording,
user: @recording.owner,
fully_uploaded: false,
url: upload_hash['url'],
length: length
)
2015-07-20 15:45:55 +00:00
@recording.recorded_videos << recorded_video
@youtube_client.verify_youtube_upload(@user, upload_hash['url'], length).should be true
@youtube_client.complete_upload(recorded_video).should be true
recorded_video.fully_uploaded.should be true
end
end