From 848f0aa1e6ed1d9850359f93c661e260bae03b43 Mon Sep 17 00:00:00 2001 From: Alicia Combs Date: Mon, 22 Jun 2020 16:58:02 -0700 Subject: [PATCH 1/8] Added .env to gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 4a494a75..3b91322a 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,5 @@ # Ignore master key for decrypting credentials and more. /config/master.key + +.env \ No newline at end of file From 9726d2479a9be731efff7cb1657f7d27502c0dc3 Mon Sep 17 00:00:00 2001 From: Tithvorlak Mok Date: Wed, 24 Jun 2020 17:18:47 -0700 Subject: [PATCH 2/8] Added create function --- app/controllers/movies_controller.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/app/controllers/movies_controller.rb b/app/controllers/movies_controller.rb index 362e2791..190868ab 100644 --- a/app/controllers/movies_controller.rb +++ b/app/controllers/movies_controller.rb @@ -21,6 +21,16 @@ def show ) end + def create + movie = Movie.new(movie_params) + + if movie.save + render status: :ok, json: {} + else + render status: :bad_request, json: { errors: movie.errors.messages } + end + end + private def require_movie @@ -29,4 +39,8 @@ def require_movie render status: :not_found, json: { errors: { title: ["No movie with title #{params["title"]}"] } } end end + + def movie_params + return params.permit(:title, :overview, :release_date, :inventory, :image_url, :external_id) + end end From ab5a58d27523ad8771d620f3486fdb97421d4150 Mon Sep 17 00:00:00 2001 From: Tithvorlak Mok Date: Wed, 24 Jun 2020 17:19:37 -0700 Subject: [PATCH 3/8] Deleted extra space --- app/controllers/rentals_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/rentals_controller.rb b/app/controllers/rentals_controller.rb index 67e77073..92ee30a5 100644 --- a/app/controllers/rentals_controller.rb +++ b/app/controllers/rentals_controller.rb @@ -5,7 +5,7 @@ class RentalsController < ApplicationController # TODO: make sure that wave 2 works all the way def check_out rental = Rental.new(movie: @movie, customer: @customer, due_date: params[:due_date]) - + if rental.save render status: :ok, json: {} else From 485de53faa0faea669d4b37e2e79e8f9d5efaf74 Mon Sep 17 00:00:00 2001 From: Tithvorlak Mok Date: Wed, 24 Jun 2020 17:20:17 -0700 Subject: [PATCH 4/8] Updated create to the route for movie --- config/routes.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/routes.rb b/config/routes.rb index f4c99688..76715f9a 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 28658ebbfee9337f4d2ccece71459193a755527c Mon Sep 17 00:00:00 2001 From: Tithvorlak Mok Date: Wed, 24 Jun 2020 17:20:35 -0700 Subject: [PATCH 5/8] Wrote the test for the create method and passed all the tests --- test/controllers/movies_controller_test.rb | 24 ++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/test/controllers/movies_controller_test.rb b/test/controllers/movies_controller_test.rb index 9172cf6e..0b78b4ce 100644 --- a/test/controllers/movies_controller_test.rb +++ b/test/controllers/movies_controller_test.rb @@ -75,4 +75,28 @@ class MoviesControllerTest < ActionDispatch::IntegrationTest end end + + describe "create" do + before do + @valid_movie = { + title: "XXXXX", + overview: "XXXXXXXX", + release_date: "2017-01-11", + inventory: 10, + image_url: "https://lh3.googleusercontent.com/pw/ACtC-3dgueD28nFt8fbmnEVSWrDdgXdH4dy91CXoWO818YTNFQlfnH-GN1O9t3zX4UEOGH3cncMC2Ze9WfNm13ofTlzOV97WdprqYmUPbj5H0oTS7Qwi8QtAEV8RFNyrcCJy09V04GFZQySqt9yhxf2v37Cg=w401-h397-no?authuser=0", + external_id: 2342 + } + end + it "create a new movie instance/object" do + # post movies_path, params: @valid_movie + + + expect{post movies_path, params: @valid_movie}.must_differ "Movie.count", 1 + must_respond_with :success + + last_movie = Movie.last + expect(last_movie.title).must_equal "XXXXX" + p last_movie + end + end end From ee9c5cc2b5ba372b02d65a54eeb6e1d55a8b4584 Mon Sep 17 00:00:00 2001 From: Tithvorlak Mok Date: Thu, 25 Jun 2020 10:07:22 -0700 Subject: [PATCH 6/8] Added validation to the title --- app/models/movie.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/models/movie.rb b/app/models/movie.rb index fda94941..9d05effd 100644 --- a/app/models/movie.rb +++ b/app/models/movie.rb @@ -2,6 +2,8 @@ class Movie < ApplicationRecord has_many :rentals has_many :customers, through: :rentals + validates :title, presence: true, uniqueness: true + def available_inventory self.inventory - Rental.where(movie: self, returned: false).length end From 7e5742dd815e0d85a2c544430025ae4af88fc635 Mon Sep 17 00:00:00 2001 From: Tithvorlak Mok Date: Thu, 25 Jun 2020 10:08:03 -0700 Subject: [PATCH 7/8] Added two more tests for movie_controller_test --- test/controllers/movies_controller_test.rb | 30 +++++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/test/controllers/movies_controller_test.rb b/test/controllers/movies_controller_test.rb index 0b78b4ce..687f68fb 100644 --- a/test/controllers/movies_controller_test.rb +++ b/test/controllers/movies_controller_test.rb @@ -86,17 +86,39 @@ class MoviesControllerTest < ActionDispatch::IntegrationTest image_url: "https://lh3.googleusercontent.com/pw/ACtC-3dgueD28nFt8fbmnEVSWrDdgXdH4dy91CXoWO818YTNFQlfnH-GN1O9t3zX4UEOGH3cncMC2Ze9WfNm13ofTlzOV97WdprqYmUPbj5H0oTS7Qwi8QtAEV8RFNyrcCJy09V04GFZQySqt9yhxf2v37Cg=w401-h397-no?authuser=0", external_id: 2342 } + + @invalid_movie = { + title: nil, + overview: "XXXXXXXX", + release_date: "2017-01-11", + inventory: 10, + image_url: "https://lh3.googleusercontent.com/pw/ACtC-3dgueD28nFt8fbmnEVSWrDdgXdH4dy91CXoWO818YTNFQlfnH-GN1O9t3zX4UEOGH3cncMC2Ze9WfNm13ofTlzOV97WdprqYmUPbj5H0oTS7Qwi8QtAEV8RFNyrcCJy09V04GFZQySqt9yhxf2v37Cg=w401-h397-no?authuser=0", + external_id: 2342 + } end - it "create a new movie instance/object" do - # post movies_path, params: @valid_movie + + it "can create a new valid movie instance/object" do - expect{post movies_path, params: @valid_movie}.must_differ "Movie.count", 1 must_respond_with :success last_movie = Movie.last expect(last_movie.title).must_equal "XXXXX" - p last_movie + end + + it "cannot create an invalid movie" do + expect{post movies_path, params: @invalid_movie}.wont_change "Movie.count" + must_respond_with :bad_request + data = JSON.parse @response.body + data.must_include "errors" + end + + it "requires a valid movie title" do + post movies_path(@invalid_movie) + must_respond_with :bad_request + data = JSON.parse @response.body + data.must_include "errors" + data["errors"].must_include "title" end end end From e2bd0cb9ccbc689b5b6610d86ebdd51690ee7916 Mon Sep 17 00:00:00 2001 From: Tithvorlak Mok Date: Thu, 25 Jun 2020 13:24:01 -0700 Subject: [PATCH 8/8] Add validation to the external_id --- app/models/movie.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/models/movie.rb b/app/models/movie.rb index 9d05effd..b389c06c 100644 --- a/app/models/movie.rb +++ b/app/models/movie.rb @@ -2,7 +2,8 @@ class Movie < ApplicationRecord has_many :rentals has_many :customers, through: :rentals - validates :title, presence: true, uniqueness: true + validates :title, presence: true + validates :external_id, presence: true, uniqueness: true def available_inventory self.inventory - Rental.where(movie: self, returned: false).length