ruby-tmdb 0.0.19
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +20 -0
- data/README.rdoc +58 -0
- data/Rakefile +43 -0
- data/VERSION +1 -0
- data/lib/ruby-tmdb/tmdb.rb +50 -0
- data/lib/ruby-tmdb/tmdb_cast.rb +76 -0
- data/lib/ruby-tmdb/tmdb_movie.rb +84 -0
- data/lib/ruby-tmdb.rb +6 -0
- data/ruby-tmdb.gemspec +72 -0
- data/test/fixtures/example_com.txt +25 -0
- data/test/fixtures/image.jpg +0 -0
- data/test/fixtures/incorrect_api_url.txt +13 -0
- data/test/fixtures/movie_get_info.txt +1125 -0
- data/test/fixtures/movie_imdb_lookup.txt +886 -0
- data/test/fixtures/movie_search.txt +414 -0
- data/test/fixtures/person_get_info.txt +285 -0
- data/test/fixtures/person_search.txt +232 -0
- data/test/setup/.gitignore +1 -0
- data/test/setup/test_unit_extensions.rb +21 -0
- data/test/setup/url_mocks.rb +37 -0
- data/test/test_helper.rb +23 -0
- data/test/unit/tmdb_cast_test.rb +107 -0
- data/test/unit/tmdb_movie_test.rb +151 -0
- data/test/unit/tmdb_test.rb +105 -0
- metadata +111 -0
@@ -0,0 +1,232 @@
|
|
1
|
+
HTTP/1.1 200 OK
|
2
|
+
Status: 200 OK
|
3
|
+
Content-Type: text/x-yaml; charset=utf-8
|
4
|
+
Transfer-Encoding: chunked
|
5
|
+
Date: Sun, 16 May 2010 17:55:18 GMT
|
6
|
+
X-Varnish: 4020117426
|
7
|
+
Age: 0
|
8
|
+
Via: 1.1 varnish
|
9
|
+
Connection: keep-alive
|
10
|
+
X-Cache: MISS
|
11
|
+
|
12
|
+
---
|
13
|
+
- score: 25
|
14
|
+
popularity: 3
|
15
|
+
name: Vince Locke
|
16
|
+
id: 4484
|
17
|
+
biography: ""
|
18
|
+
url: http://www.themoviedb.org/person/4484
|
19
|
+
profile: []
|
20
|
+
|
21
|
+
- score: 24
|
22
|
+
popularity: 3
|
23
|
+
name: Vince Deadrick Jr.
|
24
|
+
id: 12879
|
25
|
+
biography: ""
|
26
|
+
url: http://www.themoviedb.org/person/12879
|
27
|
+
profile: []
|
28
|
+
|
29
|
+
- score: 23
|
30
|
+
popularity: 3
|
31
|
+
name: Vince Trankina
|
32
|
+
id: 91412
|
33
|
+
biography: ""
|
34
|
+
url: http://www.themoviedb.org/person/91412
|
35
|
+
profile: []
|
36
|
+
|
37
|
+
- score: 22
|
38
|
+
popularity: 3
|
39
|
+
name: Pruitt Taylor Vince
|
40
|
+
id: 3201
|
41
|
+
biography: ""
|
42
|
+
url: http://www.themoviedb.org/person/3201
|
43
|
+
profile: []
|
44
|
+
|
45
|
+
- score: 21
|
46
|
+
popularity: 3
|
47
|
+
name: Vince Edwards
|
48
|
+
id: 3337
|
49
|
+
biography: ""
|
50
|
+
url: http://www.themoviedb.org/person/3337
|
51
|
+
profile: []
|
52
|
+
|
53
|
+
- score: 20
|
54
|
+
popularity: 3
|
55
|
+
name: Vince Vaughn
|
56
|
+
id: 4937
|
57
|
+
biography: ""
|
58
|
+
url: http://www.themoviedb.org/person/4937
|
59
|
+
profile:
|
60
|
+
- image:
|
61
|
+
type: profile
|
62
|
+
size: original
|
63
|
+
height: 1087
|
64
|
+
width: 800
|
65
|
+
url: http://i2.themoviedb.org/profiles/029/4bc9fe2c017a3c0e8b000029/vince-vaughn-original.jpg
|
66
|
+
id: 4bc9fe2c017a3c0e8b000029
|
67
|
+
- image:
|
68
|
+
type: profile
|
69
|
+
size: profile
|
70
|
+
height: 251
|
71
|
+
width: 185
|
72
|
+
url: http://i2.themoviedb.org/profiles/029/4bc9fe2c017a3c0e8b000029/vince-vaughn-profile.jpg
|
73
|
+
id: 4bc9fe2c017a3c0e8b000029
|
74
|
+
- image:
|
75
|
+
type: profile
|
76
|
+
size: thumb
|
77
|
+
height: 61
|
78
|
+
width: 45
|
79
|
+
url: http://i1.themoviedb.org/profiles/029/4bc9fe2c017a3c0e8b000029/vince-vaughn-thumb.jpg
|
80
|
+
id: 4bc9fe2c017a3c0e8b000029
|
81
|
+
- score: 19
|
82
|
+
popularity: 3
|
83
|
+
name: William Vince
|
84
|
+
id: 5358
|
85
|
+
biography: ""
|
86
|
+
url: http://www.themoviedb.org/person/5358
|
87
|
+
profile: []
|
88
|
+
|
89
|
+
- score: 18
|
90
|
+
popularity: 3
|
91
|
+
name: Vince Oddone
|
92
|
+
id: 9467
|
93
|
+
biography: ""
|
94
|
+
url: http://www.themoviedb.org/person/9467
|
95
|
+
profile: []
|
96
|
+
|
97
|
+
- score: 17
|
98
|
+
popularity: 3
|
99
|
+
name: Vince Barnett
|
100
|
+
id: 13357
|
101
|
+
biography: ""
|
102
|
+
url: http://www.themoviedb.org/person/13357
|
103
|
+
profile: []
|
104
|
+
|
105
|
+
- score: 16
|
106
|
+
popularity: 3
|
107
|
+
name: Vince DiCola
|
108
|
+
id: 16637
|
109
|
+
biography: ""
|
110
|
+
url: http://www.themoviedb.org/person/16637
|
111
|
+
profile: []
|
112
|
+
|
113
|
+
- score: 15
|
114
|
+
popularity: 3
|
115
|
+
name: Vince Palmieri
|
116
|
+
id: 19446
|
117
|
+
biography: ""
|
118
|
+
url: http://www.themoviedb.org/person/19446
|
119
|
+
profile: []
|
120
|
+
|
121
|
+
- score: 14
|
122
|
+
popularity: 3
|
123
|
+
name: Alexander Vince
|
124
|
+
id: 20058
|
125
|
+
biography: ""
|
126
|
+
url: http://www.themoviedb.org/person/20058
|
127
|
+
profile: []
|
128
|
+
|
129
|
+
- score: 13
|
130
|
+
popularity: 3
|
131
|
+
name: Barrie Vince
|
132
|
+
id: 22154
|
133
|
+
biography: ""
|
134
|
+
url: http://www.themoviedb.org/person/22154
|
135
|
+
profile: []
|
136
|
+
|
137
|
+
- score: 12
|
138
|
+
popularity: 3
|
139
|
+
name: Robert Vince
|
140
|
+
id: 25010
|
141
|
+
biography: ""
|
142
|
+
url: http://www.themoviedb.org/person/25010
|
143
|
+
profile: []
|
144
|
+
|
145
|
+
- score: 11
|
146
|
+
popularity: 3
|
147
|
+
name: Vince Desiderio
|
148
|
+
id: 27591
|
149
|
+
biography: ""
|
150
|
+
url: http://www.themoviedb.org/person/27591
|
151
|
+
profile: []
|
152
|
+
|
153
|
+
- score: 10
|
154
|
+
popularity: 3
|
155
|
+
name: Vince Giordano
|
156
|
+
id: 28009
|
157
|
+
biography: ""
|
158
|
+
url: http://www.themoviedb.org/person/28009
|
159
|
+
profile: []
|
160
|
+
|
161
|
+
- score: 9
|
162
|
+
popularity: 3
|
163
|
+
name: Pruitt Taylor Vince
|
164
|
+
id: 28411
|
165
|
+
biography: ""
|
166
|
+
url: http://www.themoviedb.org/person/28411
|
167
|
+
profile: []
|
168
|
+
|
169
|
+
- score: 8
|
170
|
+
popularity: 3
|
171
|
+
name: Vince Di Meglio
|
172
|
+
id: 29012
|
173
|
+
biography: ""
|
174
|
+
url: http://www.themoviedb.org/person/29012
|
175
|
+
profile: []
|
176
|
+
|
177
|
+
- score: 7
|
178
|
+
popularity: 3
|
179
|
+
name: Vince Murdocco
|
180
|
+
id: 33585
|
181
|
+
biography: ""
|
182
|
+
url: http://www.themoviedb.org/person/33585
|
183
|
+
profile: []
|
184
|
+
|
185
|
+
- score: 6
|
186
|
+
popularity: 3
|
187
|
+
name: Vince Martin
|
188
|
+
id: 45215
|
189
|
+
biography: ""
|
190
|
+
url: http://www.themoviedb.org/person/45215
|
191
|
+
profile: []
|
192
|
+
|
193
|
+
- score: 5
|
194
|
+
popularity: 3
|
195
|
+
name: Vince Gerardis
|
196
|
+
id: 54268
|
197
|
+
biography: ""
|
198
|
+
url: http://www.themoviedb.org/person/54268
|
199
|
+
profile: []
|
200
|
+
|
201
|
+
- score: 4
|
202
|
+
popularity: 3
|
203
|
+
name: Vince Gilligan
|
204
|
+
id: 66633
|
205
|
+
biography: ""
|
206
|
+
url: http://www.themoviedb.org/person/66633
|
207
|
+
profile: []
|
208
|
+
|
209
|
+
- score: 3
|
210
|
+
popularity: 3
|
211
|
+
name: Nicholas Vince
|
212
|
+
id: 56559
|
213
|
+
biography: ""
|
214
|
+
url: http://www.themoviedb.org/person/56559
|
215
|
+
profile: []
|
216
|
+
|
217
|
+
- score: 2
|
218
|
+
popularity: 3
|
219
|
+
name: Vince McMahon
|
220
|
+
id: 57342
|
221
|
+
biography: ""
|
222
|
+
url: http://www.themoviedb.org/person/57342
|
223
|
+
profile: []
|
224
|
+
|
225
|
+
- score: 1
|
226
|
+
popularity: 3
|
227
|
+
name: Vince Vieluf
|
228
|
+
id: 58381
|
229
|
+
biography: ""
|
230
|
+
url: http://www.themoviedb.org/person/58381
|
231
|
+
profile: []
|
232
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
tmdb_api_key.txt
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Test::Unit
|
2
|
+
# Used to fix a minor minitest/unit incompatibility in flexmock
|
3
|
+
AssertionFailedError = Class.new(StandardError)
|
4
|
+
|
5
|
+
class TestCase
|
6
|
+
|
7
|
+
def self.test(name, &block)
|
8
|
+
test_name = "test_#{name.gsub(/\s+/,'_')}".to_sym
|
9
|
+
defined = instance_method(test_name) rescue false
|
10
|
+
raise "#{test_name} is already defined in #{self}" if defined
|
11
|
+
if block_given?
|
12
|
+
define_method(test_name, &block)
|
13
|
+
else
|
14
|
+
define_method(test_name) do
|
15
|
+
flunk "No implementation provided for #{name}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
def register_api_url_stubs
|
2
|
+
unless(TEST_LIVE_API)
|
3
|
+
File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "movie_search.txt")) do |file|
|
4
|
+
stub_request(:get, Regexp.new(Tmdb.base_api_url + "Movie.search/" + ".*")).to_return(file)
|
5
|
+
end
|
6
|
+
|
7
|
+
File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "movie_get_info.txt")) do |file|
|
8
|
+
stub_request(:get, Regexp.new(Tmdb.base_api_url + "Movie.getInfo/" + ".*")).to_return(file)
|
9
|
+
end
|
10
|
+
|
11
|
+
File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "movie_imdb_lookup.txt")) do |file|
|
12
|
+
stub_request(:get, Regexp.new(Tmdb.base_api_url + "Movie.imdbLookup/" + ".*")).to_return(file)
|
13
|
+
end
|
14
|
+
|
15
|
+
File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "person_get_info.txt")) do |file|
|
16
|
+
stub_request(:get, Regexp.new(Tmdb.base_api_url + "Person.getInfo/" + ".*")).to_return(file)
|
17
|
+
end
|
18
|
+
|
19
|
+
File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "person_search.txt")) do |file|
|
20
|
+
stub_request(:get, Regexp.new(Tmdb.base_api_url + "Person.search/" + ".*")).to_return(file)
|
21
|
+
end
|
22
|
+
|
23
|
+
File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "incorrect_api_url.txt")) do |file|
|
24
|
+
stub_request(:get, Regexp.new(Tmdb.base_api_url + "Movie.blarg/" + ".*")).to_return(file)
|
25
|
+
end
|
26
|
+
|
27
|
+
File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "example_com.txt")) do |file|
|
28
|
+
stub_request(:get, Regexp.new("http://example.com.*")).to_return(file)
|
29
|
+
end
|
30
|
+
|
31
|
+
File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "image.jpg")) do |file|
|
32
|
+
stub_request(:get, Regexp.new('http://i[0-9].themoviedb.org/[backdrops|posters|profiles].*')).to_return(file)
|
33
|
+
end
|
34
|
+
|
35
|
+
stub_request(:get, 'http://thisisaurlthatdoesntexist.co.nz').to_return(:body => "", :status => 404, :headers => {'content-length' => 0})
|
36
|
+
end
|
37
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
TEST_LIVE_API = false
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'test/unit'
|
5
|
+
require 'yaml'
|
6
|
+
require 'net/http'
|
7
|
+
|
8
|
+
unless(TEST_LIVE_API)
|
9
|
+
require 'webmock/test_unit'
|
10
|
+
include WebMock
|
11
|
+
end
|
12
|
+
|
13
|
+
require_files = []
|
14
|
+
require_files << File.join(File.dirname(__FILE__), '..', 'lib', 'ruby-tmdb.rb')
|
15
|
+
require_files.concat Dir[File.join(File.dirname(__FILE__), 'setup', '*.rb')]
|
16
|
+
|
17
|
+
require_files.each do |file|
|
18
|
+
require File.expand_path(file)
|
19
|
+
end
|
20
|
+
|
21
|
+
File.open(File.join(File.dirname(__FILE__), 'setup', 'tmdb_api_key.txt')) do |file|
|
22
|
+
Tmdb.api_key = file.read
|
23
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'test_helper.rb'))
|
2
|
+
|
3
|
+
class TmdbCastTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
register_api_url_stubs
|
7
|
+
end
|
8
|
+
|
9
|
+
test "find by id should return full cast data" do
|
10
|
+
cast = TmdbCast.find(:id => 287)
|
11
|
+
assert_cast_methodized(cast, 287)
|
12
|
+
end
|
13
|
+
|
14
|
+
test "two cast objects with same data should be equal" do
|
15
|
+
cast1 = TmdbCast.find(:id => 287, :limit => 1)
|
16
|
+
cast2 = TmdbCast.find(:id => 287, :limit => 1)
|
17
|
+
assert_equal cast1, cast2
|
18
|
+
end
|
19
|
+
|
20
|
+
test "find by name should return full cast data" do
|
21
|
+
cast = TmdbCast.find(:name => "Brad Pitt").first
|
22
|
+
assert_cast_methodized(cast, 287)
|
23
|
+
end
|
24
|
+
|
25
|
+
test "should raise exception if no arguments supplied to find" do
|
26
|
+
assert_raise ArgumentError do
|
27
|
+
TmdbCast.find()
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
test "find by id should return a single cast member" do
|
32
|
+
assert_kind_of TmdbCast, TmdbCast.find(:id => 287)
|
33
|
+
end
|
34
|
+
|
35
|
+
test "find by name should return an array of cast members" do
|
36
|
+
cast_members = TmdbCast.find(:name => "vince")
|
37
|
+
assert_kind_of Array, cast_members
|
38
|
+
cast_members.each do |actor|
|
39
|
+
assert_kind_of TmdbCast, actor
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
test "should raise error if limit is smaller than 1" do
|
44
|
+
[0, -1, -100].each do |limit|
|
45
|
+
assert_raise ArgumentError do
|
46
|
+
TmdbCast.find(:name => "vince", :limit => limit)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
test "should raise error if limit is not an integer" do
|
52
|
+
[1.001, "1.2", "hello", [1,2,3], {:test => "1"}].each do |limit|
|
53
|
+
assert_raise ArgumentError do
|
54
|
+
TmdbCast.find(:name => "vince", :limit => limit)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
test "should only return a single item if limit=1" do
|
60
|
+
actor = TmdbCast.find(:name => "Vince", :limit => 1)
|
61
|
+
assert_kind_of TmdbCast, actor
|
62
|
+
end
|
63
|
+
|
64
|
+
test "should return X items if limit=X" do
|
65
|
+
(2..5).each do |x|
|
66
|
+
actors = TmdbCast.find(:name => "Vince", :limit => x)
|
67
|
+
assert_kind_of Array, actors
|
68
|
+
assert_equal x, actors.length
|
69
|
+
actors.each do |actor|
|
70
|
+
assert_kind_of TmdbCast, actor
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
private
|
76
|
+
|
77
|
+
def assert_cast_methodized(actor, cast_id)
|
78
|
+
@cast_data = Tmdb.api_call('Person.getInfo', cast_id)[0]
|
79
|
+
assert_equal @cast_data["popularity"], actor.popularity
|
80
|
+
assert_equal @cast_data["name"], actor.name
|
81
|
+
assert_equal @cast_data["known_as"], actor.known_as
|
82
|
+
assert_equal @cast_data["id"], actor.id
|
83
|
+
assert_equal @cast_data["biography"], actor.biography
|
84
|
+
assert_equal @cast_data["known_movies"], actor.known_movies
|
85
|
+
assert_equal @cast_data["birthday"], actor.birthday
|
86
|
+
assert_equal @cast_data["birthplace"], actor.birthplace
|
87
|
+
assert_equal @cast_data["url"], actor.url
|
88
|
+
@cast_data["filmography"].each_index do |x|
|
89
|
+
assert_equal @cast_data["filmography"][x]["name"], actor.filmography[x].name
|
90
|
+
assert_equal @cast_data["filmography"][x]["id"], actor.filmography[x].id
|
91
|
+
assert_equal @cast_data["filmography"][x]["job"], actor.filmography[x].job
|
92
|
+
assert_equal @cast_data["filmography"][x]["department"], actor.filmography[x].department
|
93
|
+
assert_equal @cast_data["filmography"][x]["character"], actor.filmography[x].character
|
94
|
+
assert_equal @cast_data["filmography"][x]["url"], actor.filmography[x].url
|
95
|
+
end
|
96
|
+
@cast_data["profile"].each_index do |x|
|
97
|
+
assert_equal @cast_data["profile"][x]["image"]["type"], actor.profiles[x].type
|
98
|
+
assert_equal @cast_data["profile"][x]["image"]["size"], actor.profiles[x].size
|
99
|
+
assert_equal @cast_data["profile"][x]["image"]["height"], actor.profiles[x].height
|
100
|
+
assert_equal @cast_data["profile"][x]["image"]["width"], actor.profiles[x].width
|
101
|
+
assert_equal @cast_data["profile"][x]["image"]["url"], actor.profiles[x].url
|
102
|
+
assert_equal @cast_data["profile"][x]["image"]["id"], actor.profiles[x].id
|
103
|
+
assert_equal Tmdb.get_url(@cast_data["profile"][x]["image"]["url"]).body, actor.profiles[x].data
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
@@ -0,0 +1,151 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'test_helper.rb'))
|
2
|
+
|
3
|
+
class TmdbMovieTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
register_api_url_stubs
|
7
|
+
end
|
8
|
+
|
9
|
+
test "find by id should return the full movie data" do
|
10
|
+
movie = TmdbMovie.find(:id => 187)
|
11
|
+
assert_movie_methodized(movie, 187)
|
12
|
+
end
|
13
|
+
|
14
|
+
test "movies with same data should be seen as equal" do
|
15
|
+
movie1 = TmdbMovie.find(:id => 187, :limit => 1)
|
16
|
+
movie2 = TmdbMovie.find(:id => 187, :limit => 1)
|
17
|
+
assert_equal movie1, movie2
|
18
|
+
end
|
19
|
+
|
20
|
+
test "find by imdb should return the full movie data" do
|
21
|
+
movie = TmdbMovie.find(:imdb => "tt0401792")
|
22
|
+
assert_movie_methodized(movie, 187)
|
23
|
+
end
|
24
|
+
|
25
|
+
test "find by title should return the full movie data" do
|
26
|
+
movie = TmdbMovie.find(:title => "Sin City", :limit => 1)
|
27
|
+
assert_movie_methodized(movie, 187)
|
28
|
+
end
|
29
|
+
|
30
|
+
test "should raise exception if no arguments supplied to find" do
|
31
|
+
assert_raise ArgumentError do
|
32
|
+
TmdbMovie.find()
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
test "find by id should return a single movie" do
|
37
|
+
assert_kind_of TmdbMovie, TmdbMovie.find(:id => 187)
|
38
|
+
end
|
39
|
+
|
40
|
+
test "find by imdb should return a single movie" do
|
41
|
+
assert_kind_of TmdbMovie, TmdbMovie.find(:imdb => "tt0401792")
|
42
|
+
end
|
43
|
+
|
44
|
+
test "find by title should return an array of movies" do
|
45
|
+
movies = TmdbMovie.find(:title => "Iron Man")
|
46
|
+
assert_kind_of Array, movies
|
47
|
+
movies.each do |movie|
|
48
|
+
assert_kind_of TmdbMovie, movie
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
test "find by title with limit=1 should return a single movie" do
|
53
|
+
assert_kind_of TmdbMovie, TmdbMovie.find(:title => "Iron Man", :limit => 1)
|
54
|
+
end
|
55
|
+
|
56
|
+
test "find by title with limit=X should return an array of X movies" do
|
57
|
+
(2..5).each do |x|
|
58
|
+
movies = TmdbMovie.find(:title => "Iron Man", :limit => x)
|
59
|
+
assert_kind_of Array, movies
|
60
|
+
assert_equal x, movies.length
|
61
|
+
movies.each do |movie|
|
62
|
+
assert_kind_of TmdbMovie, movie
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
test "should raise error if limit is smaller than 1" do
|
68
|
+
[0, -1, -100].each do |limit|
|
69
|
+
assert_raise ArgumentError do
|
70
|
+
TmdbMovie.find(:title => "Iron Man", :limit => limit)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
test "should raise error if limit is not an integer" do
|
76
|
+
[1.001, "1.2", "hello", [1,2,3], {:test => "1"}].each do |limit|
|
77
|
+
assert_raise ArgumentError do
|
78
|
+
TmdbMovie.find(:title => "Iron Man", :limit => limit)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
private
|
84
|
+
|
85
|
+
def assert_movie_methodized(movie, movie_id)
|
86
|
+
@movie_data = Tmdb.api_call('Movie.getInfo', movie_id)[0]
|
87
|
+
assert_equal @movie_data["popularity"], movie.popularity
|
88
|
+
assert_equal @movie_data["translated"], movie.translated
|
89
|
+
assert_equal @movie_data["language"], movie.language
|
90
|
+
assert_equal @movie_data["name"], movie.name
|
91
|
+
assert_equal @movie_data["alternative_name"], movie.alternative_name
|
92
|
+
assert_equal @movie_data["movie_type"], movie.movie_type
|
93
|
+
assert_equal @movie_data["id"], movie.id
|
94
|
+
assert_equal @movie_data["imdb_id"], movie.imdb_id
|
95
|
+
assert_equal @movie_data["url"], movie.url
|
96
|
+
assert_equal @movie_data["rating"], movie.rating
|
97
|
+
assert_equal @movie_data["tagline"], movie.tagline
|
98
|
+
assert_equal @movie_data["certification"], movie.certification
|
99
|
+
assert_equal @movie_data["overview"], movie.overview
|
100
|
+
assert_equal @movie_data["released"], movie.released
|
101
|
+
assert_equal @movie_data["runtime"], movie.runtime
|
102
|
+
assert_equal @movie_data["budget"], movie.budget
|
103
|
+
assert_equal @movie_data["revenue"], movie.revenue
|
104
|
+
assert_equal @movie_data["homepage"], movie.homepage
|
105
|
+
assert_equal @movie_data["trailer"], movie.trailer
|
106
|
+
assert_equal @movie_data["last_modified_at"], movie.last_modified_at
|
107
|
+
@movie_data["genres"].each_index do |x|
|
108
|
+
assert_equal @movie_data["genres"][x]["type"], movie.genres[x].type
|
109
|
+
assert_equal @movie_data["genres"][x]["url"], movie.genres[x].url
|
110
|
+
assert_equal @movie_data["genres"][x]["name"], movie.genres[x].name
|
111
|
+
end
|
112
|
+
@movie_data["studios"].each_index do |x|
|
113
|
+
assert_equal @movie_data["studios"][x]["url"], movie.studios[x].url
|
114
|
+
assert_equal @movie_data["studios"][x]["name"], movie.studios[x].name
|
115
|
+
end
|
116
|
+
@movie_data["countries"].each_index do |x|
|
117
|
+
assert_equal @movie_data["countries"][x]["code"], movie.countries[x].code
|
118
|
+
assert_equal @movie_data["countries"][x]["url"], movie.countries[x].url
|
119
|
+
assert_equal @movie_data["countries"][x]["name"], movie.countries[x].name
|
120
|
+
end
|
121
|
+
@movie_data["posters"].each_index do |x|
|
122
|
+
assert_equal @movie_data["posters"][x]["image"]["type"], movie.posters[x].type
|
123
|
+
assert_equal @movie_data["posters"][x]["image"]["size"], movie.posters[x].size
|
124
|
+
assert_equal @movie_data["posters"][x]["image"]["height"], movie.posters[x].height
|
125
|
+
assert_equal @movie_data["posters"][x]["image"]["width"], movie.posters[x].width
|
126
|
+
assert_equal @movie_data["posters"][x]["image"]["url"], movie.posters[x].url
|
127
|
+
assert_equal @movie_data["posters"][x]["image"]["id"], movie.posters[x].id
|
128
|
+
assert_equal Tmdb.get_url(@movie_data["posters"][x]["image"]["url"]).body, movie.posters[x].data
|
129
|
+
end
|
130
|
+
@movie_data["backdrops"].each_index do |x|
|
131
|
+
assert_equal @movie_data["backdrops"][x]["image"]["type"], movie.backdrops[x].type
|
132
|
+
assert_equal @movie_data["backdrops"][x]["image"]["size"], movie.backdrops[x].size
|
133
|
+
assert_equal @movie_data["backdrops"][x]["image"]["height"], movie.backdrops[x].height
|
134
|
+
assert_equal @movie_data["backdrops"][x]["image"]["width"], movie.backdrops[x].width
|
135
|
+
assert_equal @movie_data["backdrops"][x]["image"]["url"], movie.backdrops[x].url
|
136
|
+
assert_equal @movie_data["backdrops"][x]["image"]["id"], movie.backdrops[x].id
|
137
|
+
assert_equal Tmdb.get_url(@movie_data["backdrops"][x]["image"]["url"]).body, movie.backdrops[x].data
|
138
|
+
end
|
139
|
+
@movie_data["cast"].each_index do |x|
|
140
|
+
assert_equal @movie_data["cast"][x]["name"], movie.cast[x].name
|
141
|
+
assert_equal @movie_data["cast"][x]["job"], movie.cast[x].job
|
142
|
+
assert_equal @movie_data["cast"][x]["department"], movie.cast[x].department
|
143
|
+
assert_equal @movie_data["cast"][x]["character"], movie.cast[x].character
|
144
|
+
assert_equal @movie_data["cast"][x]["id"], movie.cast[x].id
|
145
|
+
assert_equal @movie_data["cast"][x]["url"], movie.cast[x].url
|
146
|
+
assert_equal @movie_data["cast"][x]["profile"], movie.cast[x].profile
|
147
|
+
assert_equal TmdbCast.find(:id => @movie_data["cast"][x]["id"], :limit => 1), movie.cast[x].bio
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'test_helper.rb'))
|
2
|
+
|
3
|
+
class TmdbTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
register_api_url_stubs
|
7
|
+
end
|
8
|
+
|
9
|
+
test "allows setting of api_key" do
|
10
|
+
old_api_key = Tmdb.api_key
|
11
|
+
api_key = "test1234567890"
|
12
|
+
Tmdb.api_key = api_key
|
13
|
+
assert_equal Tmdb.api_key, api_key
|
14
|
+
Tmdb.api_key = old_api_key
|
15
|
+
end
|
16
|
+
|
17
|
+
test "should return base API url" do
|
18
|
+
assert_equal "http://api.themoviedb.org/2.1/", Tmdb.base_api_url
|
19
|
+
end
|
20
|
+
|
21
|
+
test "get url returns a response object" do
|
22
|
+
test_response = Tmdb.get_url("http://example.com/")
|
23
|
+
assert_equal 200, test_response.code.to_i
|
24
|
+
end
|
25
|
+
|
26
|
+
test "getting nonexistent URL returns response object" do
|
27
|
+
test_response = Tmdb.get_url('http://thisisaurlthatdoesntexist.co.nz')
|
28
|
+
assert_equal 404, test_response.code.to_i
|
29
|
+
end
|
30
|
+
|
31
|
+
test "should perform Movie.search API call and return array of results" do
|
32
|
+
movies = Tmdb.api_call('Movie.search', 'Transformers')
|
33
|
+
assert_kind_of Array, movies
|
34
|
+
assert movies.length > 1
|
35
|
+
movies.each do |movie|
|
36
|
+
assert_kind_of Hash, movie
|
37
|
+
["url", "id", "name"].each do |item|
|
38
|
+
assert movie[item]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
test "should perform Movie.getInfo API call and return array of results" do
|
44
|
+
movies = Tmdb.api_call('Movie.getInfo', 187)
|
45
|
+
assert_kind_of Array, movies
|
46
|
+
assert movies.length == 1
|
47
|
+
movies.each do |movie|
|
48
|
+
assert_kind_of Hash, movie
|
49
|
+
["url", "id", "name"].each do |item|
|
50
|
+
assert movie[item]
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
test "should perform Movie.imdbLookup API call and return array of results" do
|
56
|
+
movies = Tmdb.api_call('Movie.imdbLookup', "tt0401792")
|
57
|
+
assert_kind_of Array, movies
|
58
|
+
assert movies.length == 1
|
59
|
+
movies.each do |movie|
|
60
|
+
assert_kind_of Hash, movie
|
61
|
+
["url", "id", "name"].each do |item|
|
62
|
+
assert movie[item]
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
test "should perform Person.getInfo API call and return array of results" do
|
68
|
+
people = Tmdb.api_call('Person.getInfo', 287)
|
69
|
+
assert_kind_of Array, people
|
70
|
+
assert people.length == 1
|
71
|
+
people.each do |person|
|
72
|
+
assert_kind_of Hash, person
|
73
|
+
["url", "id", "name"].each do |item|
|
74
|
+
assert person[item]
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
test "should perform Person.search API call and return array of results" do
|
80
|
+
people = Tmdb.api_call('Person.search', "vince")
|
81
|
+
assert_kind_of Array, people
|
82
|
+
assert people.length > 1
|
83
|
+
people.each do |person|
|
84
|
+
assert_kind_of Hash, person
|
85
|
+
["url", "id", "name"].each do |item|
|
86
|
+
assert person[item]
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
test "failed API call should return empty array" do
|
92
|
+
movies = Tmdb.api_call('Movie.blarg', 'Transformers')
|
93
|
+
assert_kind_of Array, movies
|
94
|
+
assert movies.empty?
|
95
|
+
end
|
96
|
+
|
97
|
+
test "API call cache should not be changed when data altered in the receiving method" do
|
98
|
+
person = Tmdb.api_call('Person.getInfo', 287)[0]
|
99
|
+
assert_not_nil person[person.keys[0]]
|
100
|
+
person[person.keys[0]] = nil
|
101
|
+
person = Tmdb.api_call('Person.getInfo', 287)[0]
|
102
|
+
assert_not_nil person[person.keys[0]]
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|