From 66de26049cd7e932e95c64d85d259188727a3aaf Mon Sep 17 00:00:00 2001 From: David Hardy Date: Sat, 16 Mar 2019 17:39:11 -0600 Subject: [PATCH 1/4] Completed funtionality for all user stories except 7 --- app/controllers/laugh_tracks_app.rb | 11 ++++ app/models/comedian.rb | 8 +++ app/models/special.rb | 11 ++++ app/public/stylesheets/main.css | 12 ++++ app/public/stylesheets/reset.css | 43 +++++++++++++ app/views/comedians/index.erb | 63 +++++++++++++++++++ db/migrate/20190314191008_create_comedians.rb | 10 +++ db/migrate/20190314201107_create_specials.rb | 10 +++ db/schema.rb | 16 ++++- db/seeds.rb | 42 +++++++++++++ 10 files changed, 225 insertions(+), 1 deletion(-) create mode 100644 app/models/special.rb create mode 100644 app/public/stylesheets/main.css create mode 100644 app/public/stylesheets/reset.css create mode 100644 app/views/comedians/index.erb create mode 100644 db/migrate/20190314191008_create_comedians.rb create mode 100644 db/migrate/20190314201107_create_specials.rb diff --git a/app/controllers/laugh_tracks_app.rb b/app/controllers/laugh_tracks_app.rb index 82ce47e7..17a6e1fc 100644 --- a/app/controllers/laugh_tracks_app.rb +++ b/app/controllers/laugh_tracks_app.rb @@ -1,2 +1,13 @@ class LaughTracksApp < Sinatra::Base + set :public_folder, File.dirname(__FILE__) + '../public' + + get '/comedians' do + if params[:age] + @comedians = Comedian.where(age: params[:age]) + else + @comedians = Comedian.all + end + @specials = Special.all + erb :"comedians/index" + end end diff --git a/app/models/comedian.rb b/app/models/comedian.rb index f490b4a2..aad196e5 100644 --- a/app/models/comedian.rb +++ b/app/models/comedian.rb @@ -1,2 +1,10 @@ class Comedian < ActiveRecord::Base + has_many :specials + validates_presence_of :name, + :age, + :birthplace + + def self.average_age + average(:age).round + end end diff --git a/app/models/special.rb b/app/models/special.rb new file mode 100644 index 00000000..2e4601f6 --- /dev/null +++ b/app/models/special.rb @@ -0,0 +1,11 @@ +class Special < ActiveRecord::Base + belongs_to :comedians + validates_presence_of :name + :runtime_mins + :comedian_id + :image_url + + def self.average_special_length + average(:runtime_mins).round + end +end diff --git a/app/public/stylesheets/main.css b/app/public/stylesheets/main.css new file mode 100644 index 00000000..7dc9db5b --- /dev/null +++ b/app/public/stylesheets/main.css @@ -0,0 +1,12 @@ +body { + background-color: orange; +} + +h1 { + background-color: blue; +} + +img { + height: 150px; + width: 200px; +} diff --git a/app/public/stylesheets/reset.css b/app/public/stylesheets/reset.css new file mode 100644 index 00000000..0e5f2e0c --- /dev/null +++ b/app/public/stylesheets/reset.css @@ -0,0 +1,43 @@ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: 1; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} diff --git a/app/views/comedians/index.erb b/app/views/comedians/index.erb new file mode 100644 index 00000000..2086fea3 --- /dev/null +++ b/app/views/comedians/index.erb @@ -0,0 +1,63 @@ + + + + + Comedians + + +
+

Statistics

+ +
+
+ <% @comedians.each do |comedian| %> + + <% end %> +
+
+
+
+
+
+ + + + + diff --git a/db/migrate/20190314191008_create_comedians.rb b/db/migrate/20190314191008_create_comedians.rb new file mode 100644 index 00000000..d9228db9 --- /dev/null +++ b/db/migrate/20190314191008_create_comedians.rb @@ -0,0 +1,10 @@ +class CreateComedians < ActiveRecord::Migration[5.2] + def change + create_table :comedians do |t| + t.text :name + t.integer :age + t.text :birthplace + t.text :image_url + end + end +end diff --git a/db/migrate/20190314201107_create_specials.rb b/db/migrate/20190314201107_create_specials.rb new file mode 100644 index 00000000..dad8d9ed --- /dev/null +++ b/db/migrate/20190314201107_create_specials.rb @@ -0,0 +1,10 @@ +class CreateSpecials < ActiveRecord::Migration[5.2] + def change + create_table :specials do |t| + t.text :name + t.integer :runtime_mins + t.integer :comedian_id + t.text :image_url + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 2611543b..4e31b469 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,9 +10,23 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 0) do +ActiveRecord::Schema.define(version: 2019_03_14_201107) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" + create_table "comedians", force: :cascade do |t| + t.text "name" + t.integer "age" + t.text "birthplace" + t.text "image_url" + end + + create_table "specials", force: :cascade do |t| + t.text "name" + t.integer "runtime_mins" + t.integer "comedian_id" + t.text "image_url" + end + end diff --git a/db/seeds.rb b/db/seeds.rb index 8b137891..584214fd 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -1 +1,43 @@ +require_relative '../app/models/comedian.rb' +require_relative '../app/models/special.rb' +Special.destroy_all +Comedian.destroy_all +Comedian.create(name: "Bill Burr", age: 50, birthplace: "Canton, MA", image_url: "https://image.masslive.com/home/mass-media/width960/img/entertainment/photo/nashville-comedy-festival-21d347107e975672.jpg") +Comedian.create(name: "Joe Rogan", age: 51, birthplace: "Newark, NJ", image_url: "https://www.maxim.com/.image/c_limit%2Ccs_srgb%2Cq_auto:good%2Cw_1400/MTQ4NDk2MjMzNzY0MjM0Nzc2/joe-rogan.webp") +Comedian.create(name: "Louis C.K.", age: 51, birthplace: "Washington, D.C.", image_url: "https://media1.fdncms.com/pittsburgh/imager/u/blog/13239255/louis_ck_kuwait_crop_cropped.jpg?cb=1548183367") +Comedian.create(name: "Joey Diaz", age: 55, birthplace: "Havana, Cuba", image_url: "https://comedycentral.mtvnimages.com/images/ccstandup/comedians/800x600/JoeyDiaz_800x600.jpg?quality=0.91&width=320&height=320&crop=true") +Comedian.create(name: "Chad Daniels", age: 43, birthplace: "Fergus Falls, MN", image_url: "https://www.rumorscomedyclub.com/wp-content/uploads/2016/09/Chad-2019-bio.jpg") +Comedian.create(name: "Kevin Hart", age: 39, birthplace: "Philadelphia, PA", image_url: "http://www.philly.com/resizer/bHw4bvIexfBozzYo6gSgV1vpEXk=/1400x932/center/middle/arc-anglerfish-arc2-prod-pmn.s3.amazonaws.com/public/DBTWGCGWV5C7ZJBACNCBPOCUWE.jpg") +Comedian.create(name: "Dave Chappelle", age: 45, birthplace: "Washington, D.C.", image_url: "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTII3JGyHZiZx-tRsKYcDk8jotJ6kK6yGNiCof1mLfTw5DxekFZtg") +Comedian.create(name: "Chris Rock", age: 53, birthplace: "Andrews, SC", image_url: "https://static.independent.co.uk/s3fs-public/thumbnails/image/2018/02/14/14/chris-rock-netflix.jpg?w968") +Comedian.create(name: "Tom Segura", age: 39, birthplace: "Cincinnati, OH", image_url: "https://pixel.nymag.com/imgs/daily/vulture/2018/07/12/splitsider/879409292.w700.h467.2x.jpg") +Comedian.create(name: "Ari Shaffir", age: 44, birthplace: "New York City, NY", image_url: "https://i2.wp.com/www.foodrepublic.com/wp-content/uploads/2016/02/Ari-Shaffir-TINH-1.jpg?resize=1400%2C2100") +Comedian.create(name: "Theo Von", age: 38, birthplace: "Mandeville, LA", image_url: "https://uproxx.files.wordpress.com/2016/02/theo-von-no-offense-feature.jpg?quality=95") +Comedian.create(name: "Jerry Seinfeld", age: 64, birthplace: "Brooklyn, NY", image_url: "https://www.gannett-cdn.com/-mm-/aec403ad632f33650ec1aa7926a673a5a6b987b8/c=420-0-2149-1300/local/-/media/2015/09/17/Westchester/Westchester/635780965457520146--ASBBrd-07-27-2012-PressMon-1-A002-2012-07-26-IMG-People-Seinfeld-7-1-4U1UD.jpg?width=534&height=401&fit=crop") + +Special.create(name: "Walk Your Way Out", runtime_mins: 77, comedian_id: 1, image_url: "https://m.media-amazon.com/images/M/MV5BMGYwNDE4MDItNjQwYi00NWIwLWJmYTYtY2I5NDEyMGUxNWMwL2ltYWdlXkEyXkFqcGdeQXVyMjUwMTM3MTU@._V1_.jpg") +Special.create(name: "I'm Sorry You Feel That Way", runtime_mins: 80, comedian_id: 1, image_url: "https://m.media-amazon.com/images/M/MV5BMTk0MzI5MjAxNV5BMl5BanBnXkFtZTgwNDY1NzA0NDE@._V1_SY1000_SX675_AL_.jpg") +Special.create(name: "You People Are All The Same", runtime_mins: 69, comedian_id: 1, image_url: "https://m.media-amazon.com/images/M/MV5BMjAyZTI1NjMtNjQ3OC00MDhhLTkxMDgtMDVmMThhNjE5M2NkXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_.jpg") +Special.create(name: "Strange Times", runtime_mins: 63, comedian_id: 2, image_url: "https://m.media-amazon.com/images/M/MV5BNzc2Mzg5YmMtMzM1NC00NDgwLTljYWQtZDdkNzBmNjZkNmJhXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_.jpg") +Special.create(name: "Triggered", runtime_mins: 63, comedian_id: 2, image_url: "https://m.media-amazon.com/images/M/MV5BYTE0M2FkNGMtYjYxNi00MDRkLWE0YWUtNWI4NWU3NWIzMWIzXkEyXkFqcGdeQXVyMzE5NzI0NjE@._V1_.jpg") +Special.create(name: "Rocky Mountain High", runtime_mins: 63, comedian_id: 2, image_url: "https://m.media-amazon.com/images/M/MV5BNjI4OGY5MTktZjNiNC00MTgyLTlhZGMtMzBhYzcyZTI5YTljXkEyXkFqcGdeQXVyMTk3NDAwMzI@._V1_SY1000_SX750_AL_.jpg") +Special.create(name: "Oh My God", runtime_mins: 58, comedian_id: 3, image_url: "https://m.media-amazon.com/images/M/MV5BMjQ4NjQwOTYzNl5BMl5BanBnXkFtZTcwNjU2NjczOQ@@._V1_.jpg") +Special.create(name: "Live At The Beacon Theater", runtime_mins: 63, comedian_id: 3, image_url: "https://m.media-amazon.com/images/M/MV5BNzIxMTUxMjYzMV5BMl5BanBnXkFtZTcwMDYwMjE0Nw@@._V1_.jpg") +Special.create(name: "Hilarious", runtime_mins: 88, comedian_id: 3, image_url: "https://m.media-amazon.com/images/M/MV5BNTQyODYyNzcxN15BMl5BanBnXkFtZTgwOTA3MzcwMzE@._V1_.jpg") +Special.create(name: "Sociably Unacceptable", runtime_mins: 57, comedian_id: 4, image_url: "https://m.media-amazon.com/images/M/MV5BZTAxNTViYmUtYWU0OC00YTNhLTg3YTYtMTkwMjgzOTFkZGFmL2ltYWdlXkEyXkFqcGdeQXVyMzcwMjcwNQ@@._V1_SY1000_CR0,0,666,1000_AL_.jpg") +Special.create(name: "As Is", runtime_mins: 52, comedian_id: 5, image_url: "https://m.media-amazon.com/images/M/MV5BODY2OWIxYzMtYjEwOS00ZjRiLWI3ZGEtMWFmYTQxOTFiY2E1L2ltYWdlXkEyXkFqcGdeQXVyNTM3MDMyMDQ@._V1_.jpg") +Special.create(name: "I'm A Grown Little Man", runtime_mins: 73, comedian_id: 6, image_url: "https://m.media-amazon.com/images/M/MV5BMjI4MTYwNTUzMF5BMl5BanBnXkFtZTcwODk1Mjk3Mw@@._V1_.jpg") +Special.create(name: "Let Me Explain", runtime_mins: 75, comedian_id: 6, image_url: "https://m.media-amazon.com/images/M/MV5BMTg4MjM2MjAxOF5BMl5BanBnXkFtZTcwMTAzOTEyOQ@@._V1_SY1000_CR0,0,673,1000_AL_.jpg") +Special.create(name: "What Now?", runtime_mins: 96, comedian_id: 6, image_url: "https://m.media-amazon.com/images/M/MV5BNzI2MDk3OTA5N15BMl5BanBnXkFtZTgwMDU1MDgxMDI@._V1_SY1000_CR0,0,674,1000_AL_.jpg") +Special.create(name: "Equaniminity", runtime_mins: 60, comedian_id: 7, image_url: "https://m.media-amazon.com/images/M/MV5BODJkMTAxNmYtZDg4OS00NzA2LTlmZTUtMDc2MjIwMzE4ZDMxXkEyXkFqcGdeQXVyMTk3NDAwMzI@._V1_.jpg") +Special.create(name: "Killin' Them Softly", runtime_mins: 57, comedian_id: 7, image_url: "https://m.media-amazon.com/images/M/MV5BMTcyOGMxN2MtYzUwYy00YzQxLTgwZTItZjAxZTIzYWM1YzEyXkEyXkFqcGdeQXVyNjExODE1MDc@._V1_.jpg") +Special.create(name: "Kill The Messanger", runtime_mins: 79, comedian_id: 8, image_url: "https://m.media-amazon.com/images/M/MV5BMjAwMjQxNDA5OF5BMl5BanBnXkFtZTcwNTE3MzM5MQ@@._V1_.jpg") +Special.create(name: "Bigger & Blacker", runtime_mins: 65, comedian_id: 8, image_url: "https://m.media-amazon.com/images/M/MV5BODQzOWExYjktZDQ2OC00YTA5LWI3YzctMDFjNjc3ZTM5NTA0XkEyXkFqcGdeQXVyMTk3NDAwMzI@._V1_.jpg") +Special.create(name: "Never Scared", runtime_mins: 80, comedian_id: 8, image_url: "https://m.media-amazon.com/images/M/MV5BMTlhYzMzNzItNWMyYy00ZGRlLWI1N2UtOGI2YjIwOGEwYTViXkEyXkFqcGdeQXVyMTk3NDAwMzI@._V1_SY1000_CR0,0,666,1000_AL_.jpg") +Special.create(name: "Mostly Stories", runtime_mins: 73, comedian_id: 9, image_url: "https://m.media-amazon.com/images/M/MV5BZWE2Nzc5N2YtOWM0OS00ZWVmLThhOTctNjNlNGI0NTQzMTU5XkEyXkFqcGdeQXVyMzAzODY0NzE@._V1_.jpg") +Special.create(name: "Completely Normal", runtime_mins: 74, comedian_id: 9, image_url: "https://m.media-amazon.com/images/M/MV5BMTcyODE0Mzk1Nl5BMl5BanBnXkFtZTgwMDk4ODE0NDE@._V1_.jpg") +Special.create(name: "Paid Regular", runtime_mins: 73, comedian_id: 10, image_url: "https://m.media-amazon.com/images/M/MV5BMjBlMGE4ZWUtZmExOC00NzcxLWFkMjMtNDYwMzczOGQ0NzRlXkEyXkFqcGdeQXVyNTMxMjgxMzA@._V1_.jpg") +Special.create(name: "Passive Aggressive", runtime_mins: 60, comedian_id: 10, image_url: "https://m.media-amazon.com/images/M/MV5BMTYzNDUyMjE4M15BMl5BanBnXkFtZTcwMTQ3NzQxOQ@@._V1_SY1000_CR0,0,647,1000_AL_.jpg") +Special.create(name: "No Offense", runtime_mins: 66, comedian_id: 11, image_url: "https://m.media-amazon.com/images/M/MV5BODMyZjU2NWQtMTI2ZC00Y2ZkLTllYjItNjNiM2Y1NTIyMmIyXkEyXkFqcGdeQXVyNjYzMDA4MTI@._V1_.jpg") +Special.create(name: "Jerry Before Seinfeld", runtime_mins: 62, comedian_id: 12, image_url: "https://m.media-amazon.com/images/M/MV5BOTc2N2I0Y2UtOTgyYy00MTU3LTk1YzItZGIwMDcxY2JkMGQzXkEyXkFqcGdeQXVyMjQzNzk2ODk@._V1_.jpg") From 1c743914a19cc0806d1c3f3ab0da5f1aeacad1d2 Mon Sep 17 00:00:00 2001 From: David Hardy Date: Sat, 16 Mar 2019 20:03:39 -0600 Subject: [PATCH 2/4] Functionality of site is completed --- app/controllers/laugh_tracks_app.rb | 10 ++++++++++ app/models/comedian.rb | 4 ++-- app/public/stylesheets/main.css | 2 +- app/views/comedians/index.erb | 9 +++++++-- app/views/comedians/new.erb | 12 ++++++++++++ 5 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 app/views/comedians/new.erb diff --git a/app/controllers/laugh_tracks_app.rb b/app/controllers/laugh_tracks_app.rb index 17a6e1fc..3b82019e 100644 --- a/app/controllers/laugh_tracks_app.rb +++ b/app/controllers/laugh_tracks_app.rb @@ -10,4 +10,14 @@ class LaughTracksApp < Sinatra::Base @specials = Special.all erb :"comedians/index" end + + get '/comedians/new' do + erb :"comedians/new" + end + + post '/comedians' do + comedian = Comedian.new(params[:comedian]) + comedian.save + redirect '/comedians' + end end diff --git a/app/models/comedian.rb b/app/models/comedian.rb index aad196e5..82df0b6d 100644 --- a/app/models/comedian.rb +++ b/app/models/comedian.rb @@ -1,8 +1,8 @@ class Comedian < ActiveRecord::Base has_many :specials validates_presence_of :name, - :age, - :birthplace + :age, + :birthplace def self.average_age average(:age).round diff --git a/app/public/stylesheets/main.css b/app/public/stylesheets/main.css index 7dc9db5b..3cc374d3 100644 --- a/app/public/stylesheets/main.css +++ b/app/public/stylesheets/main.css @@ -1,5 +1,5 @@ body { - background-color: orange; + background-color: red; } h1 { diff --git a/app/views/comedians/index.erb b/app/views/comedians/index.erb index 2086fea3..4dade121 100644 --- a/app/views/comedians/index.erb +++ b/app/views/comedians/index.erb @@ -21,7 +21,12 @@ <% @comedians.each do |comedian| %> <% @num += comedian.specials.count %> <% end %> -
  • Average TV Special Run Length: <%= @sum/@num %> mins
  • + <% if @num == 0 %> + <% @average = 0 %> + <% else %> + <% @average = @sum / @num %> + <% end %> +
  • Average TV Special Run Length: <%= @average %> mins
  • Birth Cities:
  • <% @comedians.each do |comedian| %> @@ -40,7 +45,7 @@
  • <%= comedian.name %>
  • Age: <%= comedian.age %>
  • Birthplace: <%= comedian.birthplace %>
  • -
  • Image Url: >
  • +
  • >
  • Special Count: <%= comedian.specials.count %>
  • Specials: <% comedian.specials.each do |special| %>
  • <%= special.name %>
  • diff --git a/app/views/comedians/new.erb b/app/views/comedians/new.erb new file mode 100644 index 00000000..ebcd4345 --- /dev/null +++ b/app/views/comedians/new.erb @@ -0,0 +1,12 @@ +
    +

    Enter info for a new Comedian:

    + Name:
    +
    + Age:
    +
    + Birthplace:
    +
    + Image url:
    +
    + +
    From 410549abc3151524a520653d63b207c4ca10e399 Mon Sep 17 00:00:00 2001 From: David Hardy Date: Sun, 17 Mar 2019 18:11:03 -0600 Subject: [PATCH 3/4] Finished model tests, starting to write feature tests --- .DS_Store | Bin 0 -> 6148 bytes .gitignore | 1 + Gemfile | 1 + app/models/comedian.rb | 3 +- app/models/special.rb | 6 +- app/public/stylesheets/main.css | 81 ++++++++++++++++-- app/views/comedians/index.erb | 56 ++++++------ .../comedian_info_message/index_spec.rb | 30 +++++++ spec/models/comedian_spec.rb | 39 +++++++-- spec/models/special_spec.rb | 34 +++++++- spec/spec_helper.rb | 5 +- 11 files changed, 207 insertions(+), 49 deletions(-) create mode 100644 .DS_Store create mode 100644 spec/features/comedian_info_message/index_spec.rb diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..1ad899dbcdc748036dd701eacb0ec11e243703d4 GIT binary patch literal 6148 zcmeHKyJ`bL3>+mc4$`I(2Sbbi#2M3J zT*oXyY@Q(Y!ZDE|1kgGlC+ZoQs7@HV6)|Fx!@~RZ=JlH_u58Z)4k@C?#6Xc7@{2$qaAbO f?f5y0vab1>=e=-D3_9~cC+cUwb&*MdzgFN1-fR_w literal 0 HcmV?d00001 diff --git a/.gitignore b/.gitignore index 941d9c3b..189f2d17 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ Gemfile.lock tmp/ +coverage diff --git a/Gemfile b/Gemfile index c16d5d2d..3456c2d8 100644 --- a/Gemfile +++ b/Gemfile @@ -14,4 +14,5 @@ group :development, :test do gem 'rspec' gem 'shotgun' gem 'tux' + gem 'simplecov' end diff --git a/app/models/comedian.rb b/app/models/comedian.rb index 82df0b6d..a7337a67 100644 --- a/app/models/comedian.rb +++ b/app/models/comedian.rb @@ -2,7 +2,8 @@ class Comedian < ActiveRecord::Base has_many :specials validates_presence_of :name, :age, - :birthplace + :birthplace, + :image_url def self.average_age average(:age).round diff --git a/app/models/special.rb b/app/models/special.rb index 2e4601f6..c891b3d1 100644 --- a/app/models/special.rb +++ b/app/models/special.rb @@ -1,8 +1,8 @@ class Special < ActiveRecord::Base belongs_to :comedians - validates_presence_of :name - :runtime_mins - :comedian_id + validates_presence_of :name, + :runtime_mins, + :comedian_id, :image_url def self.average_special_length diff --git a/app/public/stylesheets/main.css b/app/public/stylesheets/main.css index 3cc374d3..3160a3e4 100644 --- a/app/public/stylesheets/main.css +++ b/app/public/stylesheets/main.css @@ -1,12 +1,81 @@ -body { - background-color: red; + body { + background-color: orange; } -h1 { - background-color: blue; +header { + background: rgb(60, 60, 60); + height: 250px; + border-radius: 10%; +} + +#h1 { + display: table; + font-family: 'Fira Sans', sans-serif; + font-size: 20px; + padding: 25px; + margin: auto; + color: white; +} + +#stat_1{ + display: inline-block; + width: 22%; + height: 200px; + margin: 1em; + font-family: 'Fira Sans', sans-serif; + color: white; +} + +#stat_2 { + display:inline-block; + width: 22%; + height: 200px; + margin: 1em; + font-family: 'Fira Sans', sans-serif; + color: white; +} +#stat_3 { + display:inline-block; + width: 22%; + height: 200px; + margin: 1em; + font-family: 'Fira Sans', sans-serif; + color: white; +} +#stat_4 { + display: inline-block; + width: 22%; + height: 200px; + margin: 1em; + font-family: 'Fira Sans', sans-serif; + color: white } img { - height: 150px; - width: 200px; + border-radius: 20%; + display: block; + margin-left: auto; + margin-right: auto; + width: 20%; +} + +#h1 { + display: table; + font-family: 'Fira Sans', sans-serif; + font-size: 18px; + padding: 25px; + margin: auto; + color: white; } + +/* main { + display: flex; + flex-direction: row; +} */ + /* #info { + display: inline-block; +} + +#s_info { + display: inline-block; +} */ diff --git a/app/views/comedians/index.erb b/app/views/comedians/index.erb index 4dade121..e945fb7a 100644 --- a/app/views/comedians/index.erb +++ b/app/views/comedians/index.erb @@ -1,15 +1,16 @@ - + - Comedians +
    -

    Statistics

    +

    Comedian Info

    +
    <% @comedians.each do |comedian| %> -
      -
    • <%= comedian.name %>
    • -
    • Age: <%= comedian.age %>
    • -
    • Birthplace: <%= comedian.birthplace %>
    • -
    • >
    • -
    • Special Count: <%= comedian.specials.count %>
    • +
    • <%= comedian.name %>
    • +
    • Age: <%= comedian.age %>
    • +
    • Birthplace: <%= comedian.birthplace %>
    • + > +
    +
    +
  • Special Count: <%= comedian.specials.count %>
  • Specials: <% comedian.specials.each do |special| %>
  • -
  • <%= special.name %>
  • -
  • <%= special.runtime_mins %>
  • -
  • <%= special.comedian_id %>
  • -
  • +
  • <%= special.name %>
  • +
  • Length: <%= special.runtime_mins %>
  • + <% end %> - <% end %> +
    @@ -65,4 +72,3 @@
    - diff --git a/spec/features/comedian_info_message/index_spec.rb b/spec/features/comedian_info_message/index_spec.rb new file mode 100644 index 00000000..97d65b1c --- /dev/null +++ b/spec/features/comedian_info_message/index_spec.rb @@ -0,0 +1,30 @@ +=begin +As a visitor +When I visit `/comedians` +then I see a comedian info message +=end +RSpec.describe 'comedian info workflow' do + context 'as a visitor' do + it 'should show comedian info message' do + + + Comedian.create(name: "Bill Burr", age: 50, birthplace: "Canton, MA", image_url: "https://image.masslive.com/home/mass-media/width960/img/entertainment/photo/nashville-comedy-festival-21d347107e975672.jpg") + Comedian.create(name: "Joe Rogan", age: 51, birthplace: "Newark, NJ", image_url: "https://www.maxim.com/.image/c_limit%2Ccs_srgb%2Cq_auto:good%2Cw_1400/MTQ4NDk2MjMzNzY0MjM0Nzc2/joe-rogan.webp") + Comedian.create(name: "Louis C.K.", age: 51, birthplace: "Washington, D.C.", image_url: "https://media1.fdncms.com/pittsburgh/imager/u/blog/13239255/louis_ck_kuwait_crop_cropped.jpg?cb=1548183367") + + Special.create(name: "Walk Your Way Out", runtime_mins: 77, comedian_id: 1, image_url: "https://m.media-amazon.com/images/M/MV5BMGYwNDE4MDItNjQwYi00NWIwLWJmYTYtY2I5NDEyMGUxNWMwL2ltYWdlXkEyXkFqcGdeQXVyMjUwMTM3MTU@._V1_.jpg") + Special.create(name: "Strange Times", runtime_mins: 63, comedian_id: 2, image_url: "https://m.media-amazon.com/images/M/MV5BNzc2Mzg5YmMtMzM1NC00NDgwLTljYWQtZDdkNzBmNjZkNmJhXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_.jpg") + Special.create(name: "Live At The Beacon Theater", runtime_mins: 63, comedian_id: 3, image_url: "https://m.media-amazon.com/images/M/MV5BNzIxMTUxMjYzMV5BMl5BanBnXkFtZTcwMDYwMjE0Nw@@._V1_.jpg") + + visit '/comedians' + + expect(page).to have_content('Comedian Info') + end + end +end + +# SEAT +# Setup +# Exercise +# Assertions +# Teardown diff --git a/spec/models/comedian_spec.rb b/spec/models/comedian_spec.rb index 4bfb7e50..cc4d5359 100644 --- a/spec/models/comedian_spec.rb +++ b/spec/models/comedian_spec.rb @@ -1,15 +1,36 @@ RSpec.describe Comedian do - describe 'Validations' do - describe 'Required Field(s)' do - it 'should be invalid if missing a name' do - comic = Comedian.create(age: 48) - expect(comic).to_not be_valid + describe 'Class Methods' do + it '.average_age' do + + Comedian.create(name: 'Dan', age: 10, birthplace: "New York City", image_url: "https://www.pexels.com/search/beauty/") + Comedian.create(name: 'David', age: 15, birthplace: "New York City", image_url: "https://www.pexels.com/search/beauty/") + Comedian.create(name: 'Mark', age: 20, birthplace: "New York City", image_url: "https://www.pexels.com/search/beauty/") + Comedian.create(name: 'John', age: 25, birthplace: "New York City", image_url: "https://www.pexels.com/search/beauty/") + Comedian.create(name: 'Larry', age: 30, birthplace: "New York City", image_url: "https://www.pexels.com/search/beauty/") + + expect(Comedian.average_age).to eq(20) + end + end + describe 'Validations' do + it 'is invalid without a name' do + comedian = Comedian.new(age: 30, birthplace: "New York City", image_url: "https://www.pexels.com/search/beauty/") + + expect(comedian).to_not be_valid + end + it 'is invalid without an age' do + comedian = Comedian.new(name: "Larry", birthplace: "New York City", image_url: "https://www.pexels.com/search/beauty/") + + expect(comedian).to_not be_valid + end + it 'is invalid without a birthplace' do + comedian = Comedian.new(name: "Larry", age: 30, image_url: "https://www.pexels.com/search/beauty/") + + expect(comedian).to_not be_valid end + it 'is invalid without an image_url' do + comedian = Comedian.new(name: "Larry", age: 30, birthplace: "New York City") - it 'should be invalid if missing an age' do - comic = Comedian.create(name: 'Mitch Hedberg') - expect(comic).to_not be_valid + expect(comedian).to_not be_valid end end end -end diff --git a/spec/models/special_spec.rb b/spec/models/special_spec.rb index 8447e725..130be313 100644 --- a/spec/models/special_spec.rb +++ b/spec/models/special_spec.rb @@ -1,10 +1,36 @@ RSpec.describe Special do - describe 'Validations' do - describe 'Required Field(s)' do - it 'should be invalid if missing a name' do - special = Special.create + describe 'Class Methods' do + it '.average_special_length' do + + Special.create(name: "Special_1", runtime_mins: 10, comedian_id: 1, image_url: "https://www.pexels.com/search/beauty/") + Special.create(name: "Special_2", runtime_mins: 20, comedian_id: 1, image_url: "https://www.pexels.com/search/beauty/") + Special.create(name: "Special_3", runtime_mins: 30, comedian_id: 1, image_url: "https://www.pexels.com/search/beauty/") + Special.create(name: "Special_3", runtime_mins: 40, comedian_id: 2, image_url: "https://www.pexels.com/search/beauty/") + Special.create(name: "Special_4", runtime_mins: 50, comedian_id: 2, image_url: "https://www.pexels.com/search/beauty/") + + expect(Special.average_special_length).to eq(30) + end + end + describe 'Validations' do + it 'is invalid without a name' do + special = Special.new(runtime_mins: 30, comedian_id: 1, image_url: "https://www.pexels.com/search/beauty/") + + expect(special).to_not be_valid + end + it 'is invalid without runtime_mins' do + special = Special.new(name: "Special_3", comedian_id: 1, image_url: "https://www.pexels.com/search/beauty/") + expect(special).to_not be_valid end + it 'is invalid without a comedian_id' do + special = Special.new(name: "Special_3", runtime_mins: 30, image_url: "https://www.pexels.com/search/beauty/") + + expect(special).to_not be_valid + end + it 'is invalid without an image_url' do + special = Special.new(name: "Special_3", runtime_mins: 30, comedian_id: 1) + + expect(special).to_not be_valid end end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index c42aa7ab..6f050ba4 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -4,8 +4,11 @@ Bundler.require(:default, :test) require File.expand_path('../../config/environment.rb', __FILE__) -require 'capybara/dsl' +require 'simplecov' +SimpleCov.start + +require 'capybara/dsl' Capybara.app = LaughTracksApp Capybara.save_path = 'tmp/capybara' From a829c8893278d63e92947d70751da27a9d8706fa Mon Sep 17 00:00:00 2001 From: David Hardy Date: Mon, 18 Mar 2019 07:59:21 -0600 Subject: [PATCH 4/4] Project Submission --- app/models/special.rb | 82 +++++++++++++++++++ app/public/stylesheets/main.css | 81 ------------------ app/public/stylesheets/start.css | 74 +++++++++++++++++ app/views/comedians/index.erb | 24 ++---- .../comedian_info_message/index_spec.rb | 3 + spec/features/comedians/index_spec.rb | 42 ++++++++++ spec/features/specials/index_spec.rb | 37 +++++++++ spec/features/stat_bar/index_spec.rb | 42 ++++++++++ 8 files changed, 289 insertions(+), 96 deletions(-) delete mode 100644 app/public/stylesheets/main.css create mode 100644 app/public/stylesheets/start.css create mode 100644 spec/features/comedians/index_spec.rb create mode 100644 spec/features/specials/index_spec.rb create mode 100644 spec/features/stat_bar/index_spec.rb diff --git a/app/models/special.rb b/app/models/special.rb index c891b3d1..35424e37 100644 --- a/app/models/special.rb +++ b/app/models/special.rb @@ -9,3 +9,85 @@ def self.average_special_length average(:runtime_mins).round end end + +# body { +# background-color: blue; +# } +# +# header { +# background: rgb(60, 60, 60); +# height: 250px; +# border-radius: 10%; +# } +# +# #h1 { +# display: table; +# font-family: 'Fira Sans', sans-serif; +# font-size: 20px; +# padding: 25px; +# margin: auto; +# color: white; +# } +# +# #stat_1{ +# display: inline-block; +# width: 22%; +# height: 200px; +# margin: 1em; +# font-family: 'Fira Sans', sans-serif; +# color: white; +# } +# +# #stat_2 { +# display:inline-block; +# width: 22%; +# height: 200px; +# margin: 1em; +# font-family: 'Fira Sans', sans-serif; +# color: white; +# } +# #stat_3 { +# display:inline-block; +# width: 22%; +# height: 200px; +# margin: 1em; +# font-family: 'Fira Sans', sans-serif; +# color: white; +# } +# #stat_4 { +# display: inline-block; +# width: 22%; +# height: 200px; +# margin: 1em; +# font-family: 'Fira Sans', sans-serif; +# color: white +# } +# +# img { +# border-radius: 20%; +# display: block; +# margin-left: auto; +# margin-right: auto; +# width: 20%; +# } +# +# #h1 { +# display: table; +# font-family: 'Fira Sans', sans-serif; +# font-size: 18px; +# padding: 25px; +# margin: auto; +# color: white; +# } +# +# /* main { +# display: flex; +# flex-direction: row; +# } */ +# /* #info { +# display: inline-block; +# } +# +# #s_info { +# display: inline-block; +# } */ diff --git a/app/public/stylesheets/main.css b/app/public/stylesheets/main.css deleted file mode 100644 index 3160a3e4..00000000 --- a/app/public/stylesheets/main.css +++ /dev/null @@ -1,81 +0,0 @@ - body { - background-color: orange; -} - -header { - background: rgb(60, 60, 60); - height: 250px; - border-radius: 10%; -} - -#h1 { - display: table; - font-family: 'Fira Sans', sans-serif; - font-size: 20px; - padding: 25px; - margin: auto; - color: white; -} - -#stat_1{ - display: inline-block; - width: 22%; - height: 200px; - margin: 1em; - font-family: 'Fira Sans', sans-serif; - color: white; -} - -#stat_2 { - display:inline-block; - width: 22%; - height: 200px; - margin: 1em; - font-family: 'Fira Sans', sans-serif; - color: white; -} -#stat_3 { - display:inline-block; - width: 22%; - height: 200px; - margin: 1em; - font-family: 'Fira Sans', sans-serif; - color: white; -} -#stat_4 { - display: inline-block; - width: 22%; - height: 200px; - margin: 1em; - font-family: 'Fira Sans', sans-serif; - color: white -} - -img { - border-radius: 20%; - display: block; - margin-left: auto; - margin-right: auto; - width: 20%; -} - -#h1 { - display: table; - font-family: 'Fira Sans', sans-serif; - font-size: 18px; - padding: 25px; - margin: auto; - color: white; -} - -/* main { - display: flex; - flex-direction: row; -} */ - /* #info { - display: inline-block; -} - -#s_info { - display: inline-block; -} */ diff --git a/app/public/stylesheets/start.css b/app/public/stylesheets/start.css new file mode 100644 index 00000000..db6091ed --- /dev/null +++ b/app/public/stylesheets/start.css @@ -0,0 +1,74 @@ +body { + background-color: orange; +} + +header { + background: rgb(60, 60, 60); + height: 250px; + border-radius: 10%; +} + +#h1 { + display: table; + font-family: 'Fira Sans', sans-serif; + font-size: 20px; + padding: 25px; + margin: auto; + color: white; +} + +#stat_1{ + display: inline-block; + width: 22%; + height: 200px; + margin: 1em; + font-family: 'Fira Sans', sans-serif; + color: white; +} + +#stat_2 { + display:inline-block; + width: 22%; + height: 200px; + margin: 1em; + font-family: 'Fira Sans', sans-serif; + color: white; +} +#stat_3 { + display:inline-block; + width: 22%; + height: 200px; + margin: 1em; + font-family: 'Fira Sans', sans-serif; + color: white; +} +#stat_4 { + display: inline-block; + width: 22%; + height: 200px; + margin: 1em; + font-family: 'Fira Sans', sans-serif; + color: white +} + +img { + border-radius: 20%; + display: block; + margin-left: auto; + margin-right: auto; + width: 20%; +} + +#h1 { + display: table; + font-family: 'Fira Sans', sans-serif; + font-size: 18px; + padding: 25px; + margin: auto; + color: white; +} + +li { + font-size: 18px; + list-style-type: none; +} diff --git a/app/views/comedians/index.erb b/app/views/comedians/index.erb index e945fb7a..d2d94943 100644 --- a/app/views/comedians/index.erb +++ b/app/views/comedians/index.erb @@ -2,7 +2,8 @@ Comedians - + +
    @@ -46,29 +47,22 @@
    -
    - <% @comedians.each do |comedian| %> + <% @comedians.each do |comedian| %> +
  • <%= comedian.name %>
  • Age: <%= comedian.age %>
  • Birthplace: <%= comedian.birthplace %>
  • - > + >
    -
    + <% comedian.specials.each do |special| %> +
  • Special Count: <%= comedian.specials.count %>
  • -
  • Specials: <% comedian.specials.each do |special| %>
  • -
  • <%= special.name %>
  • +
  • Specials:
  • +
  • <%= special.name %>
  • Length: <%= special.runtime_mins %>
  • <% end %> <% end %>
    -
    -
    -
    -
    -
    -
    - - diff --git a/spec/features/comedian_info_message/index_spec.rb b/spec/features/comedian_info_message/index_spec.rb index 97d65b1c..c59e2cac 100644 --- a/spec/features/comedian_info_message/index_spec.rb +++ b/spec/features/comedian_info_message/index_spec.rb @@ -18,11 +18,14 @@ visit '/comedians' + within '#h1' do expect(page).to have_content('Comedian Info') + end end end end + # SEAT # Setup # Exercise diff --git a/spec/features/comedians/index_spec.rb b/spec/features/comedians/index_spec.rb new file mode 100644 index 00000000..02939db0 --- /dev/null +++ b/spec/features/comedians/index_spec.rb @@ -0,0 +1,42 @@ +RSpec.describe 'comedian index workflow' do + context 'as a visitor' do + it 'should show all comedian content' do + + comedian_1 = Comedian.create(name: "Bill Burr", age: 50, birthplace: "Canton, MA", image_url: "https://image.masslive.com/home/mass-media/width960/img/entertainment/photo/nashville-comedy-festival-21d347107e975672.jpg") + comedian_2 = Comedian.create(name: "Joe Rogan", age: 51, birthplace: "Newark, NJ", image_url: "https://www.maxim.com/.image/c_limit%2Ccs_srgb%2Cq_auto:good%2Cw_1400/MTQ4NDk2MjMzNzY0MjM0Nzc2/joe-rogan.webp") + comedian_3 = Comedian.create(name: "Louis C.K.", age: 51, birthplace: "Washington, D.C.", image_url: "https://media1.fdncms.com/pittsburgh/imager/u/blog/13239255/louis_ck_kuwait_crop_cropped.jpg?cb=1548183367") + + special_1 = Special.create(name: "Walk Your Way Out", runtime_mins: 77, comedian_id: 1, image_url: "https://m.media-amazon.com/images/M/MV5BMGYwNDE4MDItNjQwYi00NWIwLWJmYTYtY2I5NDEyMGUxNWMwL2ltYWdlXkEyXkFqcGdeQXVyMjUwMTM3MTU@._V1_.jpg") + special_2 = Special.create(name: "Strange Times", runtime_mins: 63, comedian_id: 2, image_url: "https://m.media-amazon.com/images/M/MV5BNzc2Mzg5YmMtMzM1NC00NDgwLTljYWQtZDdkNzBmNjZkNmJhXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_.jpg") + special_3 = Special.create(name: "Oh My God", runtime_mins: 58, comedian_id: 3, image_url: "https://m.media-amazon.com/images/M/MV5BMjQ4NjQwOTYzNl5BMl5BanBnXkFtZTcwNjU2NjczOQ@@._V1_.jpg") + + + visit '/comedians' + + within "#comedian-#{comedian_1.id}" do + + expect(page).to have_content(comedian_1.name) + expect(page).to have_content("Age: #{comedian_1.age}") + expect(page).to have_content("Birthplace: #{comedian_1.birthplace}") + # expect(page).to have_xpath(src=comedian_1.image_url) + + end + + within "#comedian-#{comedian_2.id}" do + + expect(page).to have_content(comedian_2.name) + expect(page).to have_content("Age: #{comedian_2.age}") + expect(page).to have_content("Birthplace: #{comedian_2.birthplace}") + # expect(page).to have_xpath(img[src*=comedian_2.image_url]) + end + + within "#comedian-#{comedian_3.id}" do + + expect(page).to have_content(comedian_3.name) + expect(page).to have_content("Age: #{comedian_3.age}") + expect(page).to have_content("Birthplace: #{comedian_3.birthplace}") + # expect(page).to have_xpath(img[src*=comedian_3.image_url]) + end + end + end +end diff --git a/spec/features/specials/index_spec.rb b/spec/features/specials/index_spec.rb new file mode 100644 index 00000000..103f17b7 --- /dev/null +++ b/spec/features/specials/index_spec.rb @@ -0,0 +1,37 @@ +RSpec.describe 'special index workflow' do + context 'as a visitor' do + it 'should show all special content' do + + comedian_1 = Comedian.create(name: "Bill Burr", age: 50, birthplace: "Canton, MA", image_url: "https://image.masslive.com/home/mass-media/width960/img/entertainment/photo/nashville-comedy-festival-21d347107e975672.jpg") + comedian_2 = Comedian.create(name: "Joe Rogan", age: 51, birthplace: "Newark, NJ", image_url: "https://www.maxim.com/.image/c_limit%2Ccs_srgb%2Cq_auto:good%2Cw_1400/MTQ4NDk2MjMzNzY0MjM0Nzc2/joe-rogan.webp") + comedian_3 = Comedian.create(name: "Louis C.K.", age: 51, birthplace: "Washington, D.C.", image_url: "https://media1.fdncms.com/pittsburgh/imager/u/blog/13239255/louis_ck_kuwait_crop_cropped.jpg?cb=1548183367") + + special_1 = Special.create(name: "Walk Your Way Out", runtime_mins: 77, comedian_id: 1, image_url: "https://m.media-amazon.com/images/M/MV5BMGYwNDE4MDItNjQwYi00NWIwLWJmYTYtY2I5NDEyMGUxNWMwL2ltYWdlXkEyXkFqcGdeQXVyMjUwMTM3MTU@._V1_.jpg") + special_2 = Special.create(name: "Strange Times", runtime_mins: 63, comedian_id: 2, image_url: "https://m.media-amazon.com/images/M/MV5BNzc2Mzg5YmMtMzM1NC00NDgwLTljYWQtZDdkNzBmNjZkNmJhXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_.jpg") + special_3 = Special.create(name: "Oh My God", runtime_mins: 58, comedian_id: 3, image_url: "https://m.media-amazon.com/images/M/MV5BMjQ4NjQwOTYzNl5BMl5BanBnXkFtZTcwNjU2NjczOQ@@._V1_.jpg") + + + visit '/comedians' + + within "#special-#{special_1.id}" do + + expect(page).to have_content(special_1.name) + expect(page).to have_content("Length: #{special_1.runtime_mins}") + # expect(page).to have_content(special_1.image_url) + end + within "#special-#{special_2.id}" do + + expect(page).to have_content(special_2.name) + expect(page).to have_content("Length: #{special_2.runtime_mins}") + # expect(page).to have_content(special_2.image_url) + end + + within "#special-#{special_3.id}" do + + expect(page).to have_content(special_3.name) + expect(page).to have_content("Length: #{special_3.runtime_mins}") + # expect(page).to have_content(special_3.image_url) + end + end + end +end diff --git a/spec/features/stat_bar/index_spec.rb b/spec/features/stat_bar/index_spec.rb new file mode 100644 index 00000000..02939db0 --- /dev/null +++ b/spec/features/stat_bar/index_spec.rb @@ -0,0 +1,42 @@ +RSpec.describe 'comedian index workflow' do + context 'as a visitor' do + it 'should show all comedian content' do + + comedian_1 = Comedian.create(name: "Bill Burr", age: 50, birthplace: "Canton, MA", image_url: "https://image.masslive.com/home/mass-media/width960/img/entertainment/photo/nashville-comedy-festival-21d347107e975672.jpg") + comedian_2 = Comedian.create(name: "Joe Rogan", age: 51, birthplace: "Newark, NJ", image_url: "https://www.maxim.com/.image/c_limit%2Ccs_srgb%2Cq_auto:good%2Cw_1400/MTQ4NDk2MjMzNzY0MjM0Nzc2/joe-rogan.webp") + comedian_3 = Comedian.create(name: "Louis C.K.", age: 51, birthplace: "Washington, D.C.", image_url: "https://media1.fdncms.com/pittsburgh/imager/u/blog/13239255/louis_ck_kuwait_crop_cropped.jpg?cb=1548183367") + + special_1 = Special.create(name: "Walk Your Way Out", runtime_mins: 77, comedian_id: 1, image_url: "https://m.media-amazon.com/images/M/MV5BMGYwNDE4MDItNjQwYi00NWIwLWJmYTYtY2I5NDEyMGUxNWMwL2ltYWdlXkEyXkFqcGdeQXVyMjUwMTM3MTU@._V1_.jpg") + special_2 = Special.create(name: "Strange Times", runtime_mins: 63, comedian_id: 2, image_url: "https://m.media-amazon.com/images/M/MV5BNzc2Mzg5YmMtMzM1NC00NDgwLTljYWQtZDdkNzBmNjZkNmJhXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_.jpg") + special_3 = Special.create(name: "Oh My God", runtime_mins: 58, comedian_id: 3, image_url: "https://m.media-amazon.com/images/M/MV5BMjQ4NjQwOTYzNl5BMl5BanBnXkFtZTcwNjU2NjczOQ@@._V1_.jpg") + + + visit '/comedians' + + within "#comedian-#{comedian_1.id}" do + + expect(page).to have_content(comedian_1.name) + expect(page).to have_content("Age: #{comedian_1.age}") + expect(page).to have_content("Birthplace: #{comedian_1.birthplace}") + # expect(page).to have_xpath(src=comedian_1.image_url) + + end + + within "#comedian-#{comedian_2.id}" do + + expect(page).to have_content(comedian_2.name) + expect(page).to have_content("Age: #{comedian_2.age}") + expect(page).to have_content("Birthplace: #{comedian_2.birthplace}") + # expect(page).to have_xpath(img[src*=comedian_2.image_url]) + end + + within "#comedian-#{comedian_3.id}" do + + expect(page).to have_content(comedian_3.name) + expect(page).to have_content("Age: #{comedian_3.age}") + expect(page).to have_content("Birthplace: #{comedian_3.birthplace}") + # expect(page).to have_xpath(img[src*=comedian_3.image_url]) + end + end + end +end