solidus_auth_devise_devise_token_auth 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +12 -0
- data/.rspec +2 -0
- data/.travis.yml +20 -0
- data/CHANGELOG.md +173 -0
- data/Gemfile +36 -0
- data/LICENSE.md +26 -0
- data/README.md +98 -0
- data/Rakefile +21 -0
- data/app/mailers/spree/user_mailer.rb +15 -0
- data/app/models/spree/auth_configuration.rb +9 -0
- data/app/models/spree/user.rb +47 -0
- data/app/overrides/auth_admin_login_navigation_bar.rb +10 -0
- data/app/overrides/auth_shared_login_bar.rb +10 -0
- data/bin/rails +7 -0
- data/circle.yml +6 -0
- data/config/initializers/devise.rb +141 -0
- data/config/initializers/warden.rb +14 -0
- data/config/locales/de.yml +53 -0
- data/config/locales/en.yml +54 -0
- data/config/locales/es.yml +50 -0
- data/config/locales/fr.yml +50 -0
- data/config/locales/it.yml +76 -0
- data/config/locales/nl.yml +50 -0
- data/config/locales/pt-BR.yml +52 -0
- data/config/locales/tr.yml +50 -0
- data/config/locales/zh-CN.yml +54 -0
- data/config/routes.rb +71 -0
- data/db/default/users.rb +75 -0
- data/db/migrate/20101026184949_create_users.rb +29 -0
- data/db/migrate/20101026184950_rename_columns_for_devise.rb +41 -0
- data/db/migrate/20101214150824_convert_user_remember_field.rb +11 -0
- data/db/migrate/20120203010234_add_reset_password_sent_at_to_spree_users.rb +8 -0
- data/db/migrate/20120605211305_make_users_email_index_unique.rb +9 -0
- data/db/migrate/20140904000425_add_deleted_at_to_users.rb +6 -0
- data/db/migrate/20141002154641_add_confirmable_to_users.rb +7 -0
- data/db/seeds.rb +1 -0
- data/lib/assets/javascripts/spree/backend/solidus_auth.js +1 -0
- data/lib/assets/javascripts/spree/frontend/solidus_auth.js +1 -0
- data/lib/assets/stylesheets/spree/backend/solidus_auth.css +3 -0
- data/lib/assets/stylesheets/spree/frontend/solidus_auth.css +3 -0
- data/lib/controllers/backend/spree/admin/admin_controller_decorator.rb +11 -0
- data/lib/controllers/backend/spree/admin/orders/customer_details_controller_decorator.rb +15 -0
- data/lib/controllers/backend/spree/admin/user_passwords_controller.rb +41 -0
- data/lib/controllers/backend/spree/admin/user_sessions_controller.rb +43 -0
- data/lib/controllers/frontend/spree/checkout_controller_decorator.rb +66 -0
- data/lib/controllers/frontend/spree/user_confirmations_controller.rb +14 -0
- data/lib/controllers/frontend/spree/user_passwords_controller.rb +50 -0
- data/lib/controllers/frontend/spree/user_registrations_controller.rb +40 -0
- data/lib/controllers/frontend/spree/user_sessions_controller.rb +64 -0
- data/lib/controllers/frontend/spree/users_controller.rb +57 -0
- data/lib/generators/solidus/auth/install/install_generator.rb +25 -0
- data/lib/generators/solidus/auth/install/templates/config/initializers/devise.rb +1 -0
- data/lib/solidus/auth.rb +2 -0
- data/lib/solidus_auth_devise.rb +13 -0
- data/lib/spree/auth/devise.rb +14 -0
- data/lib/spree/auth/engine.rb +80 -0
- data/lib/spree/authentication_helpers.rb +33 -0
- data/lib/tasks/auth.rake +9 -0
- data/lib/views/backend/spree/admin/shared/_navigation_footer.html.erb +25 -0
- data/lib/views/backend/spree/admin/user_passwords/edit.html.erb +15 -0
- data/lib/views/backend/spree/admin/user_passwords/new.html.erb +17 -0
- data/lib/views/backend/spree/admin/user_sessions/authorization_failure.html.erb +4 -0
- data/lib/views/backend/spree/admin/user_sessions/new.html.erb +31 -0
- data/lib/views/backend/spree/layouts/admin/_login_nav.html.erb +13 -0
- data/lib/views/frontend/spree/checkout/registration.html.erb +22 -0
- data/lib/views/frontend/spree/shared/_flashes.html.erb +9 -0
- data/lib/views/frontend/spree/shared/_login.html.erb +18 -0
- data/lib/views/frontend/spree/shared/_login_bar.html.erb +2 -0
- data/lib/views/frontend/spree/shared/_login_bar_items.html.erb +6 -0
- data/lib/views/frontend/spree/shared/_user_form.html.erb +17 -0
- data/lib/views/frontend/spree/user_mailer/confirmation_instructions.text.erb +5 -0
- data/lib/views/frontend/spree/user_mailer/reset_password_instructions.text.erb +10 -0
- data/lib/views/frontend/spree/user_passwords/edit.html.erb +17 -0
- data/lib/views/frontend/spree/user_passwords/new.html.erb +17 -0
- data/lib/views/frontend/spree/user_registrations/new.html.erb +21 -0
- data/lib/views/frontend/spree/user_sessions/authorization_failure.html.erb +4 -0
- data/lib/views/frontend/spree/user_sessions/new.html.erb +13 -0
- data/lib/views/frontend/spree/users/edit.html.erb +14 -0
- data/lib/views/frontend/spree/users/show.html.erb +43 -0
- data/solidus_auth_devise.gemspec +41 -0
- data/spec/controllers/spree/checkout_controller_spec.rb +196 -0
- data/spec/controllers/spree/products_controller_spec.rb +27 -0
- data/spec/controllers/spree/user_passwords_controller_spec.rb +44 -0
- data/spec/controllers/spree/user_registrations_controller_spec.rb +96 -0
- data/spec/controllers/spree/user_sessions_controller_spec.rb +113 -0
- data/spec/controllers/spree/users_controller_spec.rb +38 -0
- data/spec/factories/confirmed_user.rb +7 -0
- data/spec/features/account_spec.rb +58 -0
- data/spec/features/admin/orders_spec.rb +30 -0
- data/spec/features/admin/password_reset_spec.rb +24 -0
- data/spec/features/admin/products_spec.rb +9 -0
- data/spec/features/admin/sign_in_spec.rb +44 -0
- data/spec/features/admin/sign_out_spec.rb +22 -0
- data/spec/features/admin_permissions_spec.rb +46 -0
- data/spec/features/change_email_spec.rb +26 -0
- data/spec/features/checkout_spec.rb +181 -0
- data/spec/features/confirmation_spec.rb +32 -0
- data/spec/features/order_spec.rb +62 -0
- data/spec/features/password_reset_spec.rb +24 -0
- data/spec/features/sign_in_spec.rb +52 -0
- data/spec/features/sign_out_spec.rb +25 -0
- data/spec/features/sign_up_spec.rb +30 -0
- data/spec/mailers/user_mailer_spec.rb +46 -0
- data/spec/models/order_spec.rb +26 -0
- data/spec/models/user_spec.rb +63 -0
- data/spec/spec_helper.rb +17 -0
- data/spec/support/ability.rb +15 -0
- data/spec/support/authentication_helpers.rb +14 -0
- data/spec/support/confirm_helpers.rb +13 -0
- data/spec/support/email.rb +5 -0
- data/spec/support/preferences.rb +5 -0
- data/spec/support/spree.rb +10 -0
- metadata +446 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<% @body_id = 'signup' %>
|
|
2
|
+
|
|
3
|
+
<%= render 'spree/shared/error_messages', target: resource %>
|
|
4
|
+
|
|
5
|
+
<div id="new-customer">
|
|
6
|
+
<h6><%= Spree.t(:new_customer) %></h6>
|
|
7
|
+
|
|
8
|
+
<div data-hook="signup">
|
|
9
|
+
<%= form_for resource, as: :spree_user, url: spree.registration_path(resource) do |f| %>
|
|
10
|
+
<div data-hook="signup_inside_form">
|
|
11
|
+
<%= render partial: 'spree/shared/user_form', locals: { f: f } %>
|
|
12
|
+
<p><%= f.submit Spree.t(:create), class: 'button primary' %></p>
|
|
13
|
+
</div>
|
|
14
|
+
<% end %>
|
|
15
|
+
<%= Spree.t(:or) %> <%= link_to Spree.t(:login_as_existing), spree.login_path %>
|
|
16
|
+
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
</div>
|
|
20
|
+
|
|
21
|
+
<div data-hook="login_extras"></div>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<% if flash[:alert] %>
|
|
2
|
+
<div class="flash errors"><%= flash[:alert] %></div>
|
|
3
|
+
<% end %>
|
|
4
|
+
|
|
5
|
+
<% @body_id = 'login' %>
|
|
6
|
+
<div id="existing-customer">
|
|
7
|
+
<h6><%= Spree.t(:login_as_existing) %></h6>
|
|
8
|
+
<div data-hook="login">
|
|
9
|
+
<%= render partial: 'spree/shared/login' %>
|
|
10
|
+
<%= Spree.t(:or) %> <%= link_to Spree.t(:create_a_new_account), spree.signup_path %> | <%= link_to Spree.t(:forgot_password), spree.recover_password_path %>
|
|
11
|
+
</div>
|
|
12
|
+
</div>
|
|
13
|
+
<div data-hook="login_extras"></div>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<%= render partial: 'spree/shared/error_messages', locals: { target: @user } %>
|
|
2
|
+
|
|
3
|
+
<div id="edit-account">
|
|
4
|
+
<h1><%= Spree.t(:editing_user) %></h1>
|
|
5
|
+
|
|
6
|
+
<div data-hook="account_edit">
|
|
7
|
+
<%= form_for Spree::User.new, as: @user, url: spree.user_path(@user), method: :put do |f| %>
|
|
8
|
+
<%= render partial: 'spree/shared/user_form', locals: { f: f } %>
|
|
9
|
+
<p>
|
|
10
|
+
<%= f.submit Spree.t(:update), class: 'button primary' %>
|
|
11
|
+
</p>
|
|
12
|
+
<% end %>
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<h1><%= accurate_title %></h1>
|
|
2
|
+
|
|
3
|
+
<div data-hook="account_summary" class="account-summary">
|
|
4
|
+
<dl id="user-info">
|
|
5
|
+
<dt><%= Spree.t(:email) %></dt>
|
|
6
|
+
<dd><%= @user.email %> (<%= link_to Spree.t(:edit), spree.edit_account_path %>)</dd>
|
|
7
|
+
</dl>
|
|
8
|
+
</div>
|
|
9
|
+
|
|
10
|
+
<div data-hook="account_my_orders" class="account-my-orders">
|
|
11
|
+
|
|
12
|
+
<h3><%= Spree.t(:my_orders) %></h3>
|
|
13
|
+
<% if @orders.present? %>
|
|
14
|
+
<table class="order-summary">
|
|
15
|
+
<thead>
|
|
16
|
+
<tr>
|
|
17
|
+
<th class="order-number"><%= I18n.t(:number, scope: 'activerecord.attributes.spree/order') %></th>
|
|
18
|
+
<th class="order-date"><%= Spree.t(:date) %></th>
|
|
19
|
+
<th class="order-status"><%= Spree.t(:status) %></th>
|
|
20
|
+
<th class="order-payment-state"><%= Spree.t(:payment_state) %></th>
|
|
21
|
+
<th class="order-shipment-state"><%= Spree.t(:shipment_state) %></th>
|
|
22
|
+
<th class="order-total"><%= Spree.t(:total) %></th>
|
|
23
|
+
</tr>
|
|
24
|
+
</thead>
|
|
25
|
+
<tbody>
|
|
26
|
+
<% @orders.each do |order| %>
|
|
27
|
+
<tr class="<%= cycle('even', 'odd') %>">
|
|
28
|
+
<td class="order-number"><%= link_to order.number, order_url(order) %></td>
|
|
29
|
+
<td class="order-date"><%= l order.completed_at.to_date %></td>
|
|
30
|
+
<td class="order-status"><%= Spree.t("order_state.#{order.state}").titleize %></td>
|
|
31
|
+
<td class="order-payment-state"><%= Spree.t("payment_states.#{order.payment_state}").titleize if order.payment_state %></td>
|
|
32
|
+
<td class="order-shipment-state"><%= Spree.t("shipment_states.#{order.shipment_state}").titleize if order.shipment_state %></td>
|
|
33
|
+
<td class="order-total"><%= order.display_total %></td>
|
|
34
|
+
</tr>
|
|
35
|
+
<% end %>
|
|
36
|
+
</tbody>
|
|
37
|
+
</table>
|
|
38
|
+
<% else %>
|
|
39
|
+
<p><%= Spree.t(:you_have_no_orders_yet) %></p>
|
|
40
|
+
<% end %>
|
|
41
|
+
<br />
|
|
42
|
+
|
|
43
|
+
</div>
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
|
|
3
|
+
Gem::Specification.new do |s|
|
|
4
|
+
s.platform = Gem::Platform::RUBY
|
|
5
|
+
s.name = 'solidus_auth_devise_devise_token_auth'
|
|
6
|
+
s.version = '2.1.0'
|
|
7
|
+
s.summary = 'Provides authentication and authorization services for use with Solidus by using Devise and CanCan (devise_token_auth revised version)'
|
|
8
|
+
s.description = s.summary
|
|
9
|
+
|
|
10
|
+
s.author = 'Michał Siwek (skycocker)'
|
|
11
|
+
s.email = 'mike21@aol.pl'
|
|
12
|
+
|
|
13
|
+
s.required_ruby_version = '>= 2.1'
|
|
14
|
+
s.license = %q{BSD-3}
|
|
15
|
+
|
|
16
|
+
s.files = `git ls-files`.split($\)
|
|
17
|
+
s.test_files = `git ls-files -- spec/*`.split($\)
|
|
18
|
+
s.require_path = 'lib'
|
|
19
|
+
s.requirements << 'none'
|
|
20
|
+
|
|
21
|
+
solidus_version = ['>= 1.2.0', '< 3']
|
|
22
|
+
|
|
23
|
+
s.add_dependency 'solidus_core_devise_token_auth', solidus_version
|
|
24
|
+
s.add_dependency 'solidus_support_devise_token_auth', '>= 0.1.3'
|
|
25
|
+
s.add_dependency 'devise', '~> 4.1'
|
|
26
|
+
s.add_dependency 'devise-encryptable', '0.2.0'
|
|
27
|
+
|
|
28
|
+
s.add_development_dependency 'capybara', '~> 2.14'
|
|
29
|
+
s.add_development_dependency 'capybara-screenshot'
|
|
30
|
+
s.add_development_dependency 'coffee-rails'
|
|
31
|
+
s.add_development_dependency 'database_cleaner', '~> 1.6'
|
|
32
|
+
s.add_development_dependency 'ffaker'
|
|
33
|
+
s.add_development_dependency 'poltergeist', '~> 1.5'
|
|
34
|
+
s.add_development_dependency 'rspec-rails', '~> 3.3'
|
|
35
|
+
s.add_development_dependency 'sass-rails'
|
|
36
|
+
s.add_development_dependency 'shoulda-matchers', '~> 3.1'
|
|
37
|
+
s.add_development_dependency 'simplecov', '~> 0.14'
|
|
38
|
+
s.add_development_dependency 'solidus_backend_devise_token_auth', solidus_version
|
|
39
|
+
s.add_development_dependency 'solidus_frontend_devise_token_auth', solidus_version
|
|
40
|
+
s.add_development_dependency 'sqlite3'
|
|
41
|
+
end
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
RSpec.describe Spree::CheckoutController, type: :controller do
|
|
2
|
+
|
|
3
|
+
let(:order) { create(:order_with_line_items, email: nil, user: nil, guest_token: token) }
|
|
4
|
+
let(:user) { build(:user) }
|
|
5
|
+
let(:token) { 'some_token' }
|
|
6
|
+
let(:cookie_token) { token }
|
|
7
|
+
|
|
8
|
+
before do
|
|
9
|
+
request.cookie_jar.signed[:guest_token] = cookie_token
|
|
10
|
+
allow(controller).to receive(:current_order) { order }
|
|
11
|
+
allow(order).to receive(:confirmation_required?) { true }
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
context '#edit' do
|
|
15
|
+
context 'when registration step enabled' do
|
|
16
|
+
context 'when authenticated as registered user' do
|
|
17
|
+
before { allow(controller).to receive(:spree_current_user) { user } }
|
|
18
|
+
|
|
19
|
+
it 'proceeds to the first checkout step' do
|
|
20
|
+
get :edit, params: { state: 'address' }
|
|
21
|
+
expect(response).to render_template :edit
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
context 'when not authenticated as guest' do
|
|
26
|
+
it 'redirects to registration step' do
|
|
27
|
+
get :edit, params: { state: 'address' }
|
|
28
|
+
expect(response).to redirect_to spree.checkout_registration_path
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
context 'when authenticated as guest' do
|
|
33
|
+
before { order.email = 'guest@solidus.io' }
|
|
34
|
+
|
|
35
|
+
it 'proceeds to the first checkout step' do
|
|
36
|
+
get :edit, params: { state: 'address' }
|
|
37
|
+
expect(response).to render_template :edit
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
context 'when guest checkout not allowed' do
|
|
41
|
+
before do
|
|
42
|
+
Spree::Config.set(allow_guest_checkout: false)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
after do
|
|
46
|
+
Spree::Config.set(allow_guest_checkout: true)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it 'redirects to registration step' do
|
|
50
|
+
get :edit, params: { state: 'address' }
|
|
51
|
+
expect(response).to redirect_to spree.checkout_registration_path
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
context 'when registration step disabled' do
|
|
58
|
+
before do
|
|
59
|
+
Spree::Auth::Config.set(registration_step: false)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
context 'when authenticated as registered' do
|
|
63
|
+
before { allow(controller).to receive(:spree_current_user) { user } }
|
|
64
|
+
|
|
65
|
+
it 'proceeds to the first checkout step' do
|
|
66
|
+
get :edit, params: { state: 'address' }
|
|
67
|
+
expect(response).to render_template :edit
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
context 'when authenticated as guest' do
|
|
72
|
+
it 'proceeds to the first checkout step' do
|
|
73
|
+
get :edit, params: { state: 'address' }
|
|
74
|
+
expect(response).to render_template :edit
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
context '#update' do
|
|
81
|
+
context 'when in the confirm state' do
|
|
82
|
+
before do
|
|
83
|
+
order.update_column(:email, 'spree@example.com')
|
|
84
|
+
order.update_column(:state, 'confirm')
|
|
85
|
+
|
|
86
|
+
# So that the order can transition to complete successfully
|
|
87
|
+
allow(order).to receive(:payment_required?) { false }
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
context 'with a token' do
|
|
91
|
+
before { allow(order).to receive(:guest_token) { 'ABC' } }
|
|
92
|
+
|
|
93
|
+
it 'redirects to the tokenized order view' do
|
|
94
|
+
request.cookie_jar.signed[:guest_token] = 'ABC'
|
|
95
|
+
post :update, params: { state: 'confirm' }
|
|
96
|
+
expect(response).to redirect_to spree.token_order_path(order, 'ABC')
|
|
97
|
+
expect(flash.notice).to eq Spree.t(:order_processed_successfully)
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
context 'with a registered user' do
|
|
102
|
+
before do
|
|
103
|
+
allow(controller).to receive(:spree_current_user) { user }
|
|
104
|
+
allow(order).to receive(:user) { user }
|
|
105
|
+
allow(order).to receive(:guest_token) { nil }
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
it 'redirects to the standard order view' do
|
|
109
|
+
post :update, params: { state: 'confirm' }
|
|
110
|
+
expect(response).to redirect_to spree.order_path(order)
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
context '#registration' do
|
|
117
|
+
it 'does not check registration' do
|
|
118
|
+
expect(controller).not_to receive(:check_registration)
|
|
119
|
+
get :registration
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
it 'checks if the user is authorized for :edit' do
|
|
123
|
+
expect(controller).to receive(:authorize!).with(:edit, order, token)
|
|
124
|
+
request.cookie_jar.signed[:guest_token] = token
|
|
125
|
+
get :registration, params: {}
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
context '#update_registration' do
|
|
130
|
+
subject { put :update_registration, params: { order: { email: email } } }
|
|
131
|
+
let(:email) { 'foo@example.com' }
|
|
132
|
+
|
|
133
|
+
it 'does not check registration' do
|
|
134
|
+
expect(controller).not_to receive(:check_registration)
|
|
135
|
+
subject
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
it 'redirects to the checkout_path after saving' do
|
|
139
|
+
subject
|
|
140
|
+
expect(response).to redirect_to spree.checkout_path
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# Regression test for https://github.com/solidusio/solidus/issues/1588
|
|
144
|
+
context 'order in address state' do
|
|
145
|
+
let(:order) do
|
|
146
|
+
create(
|
|
147
|
+
:order_with_line_items,
|
|
148
|
+
email: nil,
|
|
149
|
+
user: nil,
|
|
150
|
+
guest_token: token,
|
|
151
|
+
bill_address: nil,
|
|
152
|
+
ship_address: nil,
|
|
153
|
+
state: 'address'
|
|
154
|
+
)
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# This may seem out of left field, but previously there was an issue
|
|
158
|
+
# where address would be built in a before filter and then would be saved
|
|
159
|
+
# when trying to update the email.
|
|
160
|
+
it "doesn't create addresses" do
|
|
161
|
+
expect {
|
|
162
|
+
subject
|
|
163
|
+
}.not_to change { Spree::Address.count }
|
|
164
|
+
expect(response).to redirect_to spree.checkout_path
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
context 'invalid email' do
|
|
169
|
+
let(:email) { 'invalid' }
|
|
170
|
+
|
|
171
|
+
it 'renders the registration view' do
|
|
172
|
+
subject
|
|
173
|
+
expect(flash[:registration_error]).to eq I18n.t(:email_is_invalid, scope: [:errors, :messages])
|
|
174
|
+
expect(response).to render_template :registration
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
context 'with wrong order token' do
|
|
179
|
+
let(:cookie_token) { 'lol_no_access' }
|
|
180
|
+
|
|
181
|
+
it 'redirects to login' do
|
|
182
|
+
put :update_registration, params: { order: { email: 'foo@example.com' } }
|
|
183
|
+
expect(response).to redirect_to(login_path)
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
context 'without order token' do
|
|
188
|
+
let(:cookie_token) { nil }
|
|
189
|
+
|
|
190
|
+
it 'redirects to login' do
|
|
191
|
+
put :update_registration, params: { order: { email: 'foo@example.com' } }
|
|
192
|
+
expect(response).to redirect_to(login_path)
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
RSpec.describe Spree::ProductsController, type: :controller do
|
|
2
|
+
|
|
3
|
+
let!(:product) { create(:product, available_on: 1.year.from_now) }
|
|
4
|
+
let!(:user) { build(:user) }
|
|
5
|
+
|
|
6
|
+
it 'allows admins to view non-active products' do
|
|
7
|
+
allow(controller).to receive(:before_save_new_order)
|
|
8
|
+
allow(controller).to receive(:spree_current_user) { user }
|
|
9
|
+
allow(user).to receive(:has_spree_role?) { true }
|
|
10
|
+
get :show, params: { id: product.to_param }
|
|
11
|
+
expect(response.status).to eq(200)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it 'cannot view non-active products' do
|
|
15
|
+
allow(controller).to receive(:before_save_new_order)
|
|
16
|
+
allow(controller).to receive(:spree_current_user) { user }
|
|
17
|
+
allow(user).to receive(:has_spree_role?) { false }
|
|
18
|
+
if SolidusSupport.solidus_gem_version < Gem::Version.new('2.5.x')
|
|
19
|
+
get :show, params: { id: product.to_param }
|
|
20
|
+
expect(response.status).to eq(404)
|
|
21
|
+
else
|
|
22
|
+
expect {
|
|
23
|
+
get :show, params: { id: product.to_param }
|
|
24
|
+
}.to raise_error(ActiveRecord::RecordNotFound)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
RSpec.describe Spree::UserPasswordsController, type: :controller do
|
|
2
|
+
|
|
3
|
+
let(:token) { 'some_token' }
|
|
4
|
+
|
|
5
|
+
before { @request.env['devise.mapping'] = Devise.mappings[:spree_user] }
|
|
6
|
+
|
|
7
|
+
describe 'GET edit' do
|
|
8
|
+
context 'when the user token has not been specified' do
|
|
9
|
+
it 'redirects to the new session path' do
|
|
10
|
+
get :edit
|
|
11
|
+
expect(response).to redirect_to(
|
|
12
|
+
'http://test.host/user/spree_user/sign_in'
|
|
13
|
+
)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it 'flashes an error' do
|
|
17
|
+
get :edit
|
|
18
|
+
expect(flash[:alert]).to include(
|
|
19
|
+
"You can't access this page without coming from a password reset " +
|
|
20
|
+
'email'
|
|
21
|
+
)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
context 'when the user token has been specified' do
|
|
26
|
+
it 'does something' do
|
|
27
|
+
get :edit, params: { reset_password_token: token }
|
|
28
|
+
expect(response.code).to eq('200')
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
context '#update' do
|
|
34
|
+
context 'when updating password with blank password' do
|
|
35
|
+
it 'shows error flash message, sets spree_user with token and re-displays password edit form' do
|
|
36
|
+
put :update, params: { spree_user: { password: '', password_confirmation: '', reset_password_token: token } }
|
|
37
|
+
expect(assigns(:spree_user).kind_of?(Spree::User)).to eq true
|
|
38
|
+
expect(assigns(:spree_user).reset_password_token).to eq token
|
|
39
|
+
expect(flash[:error]).to eq I18n.t(:cannot_be_blank, scope: [:devise, :user_passwords, :spree_user])
|
|
40
|
+
expect(response).to render_template :edit
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
RSpec.describe Spree::UserRegistrationsController, type: :controller do
|
|
2
|
+
|
|
3
|
+
before { @request.env['devise.mapping'] = Devise.mappings[:spree_user] }
|
|
4
|
+
|
|
5
|
+
context '#create' do
|
|
6
|
+
before do
|
|
7
|
+
allow(controller).to receive(:after_sign_up_path_for) do
|
|
8
|
+
spree.root_path(thing: 7)
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
let(:password_confirmation) { 'foobar123' }
|
|
13
|
+
|
|
14
|
+
subject do
|
|
15
|
+
post(:create, {
|
|
16
|
+
params: {
|
|
17
|
+
spree_user: {
|
|
18
|
+
email: 'foobar@example.com',
|
|
19
|
+
password: 'foobar123',
|
|
20
|
+
password_confirmation: password_confirmation
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
})
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
context 'when user created successfuly' do
|
|
27
|
+
it 'saves the user' do
|
|
28
|
+
expect { subject }.to change { Spree::User.count }.from(0).to(1)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'sets flash message' do
|
|
32
|
+
subject
|
|
33
|
+
expect(flash[:notice]).to eq('Welcome! You have signed up successfully.')
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'signs in user' do
|
|
37
|
+
expect(controller.warden).to receive(:set_user)
|
|
38
|
+
subject
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it 'sets spree_user_signup session' do
|
|
42
|
+
subject
|
|
43
|
+
expect(session[:spree_user_signup]).to be true
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it 'redirects to after_sign_up path' do
|
|
47
|
+
subject
|
|
48
|
+
expect(response).to redirect_to spree.root_path(thing: 7)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
context 'with a guest token present' do
|
|
52
|
+
before do
|
|
53
|
+
request.cookie_jar.signed[:guest_token] = 'ABC'
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it 'assigns orders with the correct token and no user present' do
|
|
57
|
+
order = create(:order, guest_token: 'ABC', user_id: nil, created_by_id: nil)
|
|
58
|
+
subject
|
|
59
|
+
user = Spree::User.find_by_email('foobar@example.com')
|
|
60
|
+
|
|
61
|
+
order.reload
|
|
62
|
+
expect(order.user_id).to eq user.id
|
|
63
|
+
expect(order.created_by_id).to eq user.id
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it 'does not assign orders with an existing user' do
|
|
67
|
+
order = create(:order, guest_token: 'ABC', user_id: 200)
|
|
68
|
+
subject
|
|
69
|
+
|
|
70
|
+
expect(order.reload.user_id).to eq 200
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it 'does not assign orders with a different token' do
|
|
74
|
+
order = create(:order, guest_token: 'DEF', user_id: nil, created_by_id: nil)
|
|
75
|
+
subject
|
|
76
|
+
|
|
77
|
+
expect(order.reload.user_id).to be_nil
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
context 'when user not valid' do
|
|
83
|
+
let(:password_confirmation) { 'foobard123' }
|
|
84
|
+
|
|
85
|
+
it 'resets password fields' do
|
|
86
|
+
expect(controller).to receive(:clean_up_passwords)
|
|
87
|
+
subject
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it 'renders new view' do
|
|
91
|
+
subject
|
|
92
|
+
expect(:response).to render_template(:new)
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|