Skip to content

Commit

Permalink
Adding support to format js when creating a new session
Browse files Browse the repository at this point in the history
Fixes #173
  • Loading branch information
softr8 authored and radar committed Apr 3, 2014
1 parent 54b892a commit 34470bf
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 4 deletions.
16 changes: 12 additions & 4 deletions lib/controllers/frontend/spree/user_sessions_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,21 @@ def create
redirect_back_or_default(after_sign_in_path_for(spree_current_user))
}
format.js {
user = resource.record
render :json => {:ship_address => user.ship_address, :bill_address => user.bill_address}.to_json
render :json => {:user => spree_current_user,
:ship_address => spree_current_user.ship_address,
:bill_address => spree_current_user.bill_address}.to_json
}
end
else
flash.now[:error] = t('devise.failure.invalid')
render :new
respond_to do |format|
format.html {
flash.now[:error] = t('devise.failure.invalid')
render :new
}
format.js {
render :json => { error: t('devise.failure.invalid') }, status: :unprocessable_entity
}
end
end
end

Expand Down
48 changes: 48 additions & 0 deletions spec/controllers/spree/user_sessions_controller_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
require 'spec_helper'

describe Spree::UserSessionsController do
let(:user) { create(:user) }
before do
@request.env["devise.mapping"] = Devise.mappings[:spree_user]
end

context "#create" do

context "using correct login information" do
context "and html format is used" do
it "redirects to default after signing in" do
spree_post :create, spree_user: { email: user.email, password: 'secret' }
expect(response).to redirect_to spree.root_path
end
end

context "and js format is used" do
it "returns a json with ship and bill address" do
spree_post :create, spree_user: { email: user.email, password: 'secret' }, format: 'js'
parsed = ActiveSupport::JSON.decode(response.body)
expect(parsed).to have_key("user")
expect(parsed).to have_key("ship_address")
expect(parsed).to have_key("bill_address")
end
end
end

context "using incorrect login information" do
context "and html format is used" do
it "renders new template again with errors" do
spree_post :create, spree_user: { email: user.email, password: 'wrong' }
expect(response).to render_template('new')
expect(flash[:error]).to eq I18n.t('devise.failure.invalid')
end
end

context "and js format is used" do
it "returns a json with the error" do
spree_post :create, spree_user: { email: user.email, password: 'wrong' }, format: 'js'
parsed = ActiveSupport::JSON.decode(response.body)
expect(parsed).to have_key("error")
end
end
end
end
end

0 comments on commit 34470bf

Please sign in to comment.