summaryrefslogtreecommitdiff
path: root/test/rss/test_setup_maker_itunes.rb
blob: 246fecf4c0fb4a5ce280c82de705dc8496873ec1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
require_relative "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"]
      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