From 7ccf659fc9d50a2bcb33b612aefaa32204f5179e Mon Sep 17 00:00:00 2001 From: Haby Randall Date: Tue, 13 Jun 2017 14:59:29 -0700 Subject: [PATCH 01/10] Added .env gem to gemfile --- Gemfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Gemfile b/Gemfile index d5c7affd..79358218 100644 --- a/Gemfile +++ b/Gemfile @@ -58,6 +58,7 @@ group :development do gem 'pry-rails' gem 'dotenv-rails' + # added token to .env end group :test do From 120f8ad8aec484c1029ee0ae63c69690f2b146cf Mon Sep 17 00:00:00 2001 From: Haby Randall Date: Fri, 16 Jun 2017 10:49:53 -0700 Subject: [PATCH 02/10] Working on create movie method in rails api --- app/controllers/movies_controller.rb | 32 ++++++++++++++++++++++------ config/routes.rb | 2 +- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/app/controllers/movies_controller.rb b/app/controllers/movies_controller.rb index 362e2791..08fc96f1 100644 --- a/app/controllers/movies_controller.rb +++ b/app/controllers/movies_controller.rb @@ -13,16 +13,36 @@ def index def show render( - status: :ok, - json: @movie.as_json( - only: [:title, :overview, :release_date, :inventory], - methods: [:available_inventory] - ) - ) + status: :ok, + json: @movie.as_json( + only: [:title, :overview, :release_date, :inventory], + methods: [:available_inventory] + ) + ) + end + + def create + existing_movie = Movie.find_by(title: movie_params[:title]) + + if existing_movie + render json: {errors: {movie: ["#{params[:title]} is already in Video Store"]}} + else + movie = Movie.new(movie_params) + if movie.save + render json: movie.as_json, status: :ok + else + render json: {errors: {movie: ["An error occurred"]}} + end + end + end private + def movie_params + params.require(:movie).permit(:title, :overview, :release_date, :inventory, :image_url) + end + def require_movie @movie = Movie.find_by(title: params[:title]) unless @movie diff --git a/config/routes.rb b/config/routes.rb index 54bf033e..8eff1ff6 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -3,7 +3,7 @@ resources :customers, only: [:index] - resources :movies, only: [:index, :show], param: :title + resources :movies, only: [:index, :show, :create], param: :title post "/rentals/:title/check-out", to: "rentals#check_out", as: "check_out" post "/rentals/:title/return", to: "rentals#check_in", as: "check_in" From 02853f3b5589fb15a44ebd8ad630a018f1dba1be Mon Sep 17 00:00:00 2001 From: Haby Randall Date: Fri, 16 Jun 2017 11:20:56 -0700 Subject: [PATCH 03/10] Set up test environment to test create method --- Gemfile | 1 + Gemfile.lock | 4 ++++ app/controllers/movies_controller.rb | 4 ++-- test/controllers/movies_controller_test.rb | 23 ++++++++++++++++++++++ test/test_helper.rb | 8 +++++++- 5 files changed, 37 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index aebbf602..6143c31c 100644 --- a/Gemfile +++ b/Gemfile @@ -64,6 +64,7 @@ group :development do end group :test do + gem 'minitest-rails' gem 'minitest-spec-rails' gem 'minitest-reporters' end diff --git a/Gemfile.lock b/Gemfile.lock index f80bcea9..51f122f3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -98,6 +98,9 @@ GEM mime-types-data (3.2016.0521) mini_portile2 (2.1.0) minitest (5.10.1) + minitest-rails (3.0.0) + minitest (~> 5.8) + railties (~> 5.0) minitest-reporters (1.1.12) ansi builder @@ -205,6 +208,7 @@ DEPENDENCIES jbuilder (~> 2.5) jquery-rails listen (~> 3.0.5) + minitest-rails minitest-reporters minitest-spec-rails pry-rails diff --git a/app/controllers/movies_controller.rb b/app/controllers/movies_controller.rb index 08fc96f1..ec862c09 100644 --- a/app/controllers/movies_controller.rb +++ b/app/controllers/movies_controller.rb @@ -32,7 +32,7 @@ def create render json: movie.as_json, status: :ok else render json: {errors: {movie: ["An error occurred"]}} - end + end end end @@ -40,7 +40,7 @@ def create private def movie_params - params.require(:movie).permit(:title, :overview, :release_date, :inventory, :image_url) + params.require(:movie).permit(:title, :overview, :release_date, :inventory, :image_url, :external_id) end def require_movie diff --git a/test/controllers/movies_controller_test.rb b/test/controllers/movies_controller_test.rb index 9172cf6e..faa5bd91 100644 --- a/test/controllers/movies_controller_test.rb +++ b/test/controllers/movies_controller_test.rb @@ -75,4 +75,27 @@ class MoviesControllerTest < ActionDispatch::IntegrationTest end end + + describe "create" do + + let(:movie_data) { + { + title: "Spongebob", + overview: "Square pants", + release_date: "2001", + inventory: 5, + available_inventory: 0 + } + } + it "affects the model when creating a new movie" do + proc { + post movies_url, params: movie_data + }.must_change 'Movie.count', 1 + must_respond_with :ok + end + + it "won't create with already existing movie" do + + end + end end diff --git a/test/test_helper.rb b/test/test_helper.rb index 499d175c..48477987 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -1,13 +1,19 @@ ENV['RAILS_ENV'] ||= 'test' require File.expand_path('../../config/environment', __FILE__) require 'rails/test_help' +require "minitest/rails" +require "minitest/reporters" class ActiveSupport::TestCase # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. fixtures :all # Use Minitest Reporters for colored output. - Minitest::Reporters.use! + Minitest::Reporters.use!( + Minitest::Reporters::SpecReporter.new, + ENV, + Minitest.backtrace_filter + ) # Add more helper methods to be used by all tests here... end From 909a7d4cefdb826c9c1f9889e64f2c59c0ed4f1d Mon Sep 17 00:00:00 2001 From: Haby Randall Date: Mon, 19 Jun 2017 11:20:40 -0700 Subject: [PATCH 04/10] Writing controller tests for create method, and added validations to movie model --- app/controllers/movies_controller.rb | 2 +- app/models/movie.rb | 4 +++ test/controllers/movies_controller_test.rb | 29 ++++++++++------------ 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/app/controllers/movies_controller.rb b/app/controllers/movies_controller.rb index ec862c09..6eb34291 100644 --- a/app/controllers/movies_controller.rb +++ b/app/controllers/movies_controller.rb @@ -40,7 +40,7 @@ def create private def movie_params - params.require(:movie).permit(:title, :overview, :release_date, :inventory, :image_url, :external_id) + params.require(:movie).permit(:title, :overview, :release_date, :inventory, :image_url) end def require_movie diff --git a/app/models/movie.rb b/app/models/movie.rb index 0327a4d6..64c2961d 100644 --- a/app/models/movie.rb +++ b/app/models/movie.rb @@ -4,6 +4,10 @@ class Movie < ApplicationRecord has_many :rentals has_many :customers, through: :rentals + validates :title, presence: true + validates :inventory, presence: true, numericality: { only_integer: true } + validates :external_id, uniqueness: true, allow_nil: true + def available_inventory self.inventory - Rental.where(movie: self, returned: false).length end diff --git a/test/controllers/movies_controller_test.rb b/test/controllers/movies_controller_test.rb index faa5bd91..e10a7a44 100644 --- a/test/controllers/movies_controller_test.rb +++ b/test/controllers/movies_controller_test.rb @@ -78,24 +78,21 @@ class MoviesControllerTest < ActionDispatch::IntegrationTest describe "create" do - let(:movie_data) { - { - title: "Spongebob", - overview: "Square pants", - release_date: "2001", - inventory: 5, - available_inventory: 0 - } - } it "affects the model when creating a new movie" do proc { - post movies_url, params: movie_data - }.must_change 'Movie.count', 1 - must_respond_with :ok - end + post movies_url, params: { movie: + { title: "Spongebob", + overview: "Square Pants", + release_date: "2001", + inventory: 5, + image_url: ""} + } + }.must_change 'Movie.count', 1 + must_respond_with :ok + end + + it "won't create with already existing movie" do - it "won't create with already existing movie" do - + end end - end end From 3f55a3f49003f9c86f748ae7f0f38a94d73b6c46 Mon Sep 17 00:00:00 2001 From: Haby Randall Date: Mon, 19 Jun 2017 13:17:14 -0700 Subject: [PATCH 05/10] More tests written for create method --- app/controllers/movies_controller.rb | 2 +- test/controllers/movies_controller_test.rb | 36 ++++++++++++++++++++-- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/app/controllers/movies_controller.rb b/app/controllers/movies_controller.rb index 6eb34291..8bba99cd 100644 --- a/app/controllers/movies_controller.rb +++ b/app/controllers/movies_controller.rb @@ -31,7 +31,7 @@ def create if movie.save render json: movie.as_json, status: :ok else - render json: {errors: {movie: ["An error occurred"]}} + render status: :bad_request, json: {errors: movie.errors.messages} end end diff --git a/test/controllers/movies_controller_test.rb b/test/controllers/movies_controller_test.rb index e10a7a44..293aafe9 100644 --- a/test/controllers/movies_controller_test.rb +++ b/test/controllers/movies_controller_test.rb @@ -91,8 +91,40 @@ class MoviesControllerTest < ActionDispatch::IntegrationTest must_respond_with :ok end - it "won't create with already existing movie" do + it "won't create with missing title" do + proc { + post movies_url, params: { movie: + { + overview: "Square Pants", + release_date: "2001", + inventory: 5, + image_url: ""} + } + }.must_change 'Movie.count', 0 + must_respond_with :bad_request + + body = JSON.parse(response.body) + body.must_equal "errors" => { + "title" => ["can't be blank" ] + } + + end + + it "won't create a movie with missing inventory count" do + proc { + post movies_url, params: { movie: + { title: "Movie!", + overview: "Square Pants", + release_date: "2001", + image_url: ""} + } + }.must_change 'Movie.count', 0 + must_respond_with :bad_request + + body = JSON.parse(response.body) + body.must_equal "errors" => {"inventory"=>["can't be blank", "is not a number"] + } + end end - end end From ea071ce14fb04bfab654e6b9eb940c852314ecef Mon Sep 17 00:00:00 2001 From: Haby Randall Date: Mon, 19 Jun 2017 13:55:38 -0700 Subject: [PATCH 06/10] Added more tests to create method --- app/controllers/movies_controller.rb | 2 +- test/controllers/movies_controller_test.rb | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/app/controllers/movies_controller.rb b/app/controllers/movies_controller.rb index 8bba99cd..226a020e 100644 --- a/app/controllers/movies_controller.rb +++ b/app/controllers/movies_controller.rb @@ -40,7 +40,7 @@ def create private def movie_params - params.require(:movie).permit(:title, :overview, :release_date, :inventory, :image_url) + params.require(:movie).permit(:title, :overview, :release_date, :inventory, :image_url, :external_id) end def require_movie diff --git a/test/controllers/movies_controller_test.rb b/test/controllers/movies_controller_test.rb index 293aafe9..92facbf8 100644 --- a/test/controllers/movies_controller_test.rb +++ b/test/controllers/movies_controller_test.rb @@ -126,5 +126,24 @@ class MoviesControllerTest < ActionDispatch::IntegrationTest body.must_equal "errors" => {"inventory"=>["can't be blank", "is not a number"] } end + + it "won't create a movie that already exists" do + proc { + post movies_url, params: { + movie: + { + title: movies(:one).title, + overview: movies(:one).overview, + release_date: movies(:one).release_date, + image_url: movies(:one).image_url, + inventory: movies(:one).inventory + } + } + }.must_change 'Movie.count', 0 + + body = JSON.parse(response.body) + body.must_equal "errors" => {"movie"=>[" is already in Video Store"] + } + end end end From ba9017c4047be5664cfb81f61c850e5cede026ed Mon Sep 17 00:00:00 2001 From: Haby Randall Date: Mon, 19 Jun 2017 14:44:09 -0700 Subject: [PATCH 07/10] About to merge with Regan --- test/controllers/movies_controller_test.rb | 36 +++++++++++----------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/test/controllers/movies_controller_test.rb b/test/controllers/movies_controller_test.rb index 92facbf8..31e424b6 100644 --- a/test/controllers/movies_controller_test.rb +++ b/test/controllers/movies_controller_test.rb @@ -125,25 +125,25 @@ class MoviesControllerTest < ActionDispatch::IntegrationTest body = JSON.parse(response.body) body.must_equal "errors" => {"inventory"=>["can't be blank", "is not a number"] } - end - - it "won't create a movie that already exists" do - proc { - post movies_url, params: { - movie: - { - title: movies(:one).title, - overview: movies(:one).overview, - release_date: movies(:one).release_date, - image_url: movies(:one).image_url, - inventory: movies(:one).inventory + end + + it "won't create a movie that already exists" do + proc { + post movies_url, params: { + movie: + { + title: movies(:one).title, + overview: movies(:one).overview, + release_date: movies(:one).release_date, + image_url: movies(:one).image_url, + inventory: movies(:one).inventory + } } - } - }.must_change 'Movie.count', 0 + }.must_change 'Movie.count', 0 - body = JSON.parse(response.body) - body.must_equal "errors" => {"movie"=>[" is already in Video Store"] - } + body = JSON.parse(response.body) + body.must_equal "errors" => {"movie"=>[" is already in Video Store"] + } + end end - end end From 8f78bd6132d99b1379be71146355a6ad2a7255ec Mon Sep 17 00:00:00 2001 From: Haby Randall Date: Mon, 19 Jun 2017 15:34:04 -0700 Subject: [PATCH 08/10] Trying to post to api --- app/controllers/movies_controller.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/controllers/movies_controller.rb b/app/controllers/movies_controller.rb index 226a020e..ef1039e4 100644 --- a/app/controllers/movies_controller.rb +++ b/app/controllers/movies_controller.rb @@ -40,6 +40,7 @@ def create private def movie_params + puts params.inspect params.require(:movie).permit(:title, :overview, :release_date, :inventory, :image_url, :external_id) end From ae73fd28a502175d2b377b131a9d86ba619e56af Mon Sep 17 00:00:00 2001 From: Haby Randall Date: Mon, 19 Jun 2017 16:26:02 -0700 Subject: [PATCH 09/10] Now posting the the rails API --- app/controllers/movies_controller.rb | 2 +- app/models/movie.rb | 9 +++++---- lib/movie_wrapper.rb | 7 ++++++- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/app/controllers/movies_controller.rb b/app/controllers/movies_controller.rb index 226a020e..161c5830 100644 --- a/app/controllers/movies_controller.rb +++ b/app/controllers/movies_controller.rb @@ -22,7 +22,7 @@ def show end def create - existing_movie = Movie.find_by(title: movie_params[:title]) + existing_movie = Movie.find_by(overview: movie_params[:overview]) if existing_movie render json: {errors: {movie: ["#{params[:title]} is already in Video Store"]}} diff --git a/app/models/movie.rb b/app/models/movie.rb index 64c2961d..8ef764e5 100644 --- a/app/models/movie.rb +++ b/app/models/movie.rb @@ -5,9 +5,9 @@ class Movie < ApplicationRecord has_many :customers, through: :rentals validates :title, presence: true - validates :inventory, presence: true, numericality: { only_integer: true } - validates :external_id, uniqueness: true, allow_nil: true - + # validates :inventory, presence: true, numericality: { only_integer: true } + # validates :external_id, uniqueness: true, allow_nil: true + def available_inventory self.inventory - Rental.where(movie: self, returned: false).length end @@ -17,7 +17,8 @@ def image_url if !orig_value MovieWrapper::DEFAULT_IMG_URL else - MovieWrapper.construct_image_url(orig_value) + return orig_value + # MovieWrapper.construct_image_url(orig_value) end end end diff --git a/lib/movie_wrapper.rb b/lib/movie_wrapper.rb index 7bd05c0e..3774ccb4 100644 --- a/lib/movie_wrapper.rb +++ b/lib/movie_wrapper.rb @@ -27,12 +27,17 @@ def self.construct_movie(api_result) title: api_result["title"], overview: api_result["overview"], release_date: api_result["release_date"], - image_url: api_result["poster_path"], #(api_result["poster_path"] ? self.construct_image_url(api_result["poster_path"]) : nil), + image_url: + # api_result["poster_path"] + (api_result["poster_path"] ? self.construct_image_url(api_result["poster_path"]) : nil), external_id: api_result["id"]) end def self.construct_image_url(img_name) + puts "this is " + img_name return BASE_IMG_URL + DEFAULT_IMG_SIZE + img_name + + end end From d1125a5e1c51ecc3c4a5429cf7bd467843fd5df0 Mon Sep 17 00:00:00 2001 From: Regan Huff Date: Tue, 20 Jun 2017 14:17:38 -0700 Subject: [PATCH 10/10] Set default inventory for new movies to 1 --- app/controllers/movies_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/movies_controller.rb b/app/controllers/movies_controller.rb index a4485bc9..e619e145 100644 --- a/app/controllers/movies_controller.rb +++ b/app/controllers/movies_controller.rb @@ -28,6 +28,7 @@ def create render json: {errors: {movie: ["#{params[:title]} is already in Video Store"]}} else movie = Movie.new(movie_params) + movie.inventory = 1; if movie.save render json: movie.as_json, status: :ok else @@ -40,7 +41,6 @@ def create private def movie_params - puts params.inspect params.require(:movie).permit(:title, :overview, :release_date, :inventory, :image_url, :external_id) end