require "rss-testcase" require "rss/maker" module RSS class TestSetupMakerITunes < TestCase def test_setup_maker_simple author = "John Doe" block = true categories = ["Audio Blogs"] image = "http://example.com/podcasts/everything/AllAboutEverything.jpg" duration = "4:05" duration_components = [0, 4, 5] explicit = true keywords = ["salt", "pepper", "shaker", "exciting"] new_feed_url = "http://newlocation.com/example.rss" owner = {:name => "John Doe", :email => "john.doe@example.com"} subtitle = "A show about everything" summary = "All About Everything is a show about " + "everything. Each week we dive into any " + "subject known to man and talk about it " + "as much as we can. Look for our Podcast " + "in the iTunes Music Store" feed = RSS::Maker.make("rss2.0") do |maker| setup_dummy_channel(maker) setup_dummy_item(maker) channel = maker.channel channel.itunes_author = author channel.itunes_block = block categories.each do |category| channel.itunes_categories.new_category.text = category end channel.itunes_image = image channel.itunes_explicit = explicit channel.itunes_keywords = keywords channel.itunes_owner.itunes_name = owner[:name] channel.itunes_owner.itunes_email = owner[:email] channel.itunes_subtitle = subtitle channel.itunes_summary = summary item = maker.items.last item.itunes_author = author item.itunes_block = block item.itunes_duration = duration item.itunes_explicit = explicit item.itunes_keywords = keywords item.itunes_subtitle = subtitle item.itunes_summary = summary end assert_not_nil(feed) new_feed = RSS::Maker.make("rss2.0") do |maker| feed.setup_maker(maker) end assert_not_nil(new_feed) channel = new_feed.channel item = new_feed.items.last assert_equal(author, channel.itunes_author) assert_equal(author, item.itunes_author) assert_equal(block, channel.itunes_block?) assert_equal(block, item.itunes_block?) assert_equal(categories, collect_itunes_categories(channel.itunes_categories)) assert_equal(image, channel.itunes_image.href) assert_equal(duration_components, [item.itunes_duration.hour, item.itunes_duration.minute, item.itunes_duration.second]) assert_equal(explicit, channel.itunes_explicit?) assert_equal(explicit, item.itunes_explicit?) assert_equal(keywords, channel.itunes_keywords) assert_equal(keywords, item.itunes_keywords) assert_equal(owner, { :name => channel.itunes_owner.itunes_name, :email => channel.itunes_owner.itunes_email }) assert_equal(subtitle, channel.itunes_subtitle) assert_equal(subtitle, item.itunes_subtitle) assert_equal(summary, channel.itunes_summary) assert_equal(summary, item.itunes_summary) end def test_setup_maker_with_nested_categories categories = [["Arts & Entertainment", "Games"], ["Technology", "Computers"], "Audio Blogs"] feed = RSS::Maker.make("rss2.0") do |maker| setup_dummy_channel(maker) setup_dummy_item(maker) channel = maker.channel categories.each do |category| target = channel.itunes_categories if category.is_a?(Array) category.each do |sub_category| target = target.new_category target.text = sub_category end else target.new_category.text = category end end end assert_not_nil(feed) new_feed = RSS::Maker.make("rss2.0") do |maker| feed.setup_maker(maker) end assert_not_nil(new_feed) channel = new_feed.channel assert_equal(categories, collect_itunes_categories(channel.itunes_categories)) end private def collect_itunes_categories(categories) categories.collect do |c| rest = collect_itunes_categories(c.itunes_categories) if rest.empty? c.text else [c.text, *rest] end end end end end