enceladus 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -1
  3. data/enceladus.gemspec +2 -0
  4. data/lib/enceladus/configuration/image.rb +1 -0
  5. data/lib/enceladus/exceptions.rb +8 -1
  6. data/lib/enceladus/logger.rb +57 -0
  7. data/lib/enceladus/models/movie.rb +4 -3
  8. data/lib/enceladus/models/production_company.rb +49 -1
  9. data/lib/enceladus/models/production_company_collection.rb +3 -0
  10. data/lib/enceladus/requester.rb +13 -2
  11. data/lib/enceladus/version.rb +1 -1
  12. data/lib/enceladus.rb +3 -1
  13. data/spec/enceladus/configuration/api_spec.rb +11 -2
  14. data/spec/enceladus/configuration/image_spec.rb +7 -1
  15. data/spec/enceladus/enceladus_spec.rb +1 -1
  16. data/spec/enceladus/logger_spec.rb +45 -0
  17. data/spec/enceladus/models/account_spec.rb +13 -25
  18. data/spec/enceladus/models/cast_spec.rb +1 -1
  19. data/spec/enceladus/models/guest_account_spec.rb +1 -1
  20. data/spec/enceladus/models/movie_collection_spec.rb +7 -13
  21. data/spec/enceladus/models/movie_spec.rb +20 -19
  22. data/spec/enceladus/models/production_company_spec.rb +118 -0
  23. data/spec/enceladus/requester_spec.rb +16 -0
  24. data/spec/factories/accounts.rb +10 -0
  25. data/spec/factories/authentications.rb +6 -0
  26. data/spec/factories/certifications.rb +9 -0
  27. data/spec/factories/configurations.rb +34 -0
  28. data/spec/factories/credits.rb +11 -0
  29. data/spec/factories/credits_collection.rb +6 -0
  30. data/spec/factories/errors.rb +6 -0
  31. data/spec/factories/genres.rb +6 -0
  32. data/spec/factories/guest_accounts.rb +9 -0
  33. data/spec/factories/movie_collection_resources.rb +16 -0
  34. data/spec/factories/movie_collections.rb +8 -0
  35. data/spec/factories/movies.rb +31 -0
  36. data/spec/factories/movies_production_companies.rb +6 -0
  37. data/spec/factories/production_companies.rb +11 -0
  38. data/spec/factories/production_company_collection_resources.rb +9 -0
  39. data/spec/factories/production_company_collections.rb +8 -0
  40. data/spec/factories/production_countries.rb +6 -0
  41. data/spec/factories/request_tokens.rb +9 -0
  42. data/spec/factories/sessions.rb +8 -0
  43. data/spec/factories/spoken_languages.rb +6 -0
  44. data/spec/factories/youtube_trailers.rb +8 -0
  45. data/spec/spec_helper.rb +14 -5
  46. data/spec/support/api_resource.rb +25 -0
  47. data/spec/support/responses/collection_response.rb +18 -0
  48. data/spec/support/responses/movie_collection_response.rb +2 -16
  49. data/spec/support/responses/production_company_collection_resource_response.rb +22 -0
  50. data/spec/support/responses/production_company_collection_response.rb +6 -0
  51. data/spec/support/responses/production_company_response.rb +29 -0
  52. metadata +102 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 213a0e379210786b7fe2f34705e389528491b39a
4
- data.tar.gz: 8bf86be93829ada4c36f2cc1f159dc64ac19417a
3
+ metadata.gz: 139bb385b5d027360419125fd05ef0753aca301b
4
+ data.tar.gz: 7b62151b09ee814c25e65aa638ef28cd26928a40
5
5
  SHA512:
6
- metadata.gz: 7274738561628a65878b78d7367108b8fe0f94129a3a69e98b8a7170307d585ca85e7250484082b1395027940ed4ba8294c1a084d6543d8f81b685aa1aee1216
7
- data.tar.gz: ca8e3907f7ba17770289892473cd220134ee47490797efe7ab5ecff2ce6a732f9e23455a978522629f1962491e8cd01a4251eab33d897f6d97c1bcc7e58dbccd
6
+ metadata.gz: 334283da05ca610a0096cbcec843f3eb5af9e7c76868e9fba64bd220cb7db55f27f418ccb624f679aecfb44e7cf1f784c2b684bb512ee66fd1a243698c0fb9c4
7
+ data.tar.gz: 4c2c0935d77d0af41709cd754cb4f9cd3b2e1da8bfdb97a76184746b7d15084747a003c2104ad4612db8cd7b5f88bb6c3aef6b413dbd6bc669de65908dbcafee
data/.gitignore CHANGED
@@ -20,4 +20,6 @@ tmp
20
20
  *.o
21
21
  *.a
22
22
  mkmf.log
23
- run.rb
23
+ run.rb
24
+ run
25
+ *.log
data/enceladus.gemspec CHANGED
@@ -26,4 +26,6 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency 'rspec', '~> 3.0', '>= 3.0.0'
27
27
  spec.add_development_dependency 'webmock', '~> 1.18', '>= 1.18.0'
28
28
  spec.add_development_dependency 'codeclimate-test-reporter', '~> 0.4', '>= 0.4.0'
29
+ spec.add_development_dependency 'factory_girl', '~> 4.0', '>= 4.0.0'
30
+ spec.add_development_dependency 'faker', '~> 1.0', '>= 1.0.0'
29
31
  end
@@ -38,6 +38,7 @@ module Enceladus::Configuration
38
38
  self.poster_sizes = []
39
39
  self.profile_sizes = []
40
40
  self.still_sizes = []
41
+ self.include_image_language = "en"
41
42
  self
42
43
  end
43
44
 
@@ -1,5 +1,12 @@
1
1
  module Enceladus::Exception
2
- class Base < ::Exception; end
2
+ class Base < ::Exception
3
+ def initialize(message)
4
+ Enceladus::Logger.log.error { message }
5
+ super(message)
6
+ end
7
+ end
8
+
3
9
  class Api < Base; end
4
10
  class ArgumentError < Base; end
11
+ class JsonParseError < Base; end
5
12
  end
@@ -0,0 +1,57 @@
1
+ require 'logger'
2
+ require 'singleton'
3
+
4
+ # Logger is a class implemented by using the singleton pattern mainly responsible for loggin requests, responses and exceptions.
5
+ # Examples:
6
+ # Enceladus::Logger.log.error { "Woops! Something when wrong..." }
7
+ # Enceladus::Logger.log.info { "Yay! That works like a charm!" }
8
+ # Enceladus::Logger.log.warn { "Hummm... code smells here..." }
9
+ # Enceladus::Logger.log.fatal { "Game over..." }
10
+ #
11
+ class Enceladus::Logger < Logger
12
+ include Singleton
13
+
14
+ # By default Enceladus::Logger logs messages to STDOUT and the default log level is Logger::ERROR (check out http://www.ruby-doc.org/stdlib-2.0.0/libdoc/logger/rdoc/Logger.html#class-Logger-label-Description for more information).
15
+ @@logger_output = STDOUT
16
+
17
+ class << self
18
+ def new
19
+ super(logger_output).tap do |logger|
20
+ logger.disable_debug_mode!
21
+ end
22
+ end
23
+
24
+ alias :log :instance
25
+
26
+ # Defines where to log messages.
27
+ # Example:
28
+ # Enceladus::Logger.logger_output = Rails.root.join("log", "enceladus.log")
29
+ #
30
+ def logger_output=(output)
31
+ @@logger_output = output
32
+ end
33
+
34
+ # Returns the current logger output.
35
+ # Example:
36
+ # Enceladus::Logger.logger_output
37
+ # => "/Users/john/super_project/log/enceladus.log"
38
+ #
39
+ def logger_output
40
+ @@logger_output
41
+ end
42
+ end
43
+
44
+ # Changes the log level to DEBUG.
45
+ # Example:
46
+ # Enceladus::Loger.instance.enable_debug_mode!
47
+ def enable_debug_mode!
48
+ self.level = Enceladus::Logger::DEBUG
49
+ end
50
+
51
+ # Disables the debug mode by changing the log level to ERROR.
52
+ # Example:
53
+ # Enceladus::Loger.instance.disable_debug_mode!
54
+ def disable_debug_mode!
55
+ self.level = Enceladus::Logger::ERROR
56
+ end
57
+ end
@@ -20,7 +20,7 @@ class Enceladus::Movie < Enceladus::ApiResource
20
20
  # Enceladus::Movie.find_by_title("emmanuelle")
21
21
  #
22
22
  def self.find_by_title(title)
23
- Enceladus::MovieCollection.new("search/movie", { query: title })
23
+ Enceladus::MovieCollection.new("search/movie", default_params.merge(query: title))
24
24
  end
25
25
 
26
26
  # Returns a paginated collection of upcoming movies.
@@ -156,7 +156,8 @@ private
156
156
  end
157
157
 
158
158
  def self.default_params
159
- include_image_language = Enceladus::Configuration::Image.instance.include_image_language
160
- { append_to_response: "releases,trailers", include_image_language: include_image_language }
159
+ language = Enceladus::Configuration::Image.instance.include_image_language
160
+ adult = Enceladus::Configuration::Api.instance.include_adult
161
+ { append_to_response: "releases,trailers", include_image_language: language, language: language, include_adult: adult }
161
162
  end
162
163
  end
@@ -1,4 +1,52 @@
1
1
  class Enceladus::ProductionCompany < Enceladus::ApiResource
2
- RESOURCE_ATTRIBUTES = [:id, :name].map(&:freeze).freeze
2
+ RESOURCE_ATTRIBUTES = [:id, :logo_path, :name, :description, :headquarters, :homepage].map(&:freeze).freeze
3
3
  attr_accessor *RESOURCE_ATTRIBUTES
4
+
5
+ # Returns a paginated collection of ProductionCompanies with the name.
6
+ # Example:
7
+ # Enceladus::ProductionCompany.find_by_name("Marvel")
8
+ #
9
+ def self.find_by_name(name)
10
+ Enceladus::ProductionCompanyCollection.new("search/company", { query: name })
11
+ end
12
+
13
+ # Finds a production company by id.
14
+ # Example:
15
+ # company = Enceladus::ProductionCompany.find(7505)
16
+ def self.find(id)
17
+ build_single_resource(Enceladus::Requester.get("company/#{id}", default_params))
18
+ end
19
+
20
+ # Returns an array containing URL's (as string) for the companies logos.
21
+ def logo_urls
22
+ Enceladus::Configuration::Image.instance.url_for("logo", logo_path)
23
+ end
24
+
25
+ # Fetchs for more details about the production company.
26
+ # Example:
27
+ # marvel = Enceladus::ProductionCompany.find_by_name("marvel").last
28
+ # => #<Enceladus::ProductionCompany @id=325, @logo_path="/pic.png", @name="Marvel Entertainment, LLC">
29
+ # marvel.reload
30
+ # => #<Enceladus::ProductionCompan @id=325, @logo_path="/pic.png", @name="Marvel Entertainment, LLC", @description=nil, @headquarters="New York, New York, USA", @homepage="http://www.marvel.com">
31
+ #
32
+ def reload
33
+ rebuild_single_resource(Enceladus::Requester.get("company/#{id}", self.class.default_params))
34
+ end
35
+
36
+ # Returns a paginated collection of all movies of a production company.
37
+ # Example:
38
+ # marvel = Enceladus::ProductionCompany.find(7505)
39
+ # marvel.movies
40
+ # => [Movie(@title="Thor"), Movie(@title="Captain America"), Movie(@title="Iron Man")]
41
+ #
42
+ def movies
43
+ Enceladus::MovieCollection.new("company/#{id}/movies", Enceladus::Movie.default_params)
44
+ end
45
+
46
+ private
47
+
48
+ def self.default_params
49
+ language = Enceladus::Configuration::Image.instance.include_image_language
50
+ { append_to_response: "description,headquarters,homepage,id,logo_path,name", language: language }
51
+ end
4
52
  end
@@ -0,0 +1,3 @@
1
+ class Enceladus::ProductionCompanyCollection < Enceladus::ApiPaginatedCollection
2
+ RESOURCE_CLASS = Enceladus::ProductionCompany
3
+ end
@@ -13,8 +13,9 @@ class Enceladus::Requester
13
13
  #
14
14
  def get(action, params={})
15
15
  url = api.url_for(action, params)
16
+ Enceladus::Logger.log.info { "About to request: #{url}" }
16
17
  perform_request do
17
- JSON.parse(RestClient.get(url, request_headers), object_class: OpenStruct)
18
+ parse_response(RestClient.get(url, request_headers))
18
19
  end
19
20
  end
20
21
 
@@ -30,8 +31,9 @@ class Enceladus::Requester
30
31
  #
31
32
  def post(action, params={}, form_data={})
32
33
  url = api.url_for(action, params)
34
+ Enceladus::Logger.log.info { "About to request: #{url}" }
33
35
  perform_request do
34
- JSON.parse(RestClient.post(url, form_data.to_json, request_headers), object_class: OpenStruct)
36
+ parse_response(RestClient.post(url, form_data.to_json, request_headers))
35
37
  end
36
38
  end
37
39
 
@@ -64,5 +66,14 @@ class Enceladus::Requester
64
66
  def request_headers
65
67
  { accept: 'application/json', content_type: 'application/json' }
66
68
  end
69
+
70
+ def parse_response(response_body)
71
+ begin
72
+ Enceladus::Logger.log.info { "Response: #{JSON.pretty_generate(JSON.parse(response_body))}" }
73
+ JSON.parse(response_body, object_class: OpenStruct)
74
+ rescue JSON::ParserError => e
75
+ raise Enceladus::Exception::JsonParseError.new("Response body could not be parsed: #{e.message}")
76
+ end
77
+ end
67
78
  end
68
79
  end
@@ -1,3 +1,3 @@
1
1
  module Enceladus
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/lib/enceladus.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require File.dirname(__FILE__) + "/enceladus/version"
2
2
  require File.dirname(__FILE__) + "/enceladus/exceptions"
3
+ require File.dirname(__FILE__) + "/enceladus/logger"
3
4
  require File.dirname(__FILE__) + "/enceladus/requester"
4
5
  require File.dirname(__FILE__) + "/enceladus/configuration/api"
5
6
  require File.dirname(__FILE__) + "/enceladus/configuration/image"
@@ -9,9 +10,10 @@ require File.dirname(__FILE__) + "/enceladus/models/account"
9
10
  require File.dirname(__FILE__) + "/enceladus/models/guest_account"
10
11
  require File.dirname(__FILE__) + "/enceladus/models/genre"
11
12
  require File.dirname(__FILE__) + "/enceladus/models/movie"
12
- require File.dirname(__FILE__) + "/enceladus/models/cast"
13
13
  require File.dirname(__FILE__) + "/enceladus/models/movie_collection"
14
+ require File.dirname(__FILE__) + "/enceladus/models/cast"
14
15
  require File.dirname(__FILE__) + "/enceladus/models/production_company"
16
+ require File.dirname(__FILE__) + "/enceladus/models/production_company_collection"
15
17
  require File.dirname(__FILE__) + "/enceladus/models/production_country"
16
18
  require File.dirname(__FILE__) + "/enceladus/models/release"
17
19
  require File.dirname(__FILE__) + "/enceladus/models/spoken_language"
@@ -1,14 +1,22 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Enceladus::Configuration::Api do
4
+
5
+ around do |example|
6
+ Singleton.__init__(Enceladus::Configuration::Api)
7
+ example.run
8
+ Singleton.__init__(Enceladus::Configuration::Api)
9
+ end
10
+
4
11
  describe "#connect" do
5
12
  subject { Enceladus::Configuration::Api.instance.connect(api_key) }
6
13
  let(:api_key) { "token" }
14
+ let(:error_response) { build(:error_response) }
7
15
 
8
16
  context "when the provided api_key is not valid" do
9
17
  before do
10
18
  stub_request(:get, /api.themoviedb.org\/3\/configuration/).
11
- to_return(status: 401, body: ErrorResponse.new(7, "Invalid API key: You must be granted a valid key.").to_json)
19
+ to_return(status: 401, body: error_response.to_json)
12
20
  end
13
21
 
14
22
  it "should set Enceladus::Configuration::Api api_key as nil" do
@@ -27,9 +35,10 @@ describe Enceladus::Configuration::Api do
27
35
  end
28
36
 
29
37
  context "when the provided api_key is valid" do
38
+ let(:configuration_response) { build(:configuration_response) }
30
39
  before do
31
40
  stub_request(:get, /api.themoviedb.org\/3\/configuration/).
32
- to_return(status: 200, body: ConfigurationResponse.new.to_json)
41
+ to_return(status: 200, body: configuration_response.to_json)
33
42
  end
34
43
 
35
44
  it "should save Enceladus::Configuration::Api api_key" do
@@ -1,7 +1,13 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Enceladus::Configuration::Image do
4
- let(:configuration) { ConfigurationResponse.new }
4
+ let(:configuration) { build(:configuration_response) }
5
+
6
+ around do |example|
7
+ Singleton.__init__(Enceladus::Configuration::Image)
8
+ example.run
9
+ Singleton.__init__(Enceladus::Configuration::Image)
10
+ end
5
11
 
6
12
  describe "#setup!" do
7
13
  subject(:image) { Enceladus::Configuration::Image.instance.setup! }
@@ -5,7 +5,7 @@ describe Enceladus do
5
5
  describe ".connect" do
6
6
  subject { Enceladus.connect(api_key) }
7
7
  let(:api_key) { "token" }
8
- let(:configuration) { ConfigurationResponse.new }
8
+ let(:configuration) { build(:configuration_response) }
9
9
 
10
10
  before do
11
11
  stub_request(:get, /api.themoviedb.org\/3\/configuration/).to_return(status: 200, body: configuration.to_json)
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+ require 'singleton'
3
+
4
+ describe Enceladus::Logger, logger_test: true do
5
+ let(:logger) { Enceladus::Logger.instance }
6
+
7
+ around do |example|
8
+ Singleton.__init__(Enceladus::Logger)
9
+ example.run
10
+ Singleton.__init__(Enceladus::Logger)
11
+ end
12
+
13
+ describe "#new" do
14
+ it "should set log level to ERROR" do
15
+ expect(logger.level).to eq(Enceladus::Logger::ERROR)
16
+ end
17
+ end
18
+
19
+ describe ".logger_output=" do
20
+ subject { Enceladus::Logger.logger_output = output }
21
+ let(:output) { "enceladus.log" }
22
+
23
+ it "sets the logger output to the one provided" do
24
+ expect{ subject }.to change{ Enceladus::Logger.logger_output }.to(output)
25
+ end
26
+ end
27
+
28
+ describe "#enable_debug_mode!" do
29
+ subject { logger.enable_debug_mode! }
30
+ before { logger.level = Enceladus::Logger::FATAL }
31
+
32
+ it "should set the logger level to DEBUG" do
33
+ expect{ subject }.to change{ logger.level }.to(Enceladus::Logger::DEBUG)
34
+ end
35
+ end
36
+
37
+ describe "#disable_debug_mode!" do
38
+ subject { logger.disable_debug_mode! }
39
+ before { logger.level = Enceladus::Logger::FATAL }
40
+
41
+ it "should set the logger level to ERROR" do
42
+ expect{ subject }.to change{ logger.level }.to(Enceladus::Logger::ERROR)
43
+ end
44
+ end
45
+ end
@@ -2,10 +2,10 @@ require 'spec_helper'
2
2
 
3
3
  describe Enceladus::Account do
4
4
 
5
- let(:request_token_response) { RequestTokenResponse.new }
6
- let(:authentication_response) { AuthenticationResponse.new }
7
- let(:session_response) { SessionResponse.new }
8
- let(:account_response) { AccountResponse.new }
5
+ let(:request_token_response) { build(:request_token_response) }
6
+ let(:authentication_response) { build(:authentication_response) }
7
+ let(:session_response) { build(:session_response) }
8
+ let(:account_response) { build(:account_response) }
9
9
  let(:username) { "ashlynn_brooke" }
10
10
  let(:password) { "corinthians" }
11
11
 
@@ -110,15 +110,11 @@ describe Enceladus::Account do
110
110
  let(:account) { Enceladus::Account.new(username, password) }
111
111
 
112
112
  let(:collection) { Enceladus::MovieCollection.new(path) }
113
- let(:movie_1) { MovieCollectionResourceResponse.new }
114
- let(:movie_2) { MovieCollectionResourceResponse.new }
115
- let(:response) { MovieCollectionResponse.new }
113
+ let(:movie_1) { build(:movie_collection_resource_response) }
114
+ let(:movie_2) { build(:movie_collection_resource_response) }
115
+ let(:response) { build(:movie_collection_response, results: [movie_1, movie_2]) }
116
116
 
117
117
  before do
118
- movie_1.id = 111
119
- movie_2.id = 222
120
- response.results = [movie_1, movie_2]
121
-
122
118
  stub_request(:get, "https://api.themoviedb.org/3/account/#{account.id}/favorite/movies?api_key=token&page=1&session_id=#{session_response.session_id}").
123
119
  to_return(status: 200, body: response.to_json)
124
120
  end
@@ -133,15 +129,11 @@ describe Enceladus::Account do
133
129
  let(:account) { Enceladus::Account.new(username, password) }
134
130
 
135
131
  let(:collection) { Enceladus::MovieCollection.new(path) }
136
- let(:movie_1) { MovieCollectionResourceResponse.new }
137
- let(:movie_2) { MovieCollectionResourceResponse.new }
138
- let(:response) { MovieCollectionResponse.new }
132
+ let(:movie_1) { build(:movie_collection_resource_response) }
133
+ let(:movie_2) { build(:movie_collection_resource_response) }
134
+ let(:response) { build(:movie_collection_response, results: [movie_1, movie_2]) }
139
135
 
140
136
  before do
141
- movie_1.id = 111
142
- movie_2.id = 222
143
- response.results = [movie_1, movie_2]
144
-
145
137
  stub_request(:get, "https://api.themoviedb.org/3/account/#{account.id}/rated/movies?api_key=token&page=1&session_id=#{session_response.session_id}").
146
138
  to_return(status: 200, body: response.to_json)
147
139
  end
@@ -156,15 +148,11 @@ describe Enceladus::Account do
156
148
  let(:account) { Enceladus::Account.new(username, password) }
157
149
 
158
150
  let(:collection) { Enceladus::MovieCollection.new(path) }
159
- let(:movie_1) { MovieCollectionResourceResponse.new }
160
- let(:movie_2) { MovieCollectionResourceResponse.new }
161
- let(:response) { MovieCollectionResponse.new }
151
+ let(:movie_1) { build(:movie_collection_resource_response) }
152
+ let(:movie_2) { build(:movie_collection_resource_response) }
153
+ let(:response) { build(:movie_collection_response, results: [movie_1, movie_2]) }
162
154
 
163
155
  before do
164
- movie_1.id = 111
165
- movie_2.id = 222
166
- response.results = [movie_1, movie_2]
167
-
168
156
  stub_request(:get, "https://api.themoviedb.org/3/account/#{account.id}/watchlist/movies?api_key=token&page=1&session_id=#{session_response.session_id}").
169
157
  to_return(status: 200, body: response.to_json)
170
158
  end
@@ -7,7 +7,7 @@ describe Enceladus::Cast do
7
7
 
8
8
  before do
9
9
  cast.profile_path = "/aylar_lie.jpeg"
10
- stub_request(:get, /api.themoviedb.org\/3\/configuration/).to_return(status: 200, body: ConfigurationResponse.new.to_json)
10
+ stub_request(:get, /api.themoviedb.org\/3\/configuration/).to_return(status: 200, body: build(:configuration_response).to_json)
11
11
  Enceladus::Configuration::Image.instance.setup!
12
12
  end
13
13
 
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe Enceladus::GuestAccount do
4
4
 
5
- let(:guest_account_response) { GuestAccountResponse.new }
5
+ let(:guest_account_response) { build(:guest_account_response) }
6
6
 
7
7
  before do
8
8
  stub_request(:get, "https://api.themoviedb.org/3/authentication/guest_session/new?api_key=token").
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Enceladus::MovieCollection do
4
- let(:response) { MovieCollectionResponse.new }
4
+ let(:response) { build(:movie_collection_response) }
5
5
  let(:path) { "movie/upcoming" }
6
6
  let(:params) { { test: 1 } }
7
7
 
@@ -164,12 +164,10 @@ describe Enceladus::MovieCollection do
164
164
  describe "#last" do
165
165
  subject { collection.last }
166
166
  let(:collection) { Enceladus::MovieCollection.new(path) }
167
- let(:movie_1) { MovieCollectionResourceResponse.new }
168
- let(:movie_2) { MovieCollectionResourceResponse.new }
167
+ let(:movie_1) { build(:movie_collection_resource_response) }
168
+ let(:movie_2) { build(:movie_collection_resource_response) }
169
169
 
170
170
  before do
171
- movie_1.id = 111
172
- movie_2.id = 222
173
171
  response.results = [movie_1, movie_2]
174
172
  stub_request(:get, /api.themoviedb.org\/3\/movie\/upcoming/).to_return(status: 200, body: response.to_json)
175
173
  end
@@ -182,12 +180,10 @@ describe Enceladus::MovieCollection do
182
180
  describe "#first" do
183
181
  subject { collection.first }
184
182
  let(:collection) { Enceladus::MovieCollection.new(path) }
185
- let(:movie_1) { MovieCollectionResourceResponse.new }
186
- let(:movie_2) { MovieCollectionResourceResponse.new }
183
+ let(:movie_1) { build(:movie_collection_resource_response) }
184
+ let(:movie_2) { build(:movie_collection_resource_response) }
187
185
 
188
186
  before do
189
- movie_1.id = 111
190
- movie_2.id = 222
191
187
  response.results = [movie_1, movie_2]
192
188
  stub_request(:get, /api.themoviedb.org\/3\/movie\/upcoming/).to_return(status: 200, body: response.to_json)
193
189
  end
@@ -200,12 +196,10 @@ describe Enceladus::MovieCollection do
200
196
  describe "#all" do
201
197
  subject { collection.all }
202
198
  let(:collection) { Enceladus::MovieCollection.new(path) }
203
- let(:movie_1) { MovieCollectionResourceResponse.new }
204
- let(:movie_2) { MovieCollectionResourceResponse.new }
199
+ let(:movie_1) { build(:movie_collection_resource_response) }
200
+ let(:movie_2) { build(:movie_collection_resource_response) }
205
201
 
206
202
  before do
207
- movie_1.id = 111
208
- movie_2.id = 222
209
203
  response.results = [movie_1, movie_2]
210
204
  stub_request(:get, /api.themoviedb.org\/3\/movie\/upcoming/).to_return(status: 200, body: response.to_json)
211
205
  end
@@ -2,13 +2,17 @@ require 'spec_helper'
2
2
 
3
3
  describe Enceladus::Movie do
4
4
 
5
+ before do
6
+ stub_request(:get, /api.themoviedb.org\/3\/configuration/).to_return(status: 200, body: build(:configuration_response).to_json)
7
+ Enceladus.connect("token") # start configuration with default values
8
+ end
9
+
5
10
  describe "#find" do
6
- subject(:movie) { Enceladus::Movie.find(id) }
7
- let(:id) { 777 }
8
- let(:movie_response) { MovieResponse.new }
11
+ subject(:movie) { Enceladus::Movie.find(movie_response.id) }
12
+ let(:movie_response) { build(:movie_response) }
9
13
 
10
14
  before do
11
- stub_request(:get, /api.themoviedb.org\/3\/movie\/777/).
15
+ stub_request(:get, /api.themoviedb.org\/3\/movie\/#{movie_response.id}/).
12
16
  to_return(status: 200, body: movie_response.to_json)
13
17
  end
14
18
 
@@ -204,7 +208,7 @@ describe Enceladus::Movie do
204
208
  [:upcoming, :now_playing, :popular, :top_rated].each do |endpoint|
205
209
  describe ".#{endpoint}" do
206
210
  subject(:movies) { Enceladus::Movie.send(endpoint) }
207
- let(:response) { MovieCollectionResponse.new }
211
+ let(:response) { build(:movie_collection_response) }
208
212
 
209
213
  before do
210
214
  stub_request(:get, /api.themoviedb.org\/3\/movie\/#{endpoint}/).to_return(status: 200, body: response.to_json)
@@ -223,7 +227,7 @@ describe Enceladus::Movie do
223
227
 
224
228
  describe "#similar" do
225
229
  subject(:movies) { movie.similar }
226
- let(:response) { MovieCollectionResponse.new }
230
+ let(:response) { build(:movie_collection_response) }
227
231
  let(:movie) { Enceladus::Movie.new }
228
232
 
229
233
  before do
@@ -243,11 +247,11 @@ describe Enceladus::Movie do
243
247
 
244
248
  describe ".find_by_title" do
245
249
  subject(:movies) { Enceladus::Movie.find_by_title(title) }
246
- let(:response) { MovieCollectionResponse.new }
250
+ let(:response) { build(:movie_collection_response) }
247
251
  let(:title) { "Banana" }
248
252
 
249
253
  before do
250
- stub_request(:get, "https://api.themoviedb.org/3/search/movie?api_key=token&page=1&query=#{title}")
254
+ stub_request(:get, "https://api.themoviedb.org/3/search/movie?api_key=token&append_to_response=releases,trailers&include_adult=false&include_image_language=en&language=en&page=1&query=#{title}")
251
255
  .to_return(status: 200, body: response.to_json)
252
256
  end
253
257
 
@@ -266,7 +270,7 @@ describe Enceladus::Movie do
266
270
 
267
271
  let(:movie) { Enceladus::Movie.new }
268
272
  let(:movie_id) { 1234 }
269
- let(:response) { MovieResponse.new }
273
+ let(:response) { build(:movie_response, id: movie_id) }
270
274
 
271
275
  before do
272
276
  movie.id = movie_id
@@ -354,10 +358,11 @@ describe Enceladus::Movie do
354
358
 
355
359
  context "when rating with permanent account" do
356
360
  let(:account) { Enceladus::Account.new(username, password) }
357
- let(:request_token_response) { RequestTokenResponse.new }
358
- let(:authentication_response) { AuthenticationResponse.new }
359
- let(:session_response) { SessionResponse.new }
360
- let(:account_response) { AccountResponse.new }
361
+
362
+ let(:request_token_response) { build(:request_token_response) }
363
+ let(:authentication_response) { build(:authentication_response) }
364
+ let(:session_response) { build(:session_response) }
365
+ let(:account_response) { build(:account_response) }
361
366
  let(:username) { "ashlynn_brooke" }
362
367
  let(:password) { "corinthians" }
363
368
 
@@ -386,7 +391,7 @@ describe Enceladus::Movie do
386
391
 
387
392
  context "when rating with guest account" do
388
393
  let(:account) { Enceladus::GuestAccount.new }
389
- let(:guest_account_response) { GuestAccountResponse.new }
394
+ let(:guest_account_response) { build(:guest_account_response) }
390
395
 
391
396
  before do
392
397
  stub_request(:get, "https://api.themoviedb.org/3/authentication/guest_session/new?api_key=token").
@@ -413,7 +418,7 @@ describe Enceladus::Movie do
413
418
  subject(:cast) { movie.cast }
414
419
  let(:movie) { Enceladus::Movie.new }
415
420
  let(:movie_id) { 123 }
416
- let(:response) { CreditsCollectionResponse.new }
421
+ let(:response) { build(:credits_collection_response) }
417
422
  let(:cast_response) { response.cast.first }
418
423
 
419
424
  before do
@@ -443,8 +448,6 @@ describe Enceladus::Movie do
443
448
 
444
449
  before do
445
450
  movie.backdrop_path = "/pamela_butt.jpeg"
446
- stub_request(:get, /api.themoviedb.org\/3\/configuration/).to_return(status: 200, body: ConfigurationResponse.new.to_json)
447
- Enceladus::Configuration::Image.instance.setup!
448
451
  end
449
452
 
450
453
  it "should return profile url" do
@@ -458,8 +461,6 @@ describe Enceladus::Movie do
458
461
 
459
462
  before do
460
463
  movie.poster_path = "/vivi_fernandes.jpeg"
461
- stub_request(:get, /api.themoviedb.org\/3\/configuration/).to_return(status: 200, body: ConfigurationResponse.new.to_json)
462
- Enceladus::Configuration::Image.instance.setup!
463
464
  end
464
465
 
465
466
  it "should return profile url" do