From 0928961423e06fc6bdde6d4710c60a00a4bddb4a Mon Sep 17 00:00:00 2001 From: Benjamin ter Kuile Date: Wed, 6 Nov 2013 15:58:23 +0100 Subject: [PATCH] Better speccing --- app/controllers/admin/users_controller.rb | 33 ++++++++++++------- config/routes.rb | 6 +++- .../users/sign_up_with_facebook.feature | 8 +++-- spec/acceptance_steps/global_steps.rb | 4 +++ .../users/authentication_steps.rb | 21 ++++++++---- 5 files changed, 49 insertions(+), 23 deletions(-) diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb index a37314e0..484a2f45 100644 --- a/app/controllers/admin/users_controller.rb +++ b/app/controllers/admin/users_controller.rb @@ -1,48 +1,57 @@ module Admin class UsersController < Admin::ApplicationController + skip_before_filter :authenticate_administrator!, only: :test_login # GET /users # GET /users.json def index @users = User.all - + respond_to do |format| format.html # index.html.erb format.json { render json: @users } end end - + # GET /users/1 # GET /users/1.json def show @user = User.find(params[:id]) - + respond_to do |format| format.html # show.html.erb format.json { render json: @user } end end - + + + def test_login + if Rails.env.test? and user = User.find_by_email(params[:email]) + sign_in user + end + render nothing: true + end + # GET /users/new # GET /users/new.json def new @user = User.new - + respond_to do |format| format.html # new.html.erb format.json { render json: @user } end end - + # GET /users/1/edit def edit @user = User.find(params[:id]) end - + # POST /users # POST /users.json def create @user = User.new(params[:user]) - + respond_to do |format| if @user.save format.html { redirect_to [:admin, @user], notice: t('action.create.successfull', model: User.model_name.human) } @@ -53,12 +62,12 @@ module Admin end end end - + # PUT /users/1 # PUT /users/1.json def update @user = User.find(params[:id]) - + respond_to do |format| if @user.update_attributes(params[:user]) format.html { redirect_to [:admin, @user], notice: t('action.update.successfull', model: User.model_name.human) } @@ -69,13 +78,13 @@ module Admin end end end - + # DELETE /users/1 # DELETE /users/1.json def destroy @user = User.find(params[:id]) @user.destroy - + respond_to do |format| format.html { redirect_to admin_users_url, notice: t('action.destroy.successfull', model: User.model_name.human) } format.json { head :no_content } diff --git a/config/routes.rb b/config/routes.rb index b6911b7b..bc6478ce 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -3,7 +3,11 @@ Qwaiter::Application.routes.draw do devise_for :suppliers, controllers: { confirmations: 'confirmations' } devise_for :administrators namespace :admin do - resources :users + resources :users do + collection do + get :test_login + end + end resources :suppliers resources :tables resources :orders diff --git a/spec/acceptance/users/sign_up_with_facebook.feature b/spec/acceptance/users/sign_up_with_facebook.feature index 0f3ba765..1fad5f00 100644 --- a/spec/acceptance/users/sign_up_with_facebook.feature +++ b/spec/acceptance/users/sign_up_with_facebook.feature @@ -4,13 +4,15 @@ Feature: Sign up as user using facebook Scenario: Happy flow Given There is no user information stored in the local storage When I visit the user obtain token path - Then I should be signed in as a user + Then I should be signed in as a user through facebook + And I wait 4 seconds And I should be redirected to the user home And the newly created user info should be stored in the local storage - @broken + @javascript Scenario: Already signed in user visits obtain token path Given I am signed in as a user - And There is no user information stored in the local storage + When I visit '/user' + And I wait 4 seconds Then I should be redirected to the user home And the newly created user info should be stored in the local storage diff --git a/spec/acceptance_steps/global_steps.rb b/spec/acceptance_steps/global_steps.rb index a5e74ee2..af297003 100644 --- a/spec/acceptance_steps/global_steps.rb +++ b/spec/acceptance_steps/global_steps.rb @@ -9,6 +9,10 @@ step "I click on translation :translation" do |translation_key| click_on text end +step 'I visit :path' do |path| + visit path +end + step "I wait :number second/seconds" do |number| sleep number.to_f end diff --git a/spec/acceptance_steps/users/authentication_steps.rb b/spec/acceptance_steps/users/authentication_steps.rb index f7e382cc..98942027 100644 --- a/spec/acceptance_steps/users/authentication_steps.rb +++ b/spec/acceptance_steps/users/authentication_steps.rb @@ -1,22 +1,29 @@ step "There is no user information stored in the local storage" do - + page.evaluate_script(%|Qstorage.getItem('user_id')|).should be_blank + page.evaluate_script(%|Qstorage.getItem('auth_token')|).should be_blank end step "I visit the user obtain token path" do visit user_obtain_token_path end -step "I should be signed in as a user" do +step "I am signed in as a user" do + @user ||= create :user + visit test_login_admin_users_path(email: @user.email) +end + +step "I should be signed in as a user through facebook" do @user = User.find_by_oauth_token 'fbAuthToken234' - page.evaluate_script(%|Qstorage.getItem('user_id')|).should == @user.id - page.evaluate_script(%|Qstorage.getItem('auth_token')|).should == @user.authentication_token - binding.pry + # For now, actually better to test a signed in response from the server + step "the newly created user info should be stored in the local storage" end step "I should be redirected to the user home" do - + page.current_path.should == user_root_path end + step "the newly created user info should be stored in the local storage" do - + page.evaluate_script(%|Qstorage.getItem('user_id')|).should == @user.id + page.evaluate_script(%|Qstorage.getItem('auth_token')|).should == @user.authentication_token end