require 'rubygems' require "test/unit" require "zencoder" require 'shoulda' require 'mocha' require 'ruby-debug' class TestZencoder < Test::Unit::TestCase context "the zn lib" do setup do @src='s3://test_development/spark.avi' @api = 'https://app.zencoder.com' @apikey = ENV['ZC_APIKEY'] @base_url = 's3://test_development/zencoder_asset' @recipe = ZencoderAPI::Recipes.iphone('base_url' =>@base_url) @recipe2 = ZencoderAPI::Recipes.web('base_url' =>@base_url, :thumbnails => { :number => 1, :size => "75x75"}) assert_not_nil @apikey, "export ZC_APIKEY before you run the tests" end context "posting a new job" do setup do @resp =<<-EOS {"id":36119,"outputs":[{"url":"s3://test_development/zencoder_asset/cf398a309f648f99c41a2c0573f40baf.mp4","label":"iphone","id":36174},{"url":"s3://test_development/zencoder_asset/253fae410b1262ef3a76296cbfdb8b44.mp4","label":"web","id":36175}]} EOS end should "return jobid" do RestClient.expects(:post).returns(@resp) h = Zencoder.submit_job(@apikey, @src, [@recipe, @recipe2]) assert_equal Hash, h.class end should "be able to submit a job" do RestClient.expects(:post).with(kind_of(String), kind_of(String), kind_of(Hash)){|x,y,z| assert_equal x, 'https://app.zencoder.com/api/jobs' body = JSON.parse(y) assert_equal body['input'], @src assert_equal body['output'][0]['base_url'], @base_url assert_equal body['output'][1]['base_url'], @base_url assert_equal body['output'][1]['label'], 'web' assert_equal body['output'][0]['label'], 'iphone' assert_equal body['api_key'], @apikey assert_equal z[:content_type], :json assert_equal z[:accept], :json true }.returns(@resp) Zencoder.submit_job(@apikey, @src, [@recipe, @recipe2]) end should "be able to muck the config " do RestClient.expects(:post).with(kind_of(String), kind_of(String), kind_of(Hash)){|x,y,z| body = JSON.parse(y) assert_equal body['foo'],'bar' true }.returns(@resp) Zencoder.submit_job(@apikey, @src, @recipe) do |config| config[:foo]='bar' assert config[:output].first.is_a? Hash end end should "be able to submit a job with 1 recipe" do RestClient.expects(:post).with(kind_of(String), kind_of(String), kind_of(Hash)){|x,y,z| assert_equal x, 'https://app.zencoder.com/api/jobs' body = JSON.parse(y) assert_equal body['input'], @src assert_equal body['output'][0]['base_url'], @base_url assert_equal body['output'][0]['label'], 'iphone' assert_equal body['api_key'], @apikey assert_equal z[:content_type], :json assert_equal z[:accept], :json true }.returns(@resp) Zencoder.submit_job(@apikey, @src, @recipe) end end should "raise error when given bad data" do assert_raise ZencoderAPI::RecipeError do ZencoderAPI::Recipes.web('base_url' =>@base_url, :bad_key => 'wtf?') end assert_raise ZencoderAPI::RecipeError do ZencoderAPI::Recipes.web('base_url' =>@base_url, :thumbnails => {:bad_key => 'wtf?'}) end end end end