spree_backend 3.0.5 → 3.0.6
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 +4 -4
- data/CHANGELOG.md +1 -0
- data/Gemfile +6 -0
- data/Rakefile +29 -0
- data/app/assets/javascripts/spree/backend/admin.js +26 -0
- data/app/controllers/spree/admin/resource_controller.rb +4 -2
- data/app/helpers/spree/admin/navigation_helper.rb +10 -1
- data/app/views/spree/admin/images/new.html.erb +1 -1
- data/app/views/spree/admin/payments/_list.html.erb +1 -1
- data/app/views/spree/admin/products/_form.html.erb +1 -1
- data/app/views/spree/admin/shared/_index_table_options.html.erb +1 -11
- data/app/views/spree/admin/shared/sub_menu/_product.html.erb +1 -1
- data/script/rails +9 -0
- data/spec/controllers/spree/admin/base_controller_spec.rb +46 -0
- data/spec/controllers/spree/admin/customer_returns_controller_spec.rb +185 -0
- data/spec/controllers/spree/admin/general_settings_controller_spec.rb +41 -0
- data/spec/controllers/spree/admin/missing_products_controller_spec.rb +18 -0
- data/spec/controllers/spree/admin/orders/customer_details_controller_spec.rb +42 -0
- data/spec/controllers/spree/admin/orders_controller_spec.rb +247 -0
- data/spec/controllers/spree/admin/payment_methods_controller_spec.rb +49 -0
- data/spec/controllers/spree/admin/payments_controller_spec.rb +97 -0
- data/spec/controllers/spree/admin/products_controller_spec.rb +53 -0
- data/spec/controllers/spree/admin/promotion_actions_controller_spec.rb +21 -0
- data/spec/controllers/spree/admin/promotion_rules_controller_spec.rb +21 -0
- data/spec/controllers/spree/admin/promotions_controller_spec.rb +44 -0
- data/spec/controllers/spree/admin/refunds_controller_spec.rb +32 -0
- data/spec/controllers/spree/admin/reimbursements_controller_spec.rb +74 -0
- data/spec/controllers/spree/admin/reports_controller_spec.rb +42 -0
- data/spec/controllers/spree/admin/resource_controller_spec.rb +276 -0
- data/spec/controllers/spree/admin/return_authorizations_controller_spec.rb +225 -0
- data/spec/controllers/spree/admin/return_items_controller_spec.rb +27 -0
- data/spec/controllers/spree/admin/root_controller_spec.rb +35 -0
- data/spec/controllers/spree/admin/search_controller_spec.rb +56 -0
- data/spec/controllers/spree/admin/shipping_methods_controller_spec.rb +14 -0
- data/spec/controllers/spree/admin/stock_items_controller_spec.rb +19 -0
- data/spec/controllers/spree/admin/stock_locations_controller_spec.rb +41 -0
- data/spec/controllers/spree/admin/stock_transfers_controller_spec.rb +41 -0
- data/spec/controllers/spree/admin/tax_categories_controller_spec.rb +34 -0
- data/spec/controllers/spree/admin/users_controller_spec.rb +161 -0
- data/spec/controllers/spree/admin/variants_controller_spec.rb +32 -0
- data/spec/features/admin/configuration/analytics_tracker_spec.rb +46 -0
- data/spec/features/admin/configuration/countries_spec.rb +24 -0
- data/spec/features/admin/configuration/general_settings_spec.rb +43 -0
- data/spec/features/admin/configuration/payment_methods_spec.rb +63 -0
- data/spec/features/admin/configuration/roles_spec.rb +47 -0
- data/spec/features/admin/configuration/shipping_methods_spec.rb +62 -0
- data/spec/features/admin/configuration/states_spec.rb +68 -0
- data/spec/features/admin/configuration/stock_locations_spec.rb +48 -0
- data/spec/features/admin/configuration/tax_categories_spec.rb +56 -0
- data/spec/features/admin/configuration/tax_rates_spec.rb +18 -0
- data/spec/features/admin/configuration/zones_spec.rb +39 -0
- data/spec/features/admin/homepage_spec.rb +81 -0
- data/spec/features/admin/locale_spec.rb +31 -0
- data/spec/features/admin/orders/adjustments_promotions_spec.rb +53 -0
- data/spec/features/admin/orders/adjustments_spec.rb +129 -0
- data/spec/features/admin/orders/cancelling_and_resuming_spec.rb +47 -0
- data/spec/features/admin/orders/customer_details_spec.rb +182 -0
- data/spec/features/admin/orders/line_items_spec.rb +51 -0
- data/spec/features/admin/orders/listing_spec.rb +225 -0
- data/spec/features/admin/orders/log_entries_spec.rb +55 -0
- data/spec/features/admin/orders/new_order_spec.rb +161 -0
- data/spec/features/admin/orders/order_details_spec.rb +620 -0
- data/spec/features/admin/orders/payments_spec.rb +229 -0
- data/spec/features/admin/orders/risk_analysis_spec.rb +48 -0
- data/spec/features/admin/orders/shipments_spec.rb +64 -0
- data/spec/features/admin/orders/state_changes_spec.rb +21 -0
- data/spec/features/admin/products/edit/images_spec.rb +86 -0
- data/spec/features/admin/products/edit/products_spec.rb +64 -0
- data/spec/features/admin/products/edit/taxons_spec.rb +41 -0
- data/spec/features/admin/products/edit/variants_spec.rb +56 -0
- data/spec/features/admin/products/option_types_spec.rb +113 -0
- data/spec/features/admin/products/products_spec.rb +394 -0
- data/spec/features/admin/products/properties_spec.rb +140 -0
- data/spec/features/admin/products/prototypes_spec.rb +112 -0
- data/spec/features/admin/products/stock_management_spec.rb +123 -0
- data/spec/features/admin/products/taxonomies_spec.rb +52 -0
- data/spec/features/admin/products/variant_spec.rb +50 -0
- data/spec/features/admin/promotions/adjustments_spec.rb +255 -0
- data/spec/features/admin/promotions/option_value_rule_spec.rb +70 -0
- data/spec/features/admin/promotions/tiered_calculator_spec.rb +70 -0
- data/spec/features/admin/reports_spec.rb +61 -0
- data/spec/features/admin/stock_transfer_spec.rb +75 -0
- data/spec/features/admin/taxons_spec.rb +47 -0
- data/spec/features/admin/users_spec.rb +284 -0
- data/spec/helpers/admin/base_helper_spec.rb +24 -0
- data/spec/helpers/admin/navigation_helper_spec.rb +106 -0
- data/spec/helpers/admin/stock_movements_helper_spec.rb +30 -0
- data/spec/helpers/promotion_rules_helper_spec.rb +12 -0
- data/spec/models/spree/resource_spec.rb +48 -0
- data/spec/spec_helper.rb +133 -0
- data/spec/support/appear_before_matcher.rb +8 -0
- data/spec/support/ror_ringer.jpeg +0 -0
- data/spec/test_views/spree/admin/submodule/posts/edit.html.erb +1 -0
- data/spec/test_views/spree/admin/submodule/posts/new.html.erb +1 -0
- data/spec/test_views/spree/admin/widgets/edit.html.erb +1 -0
- data/spec/test_views/spree/admin/widgets/new.html.erb +1 -0
- data/spree_backend.gemspec +29 -0
- metadata +101 -14
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1e89bc11718ae758bfc03f3a40315797c0e08998
|
|
4
|
+
data.tar.gz: 704ba4903c533b4b53fd3c2669394cd70e2b0018
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ed6f33fbb8928ca2c9e1bc31a1214fe213f9b4a72b82fe6a08f866d1a7b235f367bf9493ead00b004f0dd8784014cb83d94f48df176177149b61e5d1a0abba93
|
|
7
|
+
data.tar.gz: 1ce4af7c955243d0f8cd983e0887c935b504b0ecc4d8a0efb20893318970ae8ff85508efe3e7602285ec6fe51d1eb960fec6244d54e150554d01af3dc6d0a6e4
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
## Spree 2.4.0 (unreleased) ##
|
data/Gemfile
ADDED
data/Rakefile
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'rake'
|
|
3
|
+
require 'rake/testtask'
|
|
4
|
+
require 'rake/packagetask'
|
|
5
|
+
require 'rubygems/package_task'
|
|
6
|
+
require 'rspec/core/rake_task'
|
|
7
|
+
require 'spree/testing_support/common_rake'
|
|
8
|
+
|
|
9
|
+
Bundler::GemHelper.install_tasks
|
|
10
|
+
RSpec::Core::RakeTask.new
|
|
11
|
+
|
|
12
|
+
spec = eval(File.read('spree_backend.gemspec'))
|
|
13
|
+
Gem::PackageTask.new(spec) do |p|
|
|
14
|
+
p.gem_spec = spec
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
desc "Release to gemcutter"
|
|
18
|
+
task :release do
|
|
19
|
+
version = File.read(File.expand_path("../../SPREE_VERSION", __FILE__)).strip
|
|
20
|
+
cmd = "cd pkg && gem push spree_backend-#{version}.gem"; puts cmd; system cmd
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
task :default => :spec
|
|
24
|
+
|
|
25
|
+
desc "Generates a dummy app for testing"
|
|
26
|
+
task :test_app do
|
|
27
|
+
ENV['LIB_NAME'] = 'spree/backend'
|
|
28
|
+
Rake::Task['common:test_app'].invoke
|
|
29
|
+
end
|
|
@@ -149,6 +149,32 @@ jQuery(function($) {
|
|
|
149
149
|
}
|
|
150
150
|
});
|
|
151
151
|
|
|
152
|
+
// per page dropdown
|
|
153
|
+
// preserves all selected filters / queries supplied by user
|
|
154
|
+
// changes only per_page value
|
|
155
|
+
$(".js-per-page-select").change(function() {
|
|
156
|
+
var form = $(this).closest(".js-per-page-form");
|
|
157
|
+
var url = form.attr('action');
|
|
158
|
+
var value = $(this).val().toString();
|
|
159
|
+
if (url.match(/\?/)) {
|
|
160
|
+
url += "&per_page=" + value;
|
|
161
|
+
} else {
|
|
162
|
+
url += "?per_page=" + value;
|
|
163
|
+
}
|
|
164
|
+
window.location = url;
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
// injects per_page settings to all available search forms
|
|
168
|
+
// so when user changes some filters / queries per_page is preserved
|
|
169
|
+
$(document).ready(function() {
|
|
170
|
+
var perPageDropdown = $(".js-per-page-select:first");
|
|
171
|
+
if (perPageDropdown.length) {
|
|
172
|
+
var perPageValue = perPageDropdown.val().toString();
|
|
173
|
+
var perPageInput = '<input type="hidden" name="per_page" value=' + perPageValue + ' />';
|
|
174
|
+
$("#table-filter form").append(perPageInput);
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
|
|
152
178
|
// Enable sidebar toggle
|
|
153
179
|
$("[data-toggle='offcanvas']").click(function(e) {
|
|
154
180
|
e.preventDefault();
|
|
@@ -30,9 +30,11 @@ class Spree::Admin::ResourceController < Spree::Admin::BaseController
|
|
|
30
30
|
invoke_callbacks(:update, :before)
|
|
31
31
|
if @object.update_attributes(permitted_resource_params)
|
|
32
32
|
invoke_callbacks(:update, :after)
|
|
33
|
-
flash[:success] = flash_message_for(@object, :successfully_updated)
|
|
34
33
|
respond_with(@object) do |format|
|
|
35
|
-
format.html
|
|
34
|
+
format.html do
|
|
35
|
+
flash[:success] = flash_message_for(@object, :successfully_updated)
|
|
36
|
+
redirect_to location_after_save
|
|
37
|
+
end
|
|
36
38
|
format.js { render layout: false }
|
|
37
39
|
end
|
|
38
40
|
else
|
|
@@ -87,7 +87,16 @@ module Spree
|
|
|
87
87
|
|
|
88
88
|
select_tag(:per_page,
|
|
89
89
|
options_for_select(per_page_options, params['per_page'] || per_page_default),
|
|
90
|
-
{
|
|
90
|
+
{ class: "form-control pull-right js-per-page-select" })
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# helper method to create proper url to apply per page filtering
|
|
94
|
+
# fixes https://github.com/spree/spree/issues/6888
|
|
95
|
+
def per_page_dropdown_params
|
|
96
|
+
args = params.clone
|
|
97
|
+
args.delete(:page)
|
|
98
|
+
args.delete(:per_page)
|
|
99
|
+
args
|
|
91
100
|
end
|
|
92
101
|
|
|
93
102
|
# finds class for a given symbol / string
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
<%= render partial: 'form', locals: { f: f } %>
|
|
12
12
|
|
|
13
13
|
<div class="form-actions" data-hook="buttons">
|
|
14
|
-
<%= button Spree.t('actions.
|
|
14
|
+
<%= button Spree.t('actions.create'), 'save' %>
|
|
15
15
|
<span class="or"><%= Spree.t(:or) %></span>
|
|
16
16
|
<%= button_link_to Spree.t('actions.cancel'), spree.admin_product_images_url(@product), icon: 'delete', id: 'cancel_link' %>
|
|
17
17
|
</div>
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
<% if action == 'credit' %>
|
|
29
29
|
<%= link_to_with_icon('refund', Spree.t(:refund), new_admin_order_payment_refund_path(@order, payment), no_text: true, class: "btn btn-default btn-sm") if can?(:create, Spree::Refund) %>
|
|
30
30
|
<% else %>
|
|
31
|
-
<%= link_to_with_icon(action, Spree.t(action), fire_admin_order_payment_path(@order, payment, e: action), method: :put, no_text: true, data: { action: action }, class: "btn btn-default btn-sm") if can?(action, payment) %>
|
|
31
|
+
<%= link_to_with_icon(action, Spree.t(action), fire_admin_order_payment_path(@order, payment, e: action), method: :put, no_text: true, data: { action: action }, class: "btn btn-default btn-sm") if can?(action.to_sym, payment) %>
|
|
32
32
|
<% end %>
|
|
33
33
|
<% end %>
|
|
34
34
|
</td>
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
|
|
93
93
|
<div data-hook="admin_product_form_promotionable">
|
|
94
94
|
<%= f.field_container :promotionable, class: ['form-group'] do %>
|
|
95
|
-
<%= f.label :promotionable %>
|
|
95
|
+
<%= f.label :promotionable, Spree.t(:promotionable) %>
|
|
96
96
|
<%= f.error_message_on :promotionable %>
|
|
97
97
|
<%= f.check_box :promotionable, class: 'form-control' %>
|
|
98
98
|
<% end %>
|
|
@@ -4,20 +4,10 @@
|
|
|
4
4
|
</div>
|
|
5
5
|
<div class="col-sm-6">
|
|
6
6
|
<div class="pagination-wrap">
|
|
7
|
-
<%= form_tag(
|
|
7
|
+
<%= form_tag(per_page_dropdown_params, { method: :get, class: 'js-per-page-form form-inline' }) do %>
|
|
8
8
|
<%= per_page_dropdown %>
|
|
9
9
|
<% end %>
|
|
10
10
|
<div class="clearfix"></div>
|
|
11
11
|
</div>
|
|
12
12
|
</div>
|
|
13
13
|
</div>
|
|
14
|
-
|
|
15
|
-
<% content_for :head do %>
|
|
16
|
-
<%= javascript_tag do %>
|
|
17
|
-
$(document).ready(function() {
|
|
18
|
-
$("#js-per-page-select").change(function() {
|
|
19
|
-
$("#js-per-page-form").submit();
|
|
20
|
-
});
|
|
21
|
-
});
|
|
22
|
-
<% end %>
|
|
23
|
-
<% end %>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<ul id="sidebar-product" class="collapse nav nav-pills nav-stacked" data-hook="admin_product_sub_tabs">
|
|
2
|
-
<%= tab
|
|
2
|
+
<%= tab :products %>
|
|
3
3
|
<%= tab :option_types, :match_path => '/option_types' %>
|
|
4
4
|
<%= tab :properties %>
|
|
5
5
|
<%= tab :prototypes %>
|
data/script/rails
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
|
|
3
|
+
|
|
4
|
+
ENGINE_ROOT = File.expand_path('../..', __FILE__)
|
|
5
|
+
ENGINE_PATH = File.expand_path('../../lib/spree/backend/engine', __FILE__)
|
|
6
|
+
|
|
7
|
+
require 'rails/all'
|
|
8
|
+
require 'rails/engine/commands'
|
|
9
|
+
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Spree's rpsec controller tests get the Spree::ControllerHacks
|
|
2
|
+
# we don't need those for the anonymous controller here, so
|
|
3
|
+
# we call process directly instead of get
|
|
4
|
+
require 'spec_helper'
|
|
5
|
+
|
|
6
|
+
describe Spree::Admin::BaseController, type: :controller do
|
|
7
|
+
controller(Spree::Admin::BaseController) do
|
|
8
|
+
def index
|
|
9
|
+
authorize! :update, Spree::Order
|
|
10
|
+
render text: 'test'
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
context "unauthorized request" do
|
|
15
|
+
before do
|
|
16
|
+
allow_any_instance_of(Spree::Admin::BaseController).to receive(:spree_current_user).and_return(nil)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "redirects to root" do
|
|
20
|
+
allow(controller).to receive_message_chain(:spree, :root_path).and_return('/root')
|
|
21
|
+
get :index
|
|
22
|
+
expect(response).to redirect_to '/root'
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
context "#generate_api_key" do
|
|
27
|
+
let(:user) { mock_model(Spree.user_class, has_spree_role?: true) }
|
|
28
|
+
|
|
29
|
+
before do
|
|
30
|
+
allow(controller).to receive(:authorize_admin) { true }
|
|
31
|
+
allow(controller).to receive(:try_spree_current_user) { user }
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "generates the API key for a user when they visit" do
|
|
35
|
+
expect(user).to receive(:spree_api_key).and_return(nil)
|
|
36
|
+
expect(user).to receive(:generate_spree_api_key!)
|
|
37
|
+
get :index
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "does not attempt to regenerate the API key if the key is already set" do
|
|
41
|
+
expect(user).to receive(:spree_api_key).and_return('fake')
|
|
42
|
+
expect(user).not_to receive(:generate_spree_api_key!)
|
|
43
|
+
get :index
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module Spree
|
|
4
|
+
module Admin
|
|
5
|
+
describe CustomerReturnsController, :type => :controller do
|
|
6
|
+
stub_authorization!
|
|
7
|
+
|
|
8
|
+
describe "#index" do
|
|
9
|
+
let(:order) { customer_return.order }
|
|
10
|
+
let(:customer_return) { create(:customer_return) }
|
|
11
|
+
|
|
12
|
+
subject do
|
|
13
|
+
spree_get :index, { order_id: customer_return.order.to_param }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
before { subject }
|
|
17
|
+
|
|
18
|
+
it "loads the order" do
|
|
19
|
+
expect(assigns(:order)).to eq order
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "loads the customer return" do
|
|
23
|
+
expect(assigns(:customer_returns)).to include(customer_return)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe "#new" do
|
|
28
|
+
let(:order) { create(:shipped_order, line_items_count: 1) }
|
|
29
|
+
let!(:rma) { create :return_authorization, order: order, return_items: [create(:return_item, inventory_unit: order.inventory_units.first)] }
|
|
30
|
+
let!(:inactive_reimbursement_type) { create(:reimbursement_type, active: false) }
|
|
31
|
+
let!(:first_active_reimbursement_type) { create(:reimbursement_type) }
|
|
32
|
+
let!(:second_active_reimbursement_type) { create(:reimbursement_type) }
|
|
33
|
+
|
|
34
|
+
subject do
|
|
35
|
+
spree_get :new, { order_id: order.to_param }
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "loads the order" do
|
|
39
|
+
subject
|
|
40
|
+
expect(assigns(:order)).to eq order
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "creates a new customer return" do
|
|
44
|
+
subject
|
|
45
|
+
expect(assigns(:customer_return)).to_not be_persisted
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
context "with previous customer return" do
|
|
49
|
+
let(:order) { create(:shipped_order, line_items_count: 4) }
|
|
50
|
+
let(:rma) { create(:return_authorization, order: order) }
|
|
51
|
+
|
|
52
|
+
let!(:rma_return_item) { create(:return_item, return_authorization: rma, inventory_unit: order.inventory_units.first) }
|
|
53
|
+
let!(:customer_return_return_item) { create(:return_item, return_authorization: rma, inventory_unit: order.inventory_units.last) }
|
|
54
|
+
|
|
55
|
+
context "there is a return item associated with an rma but not a customer return" do
|
|
56
|
+
let!(:previous_customer_return) { create(:customer_return_without_return_items, return_items: [customer_return_return_item]) }
|
|
57
|
+
|
|
58
|
+
before do
|
|
59
|
+
subject
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "loads the persisted rma return items" do
|
|
63
|
+
expect(assigns(:rma_return_items).all? { |return_item| return_item.persisted? }).to eq true
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "has one rma return item" do
|
|
67
|
+
expect(assigns(:rma_return_items)).to include(rma_return_item)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
describe "#edit" do
|
|
74
|
+
let(:order) { customer_return.order }
|
|
75
|
+
let(:customer_return) { create(:customer_return, line_items_count: 3) }
|
|
76
|
+
|
|
77
|
+
let!(:accepted_return_item) { customer_return.return_items.order('id').first.tap(&:accept!) }
|
|
78
|
+
let!(:rejected_return_item) { customer_return.return_items.order('id').second.tap(&:reject!)}
|
|
79
|
+
let!(:manual_intervention_return_item) { customer_return.return_items.order('id').third.tap(&:require_manual_intervention!) }
|
|
80
|
+
|
|
81
|
+
subject do
|
|
82
|
+
spree_get :edit, { order_id: order.to_param, id: customer_return.to_param }
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
before do
|
|
86
|
+
subject
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it "loads the order" do
|
|
90
|
+
expect(assigns(:order)).to eq order
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it "loads the customer return" do
|
|
94
|
+
expect(assigns(:customer_return)).to eq customer_return
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it "loads the accepted return items" do
|
|
98
|
+
expect(assigns(:accepted_return_items)).to eq [accepted_return_item]
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
it "loads the rejected return items" do
|
|
102
|
+
expect(assigns(:rejected_return_items)).to eq [rejected_return_item]
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
it "loads the return items that require manual intervention" do
|
|
106
|
+
expect(assigns(:manual_intervention_return_items)).to eq [manual_intervention_return_item]
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
it "loads the return items that are still pending" do
|
|
110
|
+
expect(assigns(:pending_return_items)).to eq []
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
it "loads the reimbursements that are still pending" do
|
|
114
|
+
expect(assigns(:pending_reimbursements)).to eq []
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
describe "#create" do
|
|
119
|
+
let(:order) { create(:shipped_order, line_items_count: 1) }
|
|
120
|
+
let!(:return_authorization) { create :return_authorization, order: order, return_items: [create(:return_item, inventory_unit: order.inventory_units.shipped.last)] }
|
|
121
|
+
|
|
122
|
+
subject do
|
|
123
|
+
spree_post :create, customer_return_params
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
context "valid customer return" do
|
|
127
|
+
let(:stock_location) { order.shipments.last.stock_location }
|
|
128
|
+
|
|
129
|
+
let!(:customer_return_params) do
|
|
130
|
+
{
|
|
131
|
+
order_id: order.to_param,
|
|
132
|
+
customer_return: {
|
|
133
|
+
stock_location_id: stock_location.id,
|
|
134
|
+
return_items_attributes: {
|
|
135
|
+
"0" => {
|
|
136
|
+
id: return_authorization.return_items.first.id,
|
|
137
|
+
returned: "1",
|
|
138
|
+
"pre_tax_amount"=>"15.99",
|
|
139
|
+
inventory_unit_id: order.inventory_units.shipped.last.id
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
it "creates a customer return" do
|
|
147
|
+
expect{ subject }.to change { Spree::CustomerReturn.count }.by(1)
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
it "redirects to the index page" do
|
|
151
|
+
subject
|
|
152
|
+
expect(response).to redirect_to(spree.edit_admin_order_customer_return_path(order, assigns(:customer_return)))
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
context "invalid customer return" do
|
|
157
|
+
let!(:customer_return_params) do
|
|
158
|
+
{
|
|
159
|
+
order_id: order.to_param,
|
|
160
|
+
customer_return: {
|
|
161
|
+
stock_location_id: "",
|
|
162
|
+
return_items_attributes: {
|
|
163
|
+
"0" => {
|
|
164
|
+
returned: "1",
|
|
165
|
+
"pre_tax_amount"=>"15.99",
|
|
166
|
+
inventory_unit_id: order.inventory_units.shipped.last.id
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
it "doesn't create a customer return" do
|
|
174
|
+
expect{ subject }.to_not change { Spree::CustomerReturn.count }
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
it "renders the new page" do
|
|
178
|
+
subject
|
|
179
|
+
expect(response).to render_template(:new)
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Spree::Admin::GeneralSettingsController, type: :controller do
|
|
4
|
+
let(:user) { create(:user) }
|
|
5
|
+
|
|
6
|
+
before do
|
|
7
|
+
allow(controller).to receive_messages :spree_current_user => user
|
|
8
|
+
user.spree_roles << Spree::Role.find_or_create_by(name: 'admin')
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe '#clear_cache' do
|
|
12
|
+
subject { spree_post :clear_cache }
|
|
13
|
+
|
|
14
|
+
shared_examples 'a HTTP 204 response' do
|
|
15
|
+
it 'grant access to users with an admin role' do
|
|
16
|
+
subject
|
|
17
|
+
expect(response.status).to eq(204)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
context 'when no callback' do
|
|
22
|
+
it_behaves_like 'a HTTP 204 response'
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
context 'when callback implemented' do
|
|
26
|
+
Spree::Admin::GeneralSettingsController.class_eval do
|
|
27
|
+
custom_callback(:clear_cache).after :foo
|
|
28
|
+
|
|
29
|
+
def foo
|
|
30
|
+
# Make a call to Akamai, CloudFlare, etc invalidation....
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
before do
|
|
35
|
+
expect(controller).to receive(:foo).once
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it_behaves_like 'a HTTP 204 response'
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|