enceladus 0.0.3 → 0.0.4

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.
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