ruby-tmdb3 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/MIT-LICENSE +21 -0
- data/README.rdoc +105 -0
- data/Rakefile +46 -0
- data/VERSION +1 -0
- data/lib/ruby-tmdb3/tmdb.rb +133 -0
- data/lib/ruby-tmdb3/tmdb_cast.rb +56 -0
- data/lib/ruby-tmdb3/tmdb_movie.rb +60 -0
- data/lib/ruby-tmdb3.rb +8 -0
- data/ruby-tmdb3.gemspec +74 -0
- data/test/fixtures/blank_result.txt +15 -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 +15 -0
- data/test/fixtures/movie_imdb_lookup.txt +15 -0
- data/test/fixtures/movie_search.txt +15 -0
- data/test/fixtures/person_get_info.txt +15 -0
- data/test/fixtures/person_search.txt +15 -0
- data/test/setup/setup_api_key.rb +10 -0
- data/test/setup/test_unit_extensions.rb +21 -0
- data/test/setup/url_mocks.rb +46 -0
- data/test/test_helper.rb +21 -0
- data/test/unit/test_direct_require.rb +25 -0
- data/test/unit/tmdb_cast_test.rb +124 -0
- data/test/unit/tmdb_movie_test.rb +158 -0
- data/test/unit/tmdb_test.rb +180 -0
- metadata +139 -0
@@ -0,0 +1,15 @@
|
|
1
|
+
HTTP/1.1 200 OK
|
2
|
+
Server: nginx
|
3
|
+
Date: Mon, 23 Aug 2010 16:39:45 GMT
|
4
|
+
Content-Type: text/json; charset=utf-8
|
5
|
+
Transfer-Encoding: chunked
|
6
|
+
Connection: keep-alive
|
7
|
+
Keep-Alive: timeout=20
|
8
|
+
Status: 200 OK
|
9
|
+
Cache-Control: public, max-age=21600
|
10
|
+
X-Varnish: 2542104567 2542101419
|
11
|
+
Age: 36
|
12
|
+
Via: 1.1 varnish
|
13
|
+
X-Cache: HIT
|
14
|
+
|
15
|
+
{"page":1,"results":[{"adult":false,"id":558629,"name":"Vince","profile_path":null},{"adult":false,"id":1905,"name":"Vincent Price","profile_path":"/w9wcf7hWLD2I2K0PojJaqd9vbHL.jpg"},{"adult":false,"id":1925,"name":"Vincent Cassel","profile_path":"/dai7LAxPyohPlIO5WYrKkNqO8Wu.jpg"},{"adult":false,"id":4937,"name":"Vince Vaughn","profile_path":"/vTIHDiSvIm3HU93JDGCstFwNGxI.jpg"},{"adult":false,"id":38231,"name":"June Vincent","profile_path":"/b0SZNSaOzmKQm4UOss6SAxTpktT.jpg"},{"adult":false,"id":7132,"name":"Vincent D'Onofrio","profile_path":"/kmoj1mZVNTGDZjWKKPp1xKftC9Z.jpg"},{"adult":false,"id":3418,"name":"Vincent Schiavelli","profile_path":"/q2fEosVlli2T8k5db7c7xueNTtc.jpg"},{"adult":false,"id":9831,"name":"Vincent Regan","profile_path":"/tiyjPHwmX8dMMfx0F8HUpXyLHeY.jpg"},{"adult":false,"id":7164,"name":"Frank Vincent","profile_path":null},{"adult":false,"id":52646,"name":"Vincent Kartheiser","profile_path":"/ePnbREiwxNeMLNLVIkJWY6ODRyd.jpg"},{"adult":false,"id":14830,"name":"Vincent Gardenia","profile_path":"/g7iwqHaaIKh5lSTW39pXT0OOXVC.jpg"},{"adult":false,"id":54233,"name":"Vincent Rottiers","profile_path":"/iqwHkmc6ip4cbLS7pz6RACCiVCO.jpg"},{"adult":false,"id":1141,"name":"Hélène Vincent","profile_path":null},{"adult":false,"id":84458,"name":"Vincent Miller","profile_path":null},{"adult":false,"id":24595,"name":"Vincenzo Nicoli","profile_path":null},{"adult":false,"id":39152,"name":"Yves Vincent","profile_path":null},{"adult":false,"id":54268,"name":"Vince Gerardis","profile_path":null},{"adult":false,"id":76825,"name":"Vincent Desagnat","profile_path":"/chkXB8vpO0NuR66Wi0tGfVKnuBX.jpg"},{"adult":false,"id":575079,"name":"Vincent E. Toto","profile_path":null},{"adult":false,"id":1983,"name":"Vincent Laresca","profile_path":"/sFvw7EIWb84vzcRFRY2LknRFxvI.jpg"}],"total_pages":28,"total_results":550}
|
@@ -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,46 @@
|
|
1
|
+
def register_api_url_stubs
|
2
|
+
unless(TEST_LIVE_API)
|
3
|
+
|
4
|
+
File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "movie_search.txt")) do |file|
|
5
|
+
stub_request(:get, Regexp.new(Tmdb.base_api_url + "search/movie" + ".*")).to_return(file)
|
6
|
+
end
|
7
|
+
|
8
|
+
File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "movie_get_info.txt")) do |file|
|
9
|
+
stub_request(:get, Regexp.new(Tmdb.base_api_url + "movie/" + ".*")).to_return(file)
|
10
|
+
end
|
11
|
+
|
12
|
+
File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "movie_imdb_lookup.txt")) do |file|
|
13
|
+
stub_request(:get, Regexp.new(Tmdb.base_api_url + "movie/tt" + ".*")).to_return(file)
|
14
|
+
end
|
15
|
+
|
16
|
+
File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "person_get_info.txt")) do |file|
|
17
|
+
stub_request(:get, Regexp.new(Tmdb.base_api_url + "person/" + ".*")).to_return(file)
|
18
|
+
end
|
19
|
+
|
20
|
+
File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "person_search.txt")) do |file|
|
21
|
+
stub_request(:get, Regexp.new(Tmdb.base_api_url + "search/person" + ".*")).to_return(file)
|
22
|
+
end
|
23
|
+
|
24
|
+
File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "incorrect_api_url.txt")) do |file|
|
25
|
+
stub_request(:get, Regexp.new(Tmdb.base_api_url + "Movie.blarg/" + ".*")).to_return(file)
|
26
|
+
end
|
27
|
+
|
28
|
+
File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "example_com.txt")) do |file|
|
29
|
+
stub_request(:get, Regexp.new("http://example.com.*")).to_return(file)
|
30
|
+
end
|
31
|
+
|
32
|
+
File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "image.jpg")) do |file|
|
33
|
+
stub_request(:get, Regexp.new('http://i[0-9].themoviedb.org/[backdrops|posters|profiles].*')).to_return(file)
|
34
|
+
end
|
35
|
+
|
36
|
+
File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "image.jpg")) do |file|
|
37
|
+
stub_request(:get, Regexp.new('http://hwcdn.themoviedb.org/[backdrops|posters|profiles].*')).to_return(file)
|
38
|
+
end
|
39
|
+
|
40
|
+
File.open(File.join(File.dirname(__FILE__), "..", "fixtures", "blank_result.txt")) do |file|
|
41
|
+
stub_request(:get, Regexp.new("item_not_found$")).to_return(file)
|
42
|
+
end
|
43
|
+
|
44
|
+
stub_request(:get, 'http://thisisaurlthatdoesntexist.co.nz').to_return(:body => "", :status => 404, :headers => {'content-length' => 0})
|
45
|
+
end
|
46
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
TEST_LIVE_API = false
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'test/unit'
|
5
|
+
require 'mocha'
|
6
|
+
|
7
|
+
unless(TEST_LIVE_API)
|
8
|
+
require 'webmock/test_unit'
|
9
|
+
include WebMock::API
|
10
|
+
end
|
11
|
+
|
12
|
+
require_files = []
|
13
|
+
require_files << File.join(File.dirname(__FILE__), '..', 'lib', 'ruby-tmdb3.rb')
|
14
|
+
require_files.concat Dir[File.join(File.dirname(__FILE__), 'setup', '*.rb')]
|
15
|
+
|
16
|
+
require_files.each do |file|
|
17
|
+
require File.expand_path(file)
|
18
|
+
end
|
19
|
+
|
20
|
+
#load(File.join('unit', 'test_direct_require.rb'), true)
|
21
|
+
system('ruby ' + File.expand_path(File.join(File.dirname(__FILE__), 'unit', 'test_direct_require.rb')))
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require "test/unit"
|
2
|
+
|
3
|
+
require_files = []
|
4
|
+
require_files << File.join(File.dirname(__FILE__), "..", "..", "lib", "ruby-tmdb3.rb")
|
5
|
+
require_files.concat Dir[File.join(File.dirname(__FILE__), '..', 'setup', '*.rb')]
|
6
|
+
|
7
|
+
require_files.each do |file|
|
8
|
+
require File.expand_path(file)
|
9
|
+
end
|
10
|
+
|
11
|
+
class DirectRequireTest < Test::Unit::TestCase
|
12
|
+
|
13
|
+
test "TmdbMovie should not raise exception when directly required without using rubygems" do
|
14
|
+
assert_nothing_raised do
|
15
|
+
TmdbMovie.find(:id => 187)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
test "TmdbCast should not raise exception when directly required without using rubygems" do
|
20
|
+
assert_nothing_raised do
|
21
|
+
TmdbCast.find(:id => 287)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,124 @@
|
|
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 "search that returns no results should create empty array" do
|
10
|
+
movie = TmdbCast.find(:name => "item_not_found")
|
11
|
+
assert_equal [], movie
|
12
|
+
end
|
13
|
+
|
14
|
+
test "cast data should be able to be dumped and re-loaded" do
|
15
|
+
assert_nothing_raised do
|
16
|
+
cast = TmdbCast.find(:id => 287)
|
17
|
+
TmdbCast.new(cast.raw_data)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
test "find by id should return full cast data" do
|
22
|
+
cast = TmdbCast.find(:id => 287)
|
23
|
+
assert_cast_methodized(cast, 287)
|
24
|
+
end
|
25
|
+
|
26
|
+
test "two cast objects with same data should be equal" do
|
27
|
+
cast1 = TmdbCast.find(:id => 287, :limit => 1)
|
28
|
+
cast2 = TmdbCast.find(:id => 287, :limit => 1)
|
29
|
+
assert_equal cast1, cast2
|
30
|
+
end
|
31
|
+
|
32
|
+
test "find by name should return full cast data when :expand_results = true" do
|
33
|
+
cast = TmdbCast.find(:name => "Brad Pitt", :expand_results => true)
|
34
|
+
cast = cast.first if cast.class == Array
|
35
|
+
assert_cast_methodized(cast, 287)
|
36
|
+
end
|
37
|
+
|
38
|
+
test "should raise exception if no arguments supplied to find" do
|
39
|
+
assert_raise ArgumentError do
|
40
|
+
TmdbCast.find()
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
test "find by id should return a single cast member" do
|
45
|
+
assert_kind_of OpenStruct, TmdbCast.find(:id => 287)
|
46
|
+
end
|
47
|
+
|
48
|
+
test "find by name should return an array of cast members" do
|
49
|
+
cast_members = TmdbCast.find(:name => "vince")
|
50
|
+
assert_kind_of Array, cast_members
|
51
|
+
cast_members.each do |actor|
|
52
|
+
assert_kind_of OpenStruct, actor
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
test "should raise error if limit is smaller than 1" do
|
57
|
+
[0, -1, -100].each do |limit|
|
58
|
+
assert_raise ArgumentError do
|
59
|
+
TmdbCast.find(:name => "vince", :limit => limit)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
test "should raise error if limit is not an integer" do
|
65
|
+
[1.001, "1.2", "hello", [1,2,3], {:test => "1"}].each do |limit|
|
66
|
+
assert_raise ArgumentError do
|
67
|
+
TmdbCast.find(:name => "vince", :limit => limit)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
test "should only return a single item if limit=1" do
|
73
|
+
actor = TmdbCast.find(:name => "Vince", :limit => 1)
|
74
|
+
assert_kind_of OpenStruct, actor
|
75
|
+
end
|
76
|
+
|
77
|
+
test "should return X items if limit=X" do
|
78
|
+
(2..5).each do |x|
|
79
|
+
actors = TmdbCast.find(:name => "Vince", :limit => x)
|
80
|
+
assert_kind_of Array, actors
|
81
|
+
assert_equal x, actors.length
|
82
|
+
actors.each do |actor|
|
83
|
+
assert_kind_of OpenStruct, actor
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
test "should not pass language to Tmdb.api_call if language is not supplied" do
|
89
|
+
Tmdb.expects(:api_call).with("person", {id: "1"}, nil).returns(nil)
|
90
|
+
Tmdb.expects(:api_call).with("search/person", {query: "1"}, nil).returns(nil)
|
91
|
+
TmdbCast.find(:id => 1, :name => 1)
|
92
|
+
end
|
93
|
+
|
94
|
+
test "should pass through language to Tmdb.api_call when language is supplied" do
|
95
|
+
Tmdb.expects(:api_call).with("person", {id: "1"}, "foo").returns(nil)
|
96
|
+
Tmdb.expects(:api_call).with("search/person", {query: "1"}, "foo").returns(nil)
|
97
|
+
TmdbCast.find(:id => 1, :name => 1, :language => "foo")
|
98
|
+
end
|
99
|
+
|
100
|
+
test "TmdbCast.new should raise error if supplied with raw data for cast member that doesn't exist" do
|
101
|
+
Tmdb.expects(:api_call).with("person", {id: "999999999999"}, nil).returns(nil)
|
102
|
+
assert_raise ArgumentError do
|
103
|
+
TmdbCast.new({"id" => 999999999999}, true)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
private
|
108
|
+
|
109
|
+
def assert_cast_methodized(actor, cast_id)
|
110
|
+
@cast_data = Tmdb.api_call("person", {id: cast_id.to_s})
|
111
|
+
assert_equal @cast_data["adult"], actor.adult
|
112
|
+
assert_equal @cast_data["also_known_as"], actor.also_known_as
|
113
|
+
assert_equal @cast_data["biography"], actor.biography
|
114
|
+
assert_equal @cast_data["birthday"], actor.birthday
|
115
|
+
assert_equal @cast_data["biography"], actor.biography
|
116
|
+
assert_equal @cast_data["deathday"], actor.deathday
|
117
|
+
assert_equal @cast_data["homepage"], actor.homepage
|
118
|
+
assert_equal @cast_data["id"], actor.id
|
119
|
+
assert_equal @cast_data["name"], actor.name
|
120
|
+
assert_equal @cast_data["place_of_birth"], actor.place_of_birth
|
121
|
+
assert_equal @cast_data["profile_path"], actor.profile_path
|
122
|
+
end
|
123
|
+
|
124
|
+
end
|
@@ -0,0 +1,158 @@
|
|
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 "search that returns no results should create empty array" do
|
10
|
+
movie = TmdbMovie.find(:title => "item_not_found")
|
11
|
+
assert_equal [], movie
|
12
|
+
end
|
13
|
+
|
14
|
+
test "movie should be able to be dumped and re-loaded" do
|
15
|
+
assert_nothing_raised do
|
16
|
+
movie = TmdbMovie.find(:id => 187)
|
17
|
+
TmdbMovie.new(movie.raw_data)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
test "find by id should return the full movie data" do
|
22
|
+
movie = TmdbMovie.find(:id => 187)
|
23
|
+
assert_movie_methodized(movie, 187)
|
24
|
+
end
|
25
|
+
|
26
|
+
test "movies with same data should be seen as equal" do
|
27
|
+
movie1 = TmdbMovie.find(:id => 187, :limit => 1)
|
28
|
+
movie2 = TmdbMovie.find(:id => 187, :limit => 1)
|
29
|
+
assert_equal movie1, movie2
|
30
|
+
end
|
31
|
+
|
32
|
+
test "find by imdb should return the full movie data" do
|
33
|
+
movie = TmdbMovie.find(:imdb => "tt0401792")
|
34
|
+
assert_movie_methodized(movie, 187)
|
35
|
+
end
|
36
|
+
|
37
|
+
test "find by title should return the full movie data when expand_results set to true" do
|
38
|
+
movie = TmdbMovie.find(:title => "Sin City", :limit => 1, :expand_results => true)
|
39
|
+
assert_movie_methodized(movie, 187)
|
40
|
+
end
|
41
|
+
|
42
|
+
test "should raise exception if no arguments supplied to find" do
|
43
|
+
assert_raise ArgumentError do
|
44
|
+
TmdbMovie.find()
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
test "find by id should return a single movie" do
|
49
|
+
assert_kind_of OpenStruct, TmdbMovie.find(:id => 187)
|
50
|
+
end
|
51
|
+
|
52
|
+
test "find by imdb should return a single movie" do
|
53
|
+
assert_kind_of OpenStruct, TmdbMovie.find(:imdb => "tt0401792")
|
54
|
+
end
|
55
|
+
|
56
|
+
test "find by title should return an array of movies" do
|
57
|
+
movies = TmdbMovie.find(:title => "Iron Man")
|
58
|
+
assert_kind_of Array, movies
|
59
|
+
movies.each do |movie|
|
60
|
+
assert_kind_of OpenStruct, movie
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
test "find by title with limit=1 should return a single movie" do
|
65
|
+
assert_kind_of OpenStruct, TmdbMovie.find(:title => "Iron Man", :limit => 1)
|
66
|
+
end
|
67
|
+
|
68
|
+
test "find by title with limit=X should return an array of X movies" do
|
69
|
+
(2..5).each do |x|
|
70
|
+
movies = TmdbMovie.find(:title => "Iron Man", :limit => x)
|
71
|
+
assert_kind_of Array, movies
|
72
|
+
assert_equal x, movies.length
|
73
|
+
movies.each do |movie|
|
74
|
+
assert_kind_of OpenStruct, movie
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
test "should raise error if limit is smaller than 1" do
|
80
|
+
[0, -1, -100].each do |limit|
|
81
|
+
assert_raise ArgumentError do
|
82
|
+
TmdbMovie.find(:title => "Iron Man", :limit => limit)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
test "should raise error if limit is not an integer" do
|
88
|
+
[1.001, "1.2", "hello", [1,2,3], {:test => "1"}].each do |limit|
|
89
|
+
assert_raise ArgumentError do
|
90
|
+
TmdbMovie.find(:title => "Iron Man", :limit => limit)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
test "find should not pass language to Tmdb.api_call if language is not supplied" do
|
96
|
+
Tmdb.expects(:api_call).with("movie", {id: "1"}, nil).twice
|
97
|
+
Tmdb.expects(:api_call).with("search/movie", {query: "1"}, nil)
|
98
|
+
TmdbMovie.find(:id => 1, :imdb => 1, :title => 1)
|
99
|
+
end
|
100
|
+
|
101
|
+
test "find should pass through language to Tmdb.api_call when language is supplied" do
|
102
|
+
Tmdb.expects(:api_call).with("movie", {id: "1"}, "foo").twice
|
103
|
+
Tmdb.expects(:api_call).with("search/movie", {query: "1"}, "foo")
|
104
|
+
TmdbMovie.find(:id => 1, :imdb => 1, :title => 1, :language => "foo")
|
105
|
+
end
|
106
|
+
|
107
|
+
test "TmdbMovie.new should raise error if supplied with raw data for movie that doesn't exist" do
|
108
|
+
Tmdb.expects(:api_call).with("movie", {id: "999999999999"}, nil).returns(nil)
|
109
|
+
assert_raise ArgumentError do
|
110
|
+
TmdbMovie.new({"id" => 999999999999}, true)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
private
|
115
|
+
|
116
|
+
def assert_movie_methodized(movie, movie_id)
|
117
|
+
@movie_data = Tmdb.api_call("movie", {id: movie_id.to_s})
|
118
|
+
assert_equal @movie_data["adult"], movie.adult
|
119
|
+
assert_equal @movie_data["budget"], movie.budget
|
120
|
+
assert_equal @movie_data["homepage"], movie.homepage
|
121
|
+
assert_equal @movie_data["id"], movie.id
|
122
|
+
assert_equal @movie_data["imdb_id"], movie.imdb_id
|
123
|
+
assert_equal @movie_data["original_title"], movie.original_title
|
124
|
+
assert_equal @movie_data["overview"], movie.overview
|
125
|
+
assert_equal @movie_data["popularity"], movie.popularity
|
126
|
+
assert_equal @movie_data["poster_path"], movie.poster_path
|
127
|
+
assert_equal @movie_data["release_date"], movie.release_date
|
128
|
+
assert_equal @movie_data["revenue"], movie.revenue
|
129
|
+
assert_equal @movie_data["runtime"], movie.runtime
|
130
|
+
assert_equal @movie_data["tagline"], movie.tagline
|
131
|
+
assert_equal @movie_data["title"], movie.title
|
132
|
+
assert_equal @movie_data["vote_average"], movie.vote_average
|
133
|
+
assert_equal @movie_data["vote_count"], movie.vote_count
|
134
|
+
|
135
|
+
assert_equal @movie_data["belongs_to_collection"]["id"], movie.belongs_to_collection.id
|
136
|
+
assert_equal @movie_data["belongs_to_collection"]["name"], movie.belongs_to_collection.name
|
137
|
+
assert_equal @movie_data["belongs_to_collection"]["poster_path"], movie.belongs_to_collection.poster_path
|
138
|
+
assert_equal @movie_data["belongs_to_collection"]["backdrop_path"], movie.belongs_to_collection.backdrop_path
|
139
|
+
|
140
|
+
@movie_data["genres"].each_index do |x|
|
141
|
+
assert_equal @movie_data["genres"][x]["id"], movie.genres[x].id
|
142
|
+
assert_equal @movie_data["genres"][x]["name"], movie.genres[x].name
|
143
|
+
end
|
144
|
+
@movie_data["production_companies"].each_index do |x|
|
145
|
+
assert_equal @movie_data["production_companies"][x]["name"], movie.production_companies[x].name
|
146
|
+
assert_equal @movie_data["production_companies"][x]["id"], movie.production_companies[x].id
|
147
|
+
end
|
148
|
+
@movie_data["production_countries"].each_index do |x|
|
149
|
+
assert_equal @movie_data["production_countries"][x]["iso_3166_1"], movie.production_countries[x].iso_3166_1
|
150
|
+
assert_equal @movie_data["production_countries"][x]["name"], movie.production_countries[x].name
|
151
|
+
end
|
152
|
+
@movie_data["spoken_languages"].each_index do |x|
|
153
|
+
assert_equal @movie_data["spoken_languages"][x]["iso_639_1"], movie.spoken_languages[x].iso_639_1
|
154
|
+
assert_equal @movie_data["spoken_languages"][x]["name"], movie.spoken_languages[x].name
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
end
|
@@ -0,0 +1,180 @@
|
|
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
|
+
@@old_default_language = Tmdb.default_language
|
8
|
+
end
|
9
|
+
|
10
|
+
def teardown
|
11
|
+
Tmdb.default_language = @@old_default_language
|
12
|
+
end
|
13
|
+
|
14
|
+
test "should allow setting and getting of api_key" do
|
15
|
+
old_api_key = Tmdb.api_key
|
16
|
+
api_key = "test1234567890"
|
17
|
+
Tmdb.api_key = api_key
|
18
|
+
assert_equal Tmdb.api_key, api_key
|
19
|
+
Tmdb.api_key = old_api_key
|
20
|
+
end
|
21
|
+
|
22
|
+
test "language should default to 'en'" do
|
23
|
+
assert_equal "en", Tmdb.default_language
|
24
|
+
end
|
25
|
+
|
26
|
+
test "should allow setting and getting of language" do
|
27
|
+
old_language = Tmdb.default_language
|
28
|
+
new_language = "blah"
|
29
|
+
Tmdb.default_language = new_language
|
30
|
+
assert_equal new_language, Tmdb.default_language
|
31
|
+
end
|
32
|
+
|
33
|
+
test "should return base API url" do
|
34
|
+
assert_equal "http://api.themoviedb.org/3/", Tmdb.base_api_url
|
35
|
+
end
|
36
|
+
|
37
|
+
test "get url returns a response object" do
|
38
|
+
test_response = Tmdb.get_url("http://example.com/")
|
39
|
+
assert_equal 200, test_response.code.to_i
|
40
|
+
end
|
41
|
+
|
42
|
+
test "getting nonexistent URL returns response object" do
|
43
|
+
test_response = Tmdb.get_url('http://thisisaurlthatdoesntexist.co.nz')
|
44
|
+
assert_equal 404, test_response.code.to_i
|
45
|
+
end
|
46
|
+
|
47
|
+
test "API call without explicit language setting should use default language" do
|
48
|
+
method = "search/movie"
|
49
|
+
data = "hello"
|
50
|
+
Tmdb.default_language = "es"
|
51
|
+
url = Tmdb.base_api_url + method + '?api_key=' + Tmdb.api_key + '&language=' + Tmdb.default_language + '&query=' + CGI::escape(data.to_s)
|
52
|
+
mock_response = stub(:code => "200", :body => '{"page":1,"results":[],"total_pages":0,"total_results":0}')
|
53
|
+
Tmdb.expects(:get_url).with(url).returns(mock_response)
|
54
|
+
Tmdb.api_call(method, {query: data})
|
55
|
+
end
|
56
|
+
|
57
|
+
test "API call with explicit language setting should override default language" do
|
58
|
+
method = "movie"
|
59
|
+
data = "hello"
|
60
|
+
language = "blah"
|
61
|
+
url = Tmdb.base_api_url + method + "?api_key=" + Tmdb.api_key + "&language=" + language + '&query=' + CGI::escape(data.to_s)
|
62
|
+
mock_response = stub(:code => "200", :body => '{"page":1,"results":[],"total_pages":0,"total_results":0}')
|
63
|
+
Tmdb.expects(:get_url).with(url).returns(mock_response)
|
64
|
+
Tmdb.api_call(method, {query: data}, language)
|
65
|
+
end
|
66
|
+
|
67
|
+
test "api_call should raise exception if api_key is not set" do
|
68
|
+
old_api_key = Tmdb.api_key
|
69
|
+
Tmdb.api_key = ""
|
70
|
+
assert_raises ArgumentError do
|
71
|
+
Tmdb.api_call('Movie.search', 'Transformers')
|
72
|
+
end
|
73
|
+
Tmdb.api_key = old_api_key
|
74
|
+
end
|
75
|
+
|
76
|
+
test "should perform search/movie API call and return a Hash with an array of results" do
|
77
|
+
movies = Tmdb.api_call("search/movie", {query: "Transformers"})
|
78
|
+
assert_kind_of Hash, movies
|
79
|
+
assert_kind_of Array, movies["results"]
|
80
|
+
movies["results"].each do |movie|
|
81
|
+
assert_kind_of Hash, movie
|
82
|
+
%w(original_title id).each do |item|
|
83
|
+
assert movie[item]
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
test "should perform movie API call and return a single result" do
|
89
|
+
result = Tmdb.api_call("movie", {id: "187"})
|
90
|
+
assert_kind_of Hash, result
|
91
|
+
%w(original_title id).each do |item|
|
92
|
+
assert_not_nil result[item]
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
test "should perform Movie.imdbLookup API call and return a single result" do
|
97
|
+
result = Tmdb.api_call("movie", {id: "tt0401792"})
|
98
|
+
assert_kind_of Hash, result
|
99
|
+
%w(original_title id).each do |item|
|
100
|
+
assert result[item]
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
test "should perform person API call and return a single result" do
|
105
|
+
result = Tmdb.api_call("person", {id: 287})
|
106
|
+
assert_kind_of Hash, result
|
107
|
+
%w(homepage id name).each do |item|
|
108
|
+
assert_not_nil result[item]
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
test "should perform search/person API call and return a Hash with an array of results" do
|
113
|
+
people = Tmdb.api_call("search/person", {query: "vince"})
|
114
|
+
assert_kind_of Array, people["results"]
|
115
|
+
people["results"].each do |person|
|
116
|
+
assert_kind_of Hash, person
|
117
|
+
%w(id name).each do |item|
|
118
|
+
assert_not_nil person[item]
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
test "API call that returns 404 should raise exception" do
|
124
|
+
assert_raise ArgumentError do
|
125
|
+
movies = Tmdb.api_call('Movie.blarg', 'Transformers')
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
test "API call that finds no results should return nil" do
|
130
|
+
movies = Tmdb.api_call('search/movie', {query: "item_not_found"})
|
131
|
+
assert_nil movies
|
132
|
+
end
|
133
|
+
|
134
|
+
test "API call cache should not be changed when data altered in the receiving method" do
|
135
|
+
person = Tmdb.api_call("person", {id: 287})
|
136
|
+
assert_not_nil person[person.keys[0]]
|
137
|
+
person[person.keys[0]] = nil
|
138
|
+
person = Tmdb.api_call("person", {id: 287})
|
139
|
+
assert_not_nil person[person.keys[0]]
|
140
|
+
end
|
141
|
+
|
142
|
+
test "data_to_object should create object from nested data structures" do
|
143
|
+
test_data = {
|
144
|
+
:test1 => [
|
145
|
+
1,2,3,4
|
146
|
+
],
|
147
|
+
:test2 => 1
|
148
|
+
}
|
149
|
+
test_object = Tmdb.data_to_object(test_data)
|
150
|
+
assert_nothing_raised do
|
151
|
+
assert_equal [1,2,3,4], test_object.test1
|
152
|
+
assert_equal 1, test_object.test2
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
test "data_to_object should include raw_data method that returns original data" do
|
157
|
+
test_data = {
|
158
|
+
:test1 => [1,2,3]
|
159
|
+
}
|
160
|
+
test_object = Tmdb.data_to_object(test_data)
|
161
|
+
assert_equal test_object.raw_data, test_data
|
162
|
+
end
|
163
|
+
|
164
|
+
test "data_to_object should convert arrays containing images to nicer format" do
|
165
|
+
test_data = {
|
166
|
+
"backdrops" => [
|
167
|
+
{
|
168
|
+
"image" => {
|
169
|
+
:test => 1
|
170
|
+
}
|
171
|
+
}
|
172
|
+
]
|
173
|
+
}
|
174
|
+
test_object = Tmdb.data_to_object(test_data)
|
175
|
+
assert_nothing_raised do
|
176
|
+
assert_equal 1, test_object.backdrops[0].test
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
end
|