diff --git a/Gemfile.lock b/Gemfile.lock index da8b141..719def0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -40,10 +40,19 @@ GEM rack rack-test (0.6.2) rack (>= 1.0) + rspec (3.1.0) + rspec-core (~> 3.1.0) + rspec-expectations (~> 3.1.0) + rspec-mocks (~> 3.1.0) + rspec-core (3.1.7) + rspec-support (~> 3.1.0) rspec-expectations (3.1.2) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.1.0) + rspec-mocks (3.1.3) + rspec-support (~> 3.1.0) rspec-support (3.1.2) + sass (3.4.24) sinatra (1.4.5) rack (~> 1.4) rack-protection (~> 1.4) @@ -66,5 +75,10 @@ DEPENDENCIES cucumber-sinatra haml pry + rspec rspec-expectations + sass sinatra + +BUNDLED WITH + 1.14.6 diff --git a/app.rb b/app.rb index 670284d..875b81c 100644 --- a/app.rb +++ b/app.rb @@ -15,7 +15,7 @@ def logged_in? end post '/login' do - if params[:username] == params[:password] + if params[:username].length > 0 and params[:username] == params[:password] session[:user] = params[:username] redirect to '/dashboard' else @@ -31,7 +31,12 @@ def logged_in? end get "/dashboard" do - @username = session[:user] - haml :dashboard + if logged_in? + @username = session[:user] + haml :dashboard + else + @message = "You are not logged in" + haml :index + end end end diff --git a/features/login.feature b/features/login.feature index 3fff7cf..7371edb 100644 --- a/features/login.feature +++ b/features/login.feature @@ -7,4 +7,15 @@ Feature: Login Page Given the login page When I log in with proper credentials Then I should see the secret page - + + Scenario: Non-authenticated User + Given the login page + When I log in without proper credentials + Then I should see the login page + And I should get a notice that my credentials are invalid + + Scenario: No User + Given the login page + When I log in with no credentials + Then I should see the login page + And I should get a notice that my credentials are invalid diff --git a/features/logout.feature b/features/logout.feature index 251c445..571169e 100644 --- a/features/logout.feature +++ b/features/logout.feature @@ -1 +1,9 @@ -#Add your codez here +Feature: Logout Page + In order to leave the site securely + As a user + I want to log out and leave the dashboard + + Scenario: Logout Authenticated User + Given the dashboard + When I log out + Then I should see the logout page diff --git a/features/step_definitions/login_steps.rb b/features/step_definitions/login_steps.rb index 61f803a..69b9896 100644 --- a/features/step_definitions/login_steps.rb +++ b/features/step_definitions/login_steps.rb @@ -1,14 +1,31 @@ Given(/^the login page$/) do - #put your code here - pending + visit('/') end When(/^I log in with proper credentials$/) do - #put your code here - pending + fill_in 'username', with: 'user' + fill_in 'password', with: 'user' + click_button 'Login' +end + +When(/^I log in without proper credentials$/) do + fill_in 'username', with: 'user' + fill_in 'password', with: 'pass' + click_button 'Login' +end + +When(/^I log in with no credentials$/) do + click_button 'Login' end Then(/^I should see the secret page$/) do - #put your code here - pending + expect(page.current_path).to eq '/dashboard' +end + +Then(/^I should see the login page$/) do + expect(page.current_path).to eq '/login' +end + +Then(/^I should get a notice that my credentials are invalid$/) do + expect(page).to have_selector('small', text: 'Your username & password did not match') end diff --git a/features/step_definitions/logout_steps.rb b/features/step_definitions/logout_steps.rb index 251c445..fcae7b5 100644 --- a/features/step_definitions/logout_steps.rb +++ b/features/step_definitions/logout_steps.rb @@ -1 +1,12 @@ -#Add your codez here +Given(/^the dashboard$/) do + visit('/') + step 'I log in with proper credentials' +end + +When(/^I log out$/) do + click_link 'Logout' +end + +Then(/^I should see the logout page$/) do + expect(page.current_path).to eq '/logout' +end