require File.expand_path(File.dirname(__FILE__) + '/spec_helper') describe Panda::Encoding do before(:each) do Panda.configure do access_key "my_access_key" secret_key "my_secret_key" api_host "api.example.com" cloud_id 'my_cloud_id' api_port 85 end end it "should find by video_id" do encoding_json = "[{\"abc\":\"efg\",\"id\":456}]" stub_http_request(:get, /api.example.com:85\/v2\/videos\/123\/encodings.json/). to_return(:body => encoding_json) Panda::Encoding.find_all_by_video_id("123").first.id.should == 456 end it "should create an encoding using instance method" do encoding_json = "{\"source_url\":\"my_source_url\",\"id\":\"456\"}" stub_http_request(:post, /api.example.com:85\/v2\/encodings.json/). with(:body => /source_url=my_source_url/). to_return(:body => encoding_json) encoding = Panda::Encoding.new(:source_url => "my_source_url", :video_id => "123") encoding.create.should == true encoding.id.should == "456" end it "should find by encoding_id" do encoding_json = "{\"abc\":\"efg\",\"id\":\"456\"}" stub_http_request(:get, /api.example.com:85\/v2\/encodings\/456.json/). to_return(:body => encoding_json) encoding = Panda::Encoding.find("456") encoding.id.should == "456" end it "should find by the video through the association" do video_json = "{\"source_url\":\"my_source_url\",\"id\":\"123\"}" encoding_json = "{\"abc\":\"efg\",\"id\":\"456\", \"video_id\":\"123\"}" stub_http_request(:get, /api.example.com:85\/v2\/encodings\/456.json/). to_return(:body => encoding_json) stub_http_request(:get, /api.example.com:85\/v2\/videos\/123.json/). to_return(:body => video_json) encoding = Panda::Encoding.find("456") encoding.video.id.should == "123" encoding.id.should == "456" end it "should filter on find" do encoding_json = "[{\"source_url\":\"my_source_url\",\"id\":\"456\"}]" stub_http_request(:get, /api.example.com:85\/v2\/encodings.json/). with{|r| r.uri.query =~ /profile_name=my_profile/ && r.uri.query =~ /video_id=123/ }. to_return(:body => encoding_json) encodings = Panda::Encoding.all(:video_id => "123", :profile_name => "my_profile") encodings.first.id.should == "456" end it "should return the encoding url" do cloud_json = "{\"s3_videos_bucket\":\"my_bucket\",\"id\":\"my_cloud_id\", \"url\":\"http://my_bucket.s3.amazonaws.com/\"}" stub_http_request(:get, /api.example.com:85\/v2\/clouds\/my_cloud_id.json/). to_return(:body => cloud_json) encoding = Panda::Encoding.new({:id => "456", :extname => ".ext", :path => "abc/panda", :status => 'success'}) encoding.url.should == "http://my_bucket.s3.amazonaws.com/abc/panda.ext" end it "should generate a screenhost array" do cloud_json = "{\"s3_videos_bucket\":\"my_bucket\",\"id\":\"my_cloud_id\", \"url\":\"http://my_bucket.s3.amazonaws.com/\"}" stub_http_request(:get, /api.example.com:85\/v2\/clouds\/my_cloud_id.json/). to_return(:body => cloud_json) encoding = Panda::Encoding.new({:id => "456", :extname => ".ext", :status => "success", :path => "abc/panda"}) encoding.screenshots[0].should == "http://my_bucket.s3.amazonaws.com/abc/panda_1.jpg" end it "should generate a screenhost array" do encoding = Panda::Encoding.new({:id => "456", :extname => ".ext", :status => "fail"}) encoding.screenshots.should == [] end it "should create an encoding through the association" do video_json = "{\"source_url\":\"my_source_url\",\"id\":\"123\"}" encoding_json = "{\"abc\":\"efg\",\"id\":\"456\", \"video_id\":\"123\", \"profile_id\":\"901\"}" stub_http_request(:get, /api.example.com:85\/v2\/videos\/123.json/). to_return(:body => video_json) stub_http_request(:post, /api.example.com:85\/v2\/encodings.json/). with{|r| r.body =~ /video_id=123/ && r.body =~ /profile_id=901/}. to_return(:body => encoding_json) video = Panda::Video.find("123") encoding = video.encodings.create(:profile_id => "901") encoding.id.should == "456" encoding.profile_id.should == "901" end it "should create an encoding through the association" do video_json = "{\"source_url\":\"my_source_url\",\"id\":\"123\"}" encoding_json = "{\"abc\":\"efg\",\"id\":\"456\", \"video_id\":\"123\", \"profile_id\":\"901\"}" stub_http_request(:get, /api.example.com:85\/v2\/videos\/123.json/). to_return(:body => video_json) stub_http_request(:post, /api.example.com:85\/v2\/encodings.json/). with{|r| r.body =~ /video_id=123/ && r.body =~ /profile_id=901/}. to_return(:body => encoding_json) video = Panda::Video.find("123") encoding = video.encodings.create!(:profile_id => "901") encoding.id.should == "456" encoding.profile_id.should == "901" end it "should filter the profile name after triggering the request" do video_json = "{\"source_url\":\"my_source_url\",\"id\":\"123\"}" encodings_1_json = "[{\"id\":\"456\", \"video_id\":\"123\", \"profile_name\":\"h264\"}]" encodings_2_json = "[{\"id\":\"789\", \"video_id\":\"123\", \"profile_name\":\"ogg\"}]" stub_http_request(:get, /api.example.com:85\/v2\/videos\/123.json/). to_return(:body => video_json) stub_http_request(:get, /api.example.com:85\/v2\/videos\/123\/encodings.json/). with{|r| r.uri.query =~ /profile_name=h264/ }. to_return(:body => encodings_1_json) stub_http_request(:get, /api.example.com:85\/v2\/videos\/123\/encodings.json/). with{|r| r.uri.query =~ /profile_name=ogg/ }. to_return(:body => encodings_2_json) video = Panda::Video.find("123") video.encodings.find_by_profile_name("h264").id.should == "456" video.encodings.find_by_profile_name("ogg").id.should == "789" end it "should create an encoding through the association" do video_json = "{\"source_url\":\"my_source_url\",\"id\":\"123\"}" encodings_json = "[{\"abc\":\"efg\",\"id\":\"456\", \"video_id\":\"123\", \"profile_id\":\"901\"}]" stub_http_request(:get, /api.example.com:85\/v2\/videos\/123.json/). to_return(:body => video_json) stub_http_request(:get, /api.example.com:85\/v2\/videos\/123\/encodings.json/). with{|r| r.uri.query =~ /profile_id=901/}. to_return(:body => encodings_json) video = Panda::Video.find("123") encodings = video.encodings.all(:profile_id => "901") encodings.first.id = "456" end it "should create an encoding through the association" do video_json = "{\"source_url\":\"my_source_url\",\"id\":\"123\"}" encodings_json = "[{\"abc\":\"efg\",\"id\":\"456\", \"video_id\":\"123\", \"profile_id\":\"901\"}]" stub_http_request(:get, /api.example.com:85\/v2\/videos\/123.json/). to_return(:body => video_json) stub_http_request(:get, /api.example.com:85\/v2\/videos\/123\/encodings.json/). with{|r| r.uri.query =~ /profile_id=901/}. to_return(:body => encodings_json) video = Panda::Video.find("123") encodings = video.encodings.profile("901") encodings.first.id = "456" end it "should filter encodings specifying video and status as a method" do encoding_json = "[{\"source_url\":\"my_source_url\",\"id\":\"456\"}]" stub_http_request(:get, /api.example.com:85\/v2\/encodings.json/). with{|r| r.uri.query =~ /status=success/ && r.uri.query =~ /video_id=123/ }. to_return(:body => encoding_json) encodings = Panda::Encoding.video(123).status("success").all encodings.first.id.should == "456" end it "should filter encodings specifying video and status as a method" do encoding_json = "[{\"source_url\":\"my_source_url\",\"id\":\"456\"}]" stub_http_request(:get, /api.example.com:85\/v2\/encodings.json/). with{|r| r.uri.query =~ /profile_id=prof_1/ && r.uri.query =~ /video_id=123/ }. to_return(:body => encoding_json) encodings = Panda::Encoding.video(123).profile("prof_1").all encodings.first.id.should == "456" end it "should filter encodings specifying video and profile id as a method" do encoding_json = "[{\"source_url\":\"my_source_url\",\"id\":\"456\"}]" stub_http_request(:get, /api.example.com:85\/v2\/encodings.json/). with{|r| r.uri.query =~ /profile_name=prof_name/ && r.uri.query =~ /video_id=123/ }. to_return(:body => encoding_json) encodings = Panda::Encoding.video(123).profile_name("prof_name").all encodings.first.id.should == "456" end it "should find an encoding" do encoding_json = "[{\"source_url\":\"my_source_url\",\"id\":\"456\"}]" stub_http_request(:get, /api.example.com:85\/v2\/encodings\/456.json/). to_return(:body => encoding_json) Panda::Encoding.find("456") end it "should tell if the encoding is success" do encoding = Panda::Encoding.new({:status => "success"}) encoding.success?.should == true encoding.processing?.should == false end it "should tell if the encoding is success" do encoding = Panda::Encoding.new({:status => "processing"}) encoding.success?.should == false encoding.processing?.should == true end it "should tell if the encoding is success" do encoding = Panda::Encoding.new({:status => "fail"}) encoding.success?.should == false encoding.fail?.should == true end it "should return the most recent updated encoding" do video_json = "[{\"source_url\":\"url_panda.mp4\",\"id\":\"123\"}]" stub_http_request(:get, /api.example.com:85\/v2\/encodings.json/). with{|r| r.uri.query =~ /per_page=1/ }. to_return(:body => video_json) Panda::Encoding.first end it "should not delegate scope if the method do not really exist in the scope" do lambda {Panda::Encoding.reload}.should raise_error(NoMethodError) lambda {Panda::Encoding.each}.should raise_error(NoMethodError) lambda {Panda::Encoding.size}.should raise_error(NoMethodError) end end