diff --git a/Gemfile b/Gemfile index 63415039..68e184c3 100644 --- a/Gemfile +++ b/Gemfile @@ -3,6 +3,7 @@ source 'https://rubygems.org' ruby '3.0.2' gem 'sinatra' +gem 'webrick' group :test do gem 'capybara' diff --git a/Gemfile.lock b/Gemfile.lock index b5673894..90098ca3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -82,6 +82,7 @@ GEM unicode-display_width (>= 1.1.1, < 3) tilt (2.0.10) unicode-display_width (1.6.1) + webrick (1.7.0) xpath (3.2.0) nokogiri (~> 1.8) @@ -96,6 +97,7 @@ DEPENDENCIES simplecov simplecov-console sinatra + webrick RUBY VERSION ruby 3.0.2p107 diff --git a/app.rb b/app.rb index 4abb71ec..f1aa09c5 100644 --- a/app.rb +++ b/app.rb @@ -1,8 +1,35 @@ require 'sinatra/base' + + class RockPaperScissors < Sinatra::Base - get '/test' do - 'test page' + + enable :sessions + + # get '/test' do + # 'home page' + # end + + get '/' do + erb :index + end + + post '/names' do + session[:player_name] = params[:player_name] + redirect '/play' + end + + get '/play' do + @player_name = session[:player_name] + erb :play end + get '/result' do + @player_name = session[:player_name] + erb :result + end + + + + run! if app_file == $0 end diff --git a/spec/features/test_page_spec.rb b/spec/features/test_page_spec.rb index 5d6e8919..627c003c 100644 --- a/spec/features/test_page_spec.rb +++ b/spec/features/test_page_spec.rb @@ -1,6 +1,36 @@ -feature 'test page' do - scenario 'visit test page' do - visit '/test' - expect(page).to have_content('test page') +# feature 'test page' do +# scenario 'visit test page' do +# visit '/test' +# expect(page).to have_content('home page') +# end +# end + + +feature 'Enter name' do + scenario 'submitting name' do + sign_in_and_play + # save_and_open_page # will save the web page and open the browser to display it + expect(page).to have_content 'Hannah vs. Computer' end end + +feature 'Display reasults' do + scenario 'choose rock' do + sign_in_and_play + click_button 'Rock' + expect(page).to have_content 'Hannah, the results are in!' + end + + scenario 'choose paper' do + sign_in_and_play + click_button 'Paper' + expect(page).to have_content 'Hannah, the results are in!' + end + + scenario 'choose scissors' do + sign_in_and_play + click_button 'Scissors' + expect(page).to have_content 'Hannah, the results are in!' + end +end + diff --git a/spec/features/web_helpers.rb b/spec/features/web_helpers.rb new file mode 100644 index 00000000..24409091 --- /dev/null +++ b/spec/features/web_helpers.rb @@ -0,0 +1,5 @@ +def sign_in_and_play + visit('/') + fill_in :player_name, with: 'Hannah' + click_button 'Submit' +end \ No newline at end of file diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 2177ec6a..1a164471 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,6 +1,7 @@ require 'capybara/rspec' require 'simplecov' require 'simplecov-console' +require 'features/web_helpers' SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new([ SimpleCov::Formatter::Console, diff --git a/views/index.erb b/views/index.erb new file mode 100644 index 00000000..5d56af92 --- /dev/null +++ b/views/index.erb @@ -0,0 +1,16 @@ + + + + + +

Rock Paper Scissors

+

Sign in to play

+
+ + +
+ + diff --git a/views/play.erb b/views/play.erb new file mode 100644 index 00000000..43f31e8d --- /dev/null +++ b/views/play.erb @@ -0,0 +1,18 @@ + + + + + + <%= @player_name %> vs. Computer + +

Make your selection: Rock, Paper or Scissors

+ +
+ + + +
+ + + + diff --git a/views/result.erb b/views/result.erb new file mode 100644 index 00000000..226a3dea --- /dev/null +++ b/views/result.erb @@ -0,0 +1,9 @@ + + + + + + <%= @player_name %>, the results are in! + + +