From fbbe9c66cba33fb24fbf639f45d0e97b32cd8472 Mon Sep 17 00:00:00 2001 From: Ben Purinton Date: Tue, 4 Apr 2023 23:12:34 +0000 Subject: [PATCH 01/11] first spec --- spec/features/1_basic_spec.rb | 10 ++++++++++ spec/features/dummy_spec.rb | 7 ------- 2 files changed, 10 insertions(+), 7 deletions(-) create mode 100644 spec/features/1_basic_spec.rb delete mode 100644 spec/features/dummy_spec.rb diff --git a/spec/features/1_basic_spec.rb b/spec/features/1_basic_spec.rb new file mode 100644 index 0000000..438f117 --- /dev/null +++ b/spec/features/1_basic_spec.rb @@ -0,0 +1,10 @@ +require "rails_helper" + +describe "The /movies page" do + it "can be visited", points: 0 do + visit "/movies" + + expect(page.status_code).to be(200), + "Expected to visit /movies successfully, but didn't find it." + end +end diff --git a/spec/features/dummy_spec.rb b/spec/features/dummy_spec.rb deleted file mode 100644 index a2c737b..0000000 --- a/spec/features/dummy_spec.rb +++ /dev/null @@ -1,7 +0,0 @@ -require "rails_helper" - -describe "This project" do - it "has no tests" do - expect(1).to eq(1) - end -end From 5bb984f9792a4829b57d9b20e5d701271cc736d9 Mon Sep 17 00:00:00 2001 From: Ben Purinton Date: Tue, 4 Apr 2023 23:20:10 +0000 Subject: [PATCH 02/11] added another spec --- spec/features/1_basic_spec.rb | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/spec/features/1_basic_spec.rb b/spec/features/1_basic_spec.rb index 438f117..34c35d3 100644 --- a/spec/features/1_basic_spec.rb +++ b/spec/features/1_basic_spec.rb @@ -1,10 +1,19 @@ require "rails_helper" describe "The /movies page" do - it "can be visited", points: 0 do + it "can be visited", points: 1 do visit "/movies" expect(page.status_code).to be(200), "Expected to visit /movies successfully, but didn't find it." end end + +describe "The /insert_movies page" do + it "can be visited", points: 1 do + visit "/insert_movies" + + expect(page.status_code).to be(200), + "Expected to visit /insert_movies successfully, but didn't find it." + end +end From ec00e867803fa12741b63321c49159e3146da2da Mon Sep 17 00:00:00 2001 From: Ben Purinton Date: Tue, 4 Apr 2023 23:44:32 +0000 Subject: [PATCH 03/11] remove bad spec --- spec/features/1_basic_spec.rb | 9 --------- 1 file changed, 9 deletions(-) diff --git a/spec/features/1_basic_spec.rb b/spec/features/1_basic_spec.rb index 34c35d3..ad886e7 100644 --- a/spec/features/1_basic_spec.rb +++ b/spec/features/1_basic_spec.rb @@ -8,12 +8,3 @@ "Expected to visit /movies successfully, but didn't find it." end end - -describe "The /insert_movies page" do - it "can be visited", points: 1 do - visit "/insert_movies" - - expect(page.status_code).to be(200), - "Expected to visit /insert_movies successfully, but didn't find it." - end -end From 6817ea86f622cd666b4556450947370b31061dd1 Mon Sep 17 00:00:00 2001 From: Ben Purinton Date: Wed, 5 Apr 2023 03:13:04 +0000 Subject: [PATCH 04/11] added a bunch of specs --- spec/features/1_basic_spec.rb | 62 +++++++++++++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 3 deletions(-) diff --git a/spec/features/1_basic_spec.rb b/spec/features/1_basic_spec.rb index ad886e7..fd03ea4 100644 --- a/spec/features/1_basic_spec.rb +++ b/spec/features/1_basic_spec.rb @@ -1,10 +1,66 @@ require "rails_helper" describe "The /movies page" do + before do + visit movies_path + end + + it "can be visited", points: 1 do + expect(page.status_code).to be(200), + "Expected to visit /movies successfully." + end + + it "has a link to add a movie", points: 1 do + expect(page).to have_link('Add a new movie', href: movies_new_path), + "Expected /movies to have an 'Add a new movie' link to '/movies/new'." + end +end + +describe "The /movies/new page" do + before do + visit movies_new_path + end + + it "can be visited", points: 1 do + expect(page.status_code).to be(200), + "Expected to visit /movies/new successfully." + end + + it "has a form", points: 1 do + expect(page).to have_selector("form[action='/movies']"), + "Expected /movies/new to have a form with action='/movies'." + end + + it "has a hidden authenticity token input", points: 2 do + expect(page).to have_selector("input[name='authenticity_token']", visible: false), + "Expected the new movie form to have an input field of type='hidden' and name='authenticity_token'." + end + + it "creates a movie successfully", point: 1 do + fill_in "Title", with: "My test movie" + fill_in "Description", with: "description" + click_button "Create movie" + expect(page).to have_content("Movie created successfully."), + "Expected to fill in the new movie form, click 'Create movie', and be redirected to the movie index with a success notice" + end +end + +describe "The movie details page" do + before do + @movie = Movie.create( + title: "My title", + description: "My description" + ) + visit "/movies/#{@movie.id}" + end + it "can be visited", points: 1 do - visit "/movies" - expect(page.status_code).to be(200), - "Expected to visit /movies successfully, but didn't find it." + "Expected to visit /movies/ID successfully." + end + + it "has a link to delete the movie with a DELETE request", points: 2 do + expect(page).to have_selector("a[href='/movies/#{ @movie.id }'][data-method='delete']", text: 'Delete movie'), + "Expected /movies/ID to have 'Delete movie' link with the proper data-method='delete'." end end From 1b0dd3e4757c94136b56fd8ca51c732349ed3dd0 Mon Sep 17 00:00:00 2001 From: Ben Purinton Date: Wed, 5 Apr 2023 03:17:18 +0000 Subject: [PATCH 05/11] removing route helper methods --- spec/features/1_basic_spec.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/features/1_basic_spec.rb b/spec/features/1_basic_spec.rb index fd03ea4..574cbf9 100644 --- a/spec/features/1_basic_spec.rb +++ b/spec/features/1_basic_spec.rb @@ -2,7 +2,7 @@ describe "The /movies page" do before do - visit movies_path + visit "/movies" end it "can be visited", points: 1 do @@ -11,14 +11,14 @@ end it "has a link to add a movie", points: 1 do - expect(page).to have_link('Add a new movie', href: movies_new_path), + expect(page).to have_link('Add a new movie', href: "movies/new"), "Expected /movies to have an 'Add a new movie' link to '/movies/new'." end end describe "The /movies/new page" do before do - visit movies_new_path + visit "movies/new" end it "can be visited", points: 1 do From 28d2489a0643067e260de0a421034d514bc52abe Mon Sep 17 00:00:00 2001 From: Ben Purinton Date: Wed, 5 Apr 2023 03:30:50 +0000 Subject: [PATCH 06/11] added edit (patch) tests --- spec/features/1_basic_spec.rb | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/spec/features/1_basic_spec.rb b/spec/features/1_basic_spec.rb index 574cbf9..2dff7a0 100644 --- a/spec/features/1_basic_spec.rb +++ b/spec/features/1_basic_spec.rb @@ -2,7 +2,7 @@ describe "The /movies page" do before do - visit "/movies" + visit movies_path end it "can be visited", points: 1 do @@ -11,14 +11,14 @@ end it "has a link to add a movie", points: 1 do - expect(page).to have_link('Add a new movie', href: "movies/new"), + expect(page).to have_link('Add a new movie', href: movies_new_path), "Expected /movies to have an 'Add a new movie' link to '/movies/new'." end end describe "The /movies/new page" do before do - visit "movies/new" + visit movies_new_path end it "can be visited", points: 1 do @@ -64,3 +64,28 @@ "Expected /movies/ID to have 'Delete movie' link with the proper data-method='delete'." end end + +describe "The movie edit page" do + before do + @movie = Movie.create( + title: "My title", + description: "My description" + ) + visit "/movies/#{@movie.id}/edit" + end + + it "can be visited", points: 1 do + expect(page.status_code).to be(200), + "Expected to visit /movies/ID/edit successfully." + end + + it "has a form", points: 1 do + expect(page).to have_selector("form[action='/movies/#{@movie.id}'][method='post']"), + "Expected /movies/ID/edit to have a form with action='/movies/ID' and method='post'." + end + + it "has a hidden patch input", points: 2 do + expect(page).to have_selector("input[name='_method'][value='patch']", visible: false), + "Expected the edit movie form to have an input field of type='hidden' with name='_method' and value='patch'." + end +end From 6a117d5e2ffbb43895543c4755c056ccc79a5943 Mon Sep 17 00:00:00 2001 From: Ben Purinton Date: Wed, 5 Apr 2023 03:34:51 +0000 Subject: [PATCH 07/11] removed route helper methods --- spec/features/1_basic_spec.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/features/1_basic_spec.rb b/spec/features/1_basic_spec.rb index 2dff7a0..1ca47b8 100644 --- a/spec/features/1_basic_spec.rb +++ b/spec/features/1_basic_spec.rb @@ -2,7 +2,7 @@ describe "The /movies page" do before do - visit movies_path + visit "/movies" end it "can be visited", points: 1 do @@ -11,14 +11,14 @@ end it "has a link to add a movie", points: 1 do - expect(page).to have_link('Add a new movie', href: movies_new_path), + expect(page).to have_link('Add a new movie', href: "/movies/new"), "Expected /movies to have an 'Add a new movie' link to '/movies/new'." end end describe "The /movies/new page" do before do - visit movies_new_path + visit "/movies/new" end it "can be visited", points: 1 do From 2b0356ca091aeb29f851b6161edb186206ce3b1c Mon Sep 17 00:00:00 2001 From: Ben Purinton Date: Wed, 5 Apr 2023 09:24:55 -0800 Subject: [PATCH 08/11] change movie to Movie to match helper-methods --- spec/features/1_basic_spec.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/features/1_basic_spec.rb b/spec/features/1_basic_spec.rb index 1ca47b8..b03e1a2 100644 --- a/spec/features/1_basic_spec.rb +++ b/spec/features/1_basic_spec.rb @@ -39,9 +39,9 @@ it "creates a movie successfully", point: 1 do fill_in "Title", with: "My test movie" fill_in "Description", with: "description" - click_button "Create movie" + click_button "Create Movie" expect(page).to have_content("Movie created successfully."), - "Expected to fill in the new movie form, click 'Create movie', and be redirected to the movie index with a success notice" + "Expected to fill in the new movie form, click 'Create Movie', and be redirected to the movie index with a success notice" end end @@ -60,8 +60,8 @@ end it "has a link to delete the movie with a DELETE request", points: 2 do - expect(page).to have_selector("a[href='/movies/#{ @movie.id }'][data-method='delete']", text: 'Delete movie'), - "Expected /movies/ID to have 'Delete movie' link with the proper data-method='delete'." + expect(page).to have_selector("a[href='/movies/#{ @movie.id }'][data-method='delete']", text: 'Delete Movie'), + "Expected /movies/ID to have 'Delete Movie' link with the proper data-method='delete'." end end From 986dc3e0de58099b009c387e28fb22e4a368cba8 Mon Sep 17 00:00:00 2001 From: Ben Purinton Date: Wed, 5 Apr 2023 19:28:24 +0000 Subject: [PATCH 09/11] PR comment un-DRY visit --- spec/features/1_basic_spec.rb | 40 ++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/spec/features/1_basic_spec.rb b/spec/features/1_basic_spec.rb index b03e1a2..58cb2fe 100644 --- a/spec/features/1_basic_spec.rb +++ b/spec/features/1_basic_spec.rb @@ -1,47 +1,54 @@ require "rails_helper" describe "The /movies page" do - before do - visit "/movies" - end it "can be visited", points: 1 do + visit "/movies" + expect(page.status_code).to be(200), "Expected to visit /movies successfully." end it "has a link to add a movie", points: 1 do + visit "/movies" + expect(page).to have_link('Add a new movie', href: "/movies/new"), "Expected /movies to have an 'Add a new movie' link to '/movies/new'." end end describe "The /movies/new page" do - before do - visit "/movies/new" - end it "can be visited", points: 1 do + visit "/movies/new" + expect(page.status_code).to be(200), "Expected to visit /movies/new successfully." end it "has a form", points: 1 do + visit "/movies/new" + expect(page).to have_selector("form[action='/movies']"), "Expected /movies/new to have a form with action='/movies'." end it "has a hidden authenticity token input", points: 2 do + visit "/movies/new" + expect(page).to have_selector("input[name='authenticity_token']", visible: false), "Expected the new movie form to have an input field of type='hidden' and name='authenticity_token'." end it "creates a movie successfully", point: 1 do + visit "/movies/new" + fill_in "Title", with: "My test movie" fill_in "Description", with: "description" - click_button "Create Movie" + click_button "Create movie" + expect(page).to have_content("Movie created successfully."), - "Expected to fill in the new movie form, click 'Create Movie', and be redirected to the movie index with a success notice" + "Expected to fill in the new movie form, click 'Create movie', and be redirected to the movie index with a success notice" end end @@ -51,17 +58,20 @@ title: "My title", description: "My description" ) - visit "/movies/#{@movie.id}" end it "can be visited", points: 1 do + visit "/movies/#{@movie.id}" + expect(page.status_code).to be(200), "Expected to visit /movies/ID successfully." end it "has a link to delete the movie with a DELETE request", points: 2 do - expect(page).to have_selector("a[href='/movies/#{ @movie.id }'][data-method='delete']", text: 'Delete Movie'), - "Expected /movies/ID to have 'Delete Movie' link with the proper data-method='delete'." + visit "/movies/#{@movie.id}" + + expect(page).to have_selector("a[href='/movies/#{ @movie.id }'][data-method='delete']", text: 'Delete movie'), + "Expected /movies/ID to have 'Delete movie' link with the proper data-method='delete'." end end @@ -71,21 +81,27 @@ title: "My title", description: "My description" ) - visit "/movies/#{@movie.id}/edit" end it "can be visited", points: 1 do + visit "/movies/#{@movie.id}/edit" + expect(page.status_code).to be(200), "Expected to visit /movies/ID/edit successfully." end it "has a form", points: 1 do + visit "/movies/#{@movie.id}/edit" + expect(page).to have_selector("form[action='/movies/#{@movie.id}'][method='post']"), "Expected /movies/ID/edit to have a form with action='/movies/ID' and method='post'." end it "has a hidden patch input", points: 2 do + visit "/movies/#{@movie.id}/edit" + expect(page).to have_selector("input[name='_method'][value='patch']", visible: false), "Expected the edit movie form to have an input field of type='hidden' with name='_method' and value='patch'." end end + From ed1e2314497db0671e11253e8f5baca5c8d4e7d8 Mon Sep 17 00:00:00 2001 From: Ben Purinton Date: Wed, 5 Apr 2023 19:31:47 +0000 Subject: [PATCH 10/11] remove some extra new lines --- spec/features/1_basic_spec.rb | 3 --- 1 file changed, 3 deletions(-) diff --git a/spec/features/1_basic_spec.rb b/spec/features/1_basic_spec.rb index 58cb2fe..12627b9 100644 --- a/spec/features/1_basic_spec.rb +++ b/spec/features/1_basic_spec.rb @@ -1,7 +1,6 @@ require "rails_helper" describe "The /movies page" do - it "can be visited", points: 1 do visit "/movies" @@ -18,7 +17,6 @@ end describe "The /movies/new page" do - it "can be visited", points: 1 do visit "/movies/new" @@ -104,4 +102,3 @@ "Expected the edit movie form to have an input field of type='hidden' with name='_method' and value='patch'." end end - From b42f2682411e6183fc47310d540f6ad5805c9488 Mon Sep 17 00:00:00 2001 From: Ben Purinton Date: Wed, 5 Apr 2023 19:37:52 +0000 Subject: [PATCH 11/11] PR comment replace before with let --- spec/features/1_basic_spec.rb | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/spec/features/1_basic_spec.rb b/spec/features/1_basic_spec.rb index 12627b9..03cb704 100644 --- a/spec/features/1_basic_spec.rb +++ b/spec/features/1_basic_spec.rb @@ -51,53 +51,43 @@ end describe "The movie details page" do - before do - @movie = Movie.create( - title: "My title", - description: "My description" - ) - end + let(:movie) { Movie.create(title: "My title", description: "My description") } it "can be visited", points: 1 do - visit "/movies/#{@movie.id}" + visit "/movies/#{movie.id}" expect(page.status_code).to be(200), "Expected to visit /movies/ID successfully." end it "has a link to delete the movie with a DELETE request", points: 2 do - visit "/movies/#{@movie.id}" + visit "/movies/#{movie.id}" - expect(page).to have_selector("a[href='/movies/#{ @movie.id }'][data-method='delete']", text: 'Delete movie'), + expect(page).to have_selector("a[href='/movies/#{movie.id}'][data-method='delete']", text: 'Delete movie'), "Expected /movies/ID to have 'Delete movie' link with the proper data-method='delete'." end end describe "The movie edit page" do - before do - @movie = Movie.create( - title: "My title", - description: "My description" - ) - end + let(:movie) { Movie.create(title: "My title", description: "My description") } it "can be visited", points: 1 do - visit "/movies/#{@movie.id}/edit" + visit "/movies/#{movie.id}/edit" expect(page.status_code).to be(200), "Expected to visit /movies/ID/edit successfully." end it "has a form", points: 1 do - visit "/movies/#{@movie.id}/edit" + visit "/movies/#{movie.id}/edit" - expect(page).to have_selector("form[action='/movies/#{@movie.id}'][method='post']"), + expect(page).to have_selector("form[action='/movies/#{movie.id}'][method='post']"), "Expected /movies/ID/edit to have a form with action='/movies/ID' and method='post'." end it "has a hidden patch input", points: 2 do - visit "/movies/#{@movie.id}/edit" - + visit "/movies/#{movie.id}/edit" + expect(page).to have_selector("input[name='_method'][value='patch']", visible: false), "Expected the edit movie form to have an input field of type='hidden' with name='_method' and value='patch'." end