solidus_pagy 1.0.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/.circleci/config.yml +39 -0
- data/.gem_release.yml +5 -0
- data/.github/stale.yml +17 -0
- data/.github_changelog_generator +2 -0
- data/.gitignore +20 -0
- data/.rspec +2 -0
- data/.rubocop.yml +37 -0
- data/CHANGELOG.md +1 -0
- data/Gemfile +52 -0
- data/LICENSE +26 -0
- data/README.md +142 -0
- data/Rakefile +6 -0
- data/app/assets/javascripts/spree/backend/solidus_pagy.js +1 -0
- data/app/assets/javascripts/spree/frontend/solidus_pagy.js +2 -0
- data/app/assets/stylesheets/spree/backend/solidus_pagy.css +7 -0
- data/app/assets/stylesheets/spree/frontend/solidus_pagy.css +4 -0
- data/app/decorators/controllers/solidus_pagy/admin/base_controller_decorator.rb +13 -0
- data/app/decorators/controllers/solidus_pagy/admin/orders_controller_decorator.rb +63 -0
- data/app/decorators/controllers/solidus_pagy/admin/prices_controller_decorator.rb +51 -0
- data/app/decorators/controllers/solidus_pagy/admin/products_controller_decorator.rb +32 -0
- data/app/decorators/controllers/solidus_pagy/admin/promotion_codes_controller_decorator.rb +37 -0
- data/app/decorators/controllers/solidus_pagy/admin/promotions_controller_decorator.rb +32 -0
- data/app/decorators/controllers/solidus_pagy/admin/properties_controller_decorator.rb +32 -0
- data/app/decorators/controllers/solidus_pagy/admin/stock_items_controller_decorator.rb +42 -0
- data/app/decorators/controllers/solidus_pagy/admin/stock_locations_controller_decorator.rb +25 -0
- data/app/decorators/controllers/solidus_pagy/admin/stock_movements_controller_decorator.rb +25 -0
- data/app/decorators/controllers/solidus_pagy/admin/tax_rates_controller_decorator.rb +27 -0
- data/app/decorators/controllers/solidus_pagy/admin/users_controller_decorator.rb +68 -0
- data/app/decorators/controllers/solidus_pagy/admin/variants_controller_decorator.rb +33 -0
- data/app/decorators/controllers/solidus_pagy/admin/zones_controller_decorator.rb +28 -0
- data/app/overrides/spree/admin/orders/index/insert_pagy_pagination.rb +9 -0
- data/app/overrides/spree/admin/prices/_master_variant_table/insert_pagy_pagination.rb +11 -0
- data/app/overrides/spree/admin/prices/_table/insert_pagy_pagination.rb +11 -0
- data/app/overrides/spree/admin/products/index/insert_pagy_pagination.rb +9 -0
- data/app/overrides/spree/admin/promotion_codes/index/insert_pagy_pagination.rb +19 -0
- data/app/overrides/spree/admin/promotions/index/insert_pagy_pagination.rb +9 -0
- data/app/overrides/spree/admin/properties/index/insert_pagy_pagination.rb +9 -0
- data/app/overrides/spree/admin/stock_items/_stock_management/insert_pagy_pagination.rb +11 -0
- data/app/overrides/spree/admin/stock_locations/index/insert_pagy_pagination.rb +11 -0
- data/app/overrides/spree/admin/stock_movements/index/insert_pagy_pagination.rb +11 -0
- data/app/overrides/spree/admin/tax_rates/index/insert_pagy_pagination.rb +9 -0
- data/app/overrides/spree/admin/users/index/insert_pagy_pagination.rb +9 -0
- data/app/overrides/spree/admin/users/items/insert_pagy_pagination.rb +9 -0
- data/app/overrides/spree/admin/users/orders/insert_pagy_pagination.rb +9 -0
- data/app/overrides/spree/admin/variants/_table/insert_pagy_pagination.rb +9 -0
- data/app/overrides/spree/admin/zones/index/insert_pagy_pagination.rb +9 -0
- data/bin/console +17 -0
- data/bin/rails +7 -0
- data/bin/rails-engine +13 -0
- data/bin/rails-sandbox +16 -0
- data/bin/rake +7 -0
- data/bin/sandbox +86 -0
- data/bin/setup +8 -0
- data/config/locales/en.yml +5 -0
- data/config/routes.rb +5 -0
- data/lib/generators/solidus_pagy/install/install_generator.rb +18 -0
- data/lib/generators/solidus_pagy/install/templates/initializer.rb +30 -0
- data/lib/generators/solidus_pagy/install/templates/pagy.rb +235 -0
- data/lib/solidus_pagy/configuration.rb +27 -0
- data/lib/solidus_pagy/engine.rb +16 -0
- data/lib/solidus_pagy/testing_support/factories.rb +4 -0
- data/lib/solidus_pagy/version.rb +5 -0
- data/lib/solidus_pagy.rb +11 -0
- data/solidus_pagy.gemspec +44 -0
- data/spec/controllers/spree/admin/orders_controller_spec.rb +100 -0
- data/spec/controllers/spree/admin/prices_controller_spec.rb +80 -0
- data/spec/controllers/spree/admin/products_controller_spec.rb +57 -0
- data/spec/controllers/spree/admin/promotion_codes_controller_spec.rb +38 -0
- data/spec/controllers/spree/admin/promotions_controller_spec.rb +90 -0
- data/spec/controllers/spree/admin/properties_controller_spec.rb +15 -0
- data/spec/controllers/spree/admin/stock_items_controller_spec.rb +35 -0
- data/spec/controllers/spree/admin/stock_locations_controller_spec.rb +26 -0
- data/spec/controllers/spree/admin/stock_movements_controller_spec.rb +81 -0
- data/spec/controllers/spree/admin/tax_rates_controller_spec.rb +15 -0
- data/spec/controllers/spree/admin/users_controller_spec.rb +117 -0
- data/spec/controllers/spree/admin/variants_controller_spec.rb +76 -0
- data/spec/controllers/spree/admin/zones_controller_spec.rb +15 -0
- data/spec/solidus_pagy/configuration_spec.rb +55 -0
- data/spec/spec_helper.rb +31 -0
- data/spec/support/devise.rb +8 -0
- data/spec/support/pagy.rb.rb +8 -0
- data/spec/support/solidus.rb +16 -0
- metadata +248 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Spree::Admin::PromotionsController, type: :controller do
|
|
6
|
+
stub_authorization!
|
|
7
|
+
|
|
8
|
+
let!(:promotion1) do
|
|
9
|
+
create(
|
|
10
|
+
:promotion,
|
|
11
|
+
:with_action,
|
|
12
|
+
name: 'name1',
|
|
13
|
+
code: 'code1',
|
|
14
|
+
path: 'path1'
|
|
15
|
+
)
|
|
16
|
+
end
|
|
17
|
+
let!(:promotion2) do
|
|
18
|
+
create(
|
|
19
|
+
:promotion,
|
|
20
|
+
:with_action,
|
|
21
|
+
name: 'name2',
|
|
22
|
+
code: 'code2',
|
|
23
|
+
path: 'path2'
|
|
24
|
+
)
|
|
25
|
+
end
|
|
26
|
+
let!(:promotion3) do
|
|
27
|
+
create(
|
|
28
|
+
:promotion,
|
|
29
|
+
:with_action,
|
|
30
|
+
name: 'name2',
|
|
31
|
+
code: 'code3',
|
|
32
|
+
path: 'path3',
|
|
33
|
+
expires_at: Date.yesterday
|
|
34
|
+
)
|
|
35
|
+
end
|
|
36
|
+
let!(:category) { create :promotion_category }
|
|
37
|
+
|
|
38
|
+
context 'pagination' do
|
|
39
|
+
it 'can page through the promotions' do
|
|
40
|
+
get :index, params: { page: 1, per_page: 10 }
|
|
41
|
+
expect(assigns[:pagy].page).to eq(1)
|
|
42
|
+
expect(assigns[:pagy].items).to eq(10)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
describe '#index' do
|
|
47
|
+
it 'succeeds' do
|
|
48
|
+
get :index
|
|
49
|
+
expect(assigns[:promotions])
|
|
50
|
+
.to match_array [promotion3, promotion2, promotion1]
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it 'assigns promotion categories' do
|
|
54
|
+
get :index
|
|
55
|
+
expect(assigns[:promotion_categories]).to match_array [category]
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
context 'search' do
|
|
59
|
+
it 'pages results' do
|
|
60
|
+
get :index, params: { per_page: '1' }
|
|
61
|
+
expect(assigns[:promotions]).to eq [promotion3]
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it 'filters by name' do
|
|
65
|
+
get :index, params: { q: { name_cont: promotion1.name } }
|
|
66
|
+
expect(assigns[:promotions]).to eq [promotion1]
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it 'filters by code' do
|
|
70
|
+
get :index,
|
|
71
|
+
params: {
|
|
72
|
+
q: {
|
|
73
|
+
codes_value_cont: promotion1.codes.first.value
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
expect(assigns[:promotions]).to eq [promotion1]
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it 'filters by path' do
|
|
80
|
+
get :index, params: { q: { path_cont: promotion1.path } }
|
|
81
|
+
expect(assigns[:promotions]).to eq [promotion1]
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it 'filters by active' do
|
|
85
|
+
get :index, params: { q: { active: true } }
|
|
86
|
+
expect(assigns[:promotions]).to match_array [promotion2, promotion1]
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Spree::Admin::PropertiesController, type: :controller do
|
|
6
|
+
stub_authorization!
|
|
7
|
+
|
|
8
|
+
context 'pagination' do
|
|
9
|
+
it 'can page through the promotions' do
|
|
10
|
+
get :index, params: { page: 1 }
|
|
11
|
+
expect(assigns[:pagy].page).to eq(1)
|
|
12
|
+
expect(assigns[:pagy].items).to eq(15)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Spree::Admin::StockItemsController, type: :controller do
|
|
6
|
+
stub_authorization!
|
|
7
|
+
|
|
8
|
+
let(:stock_location) { create(:stock_location) }
|
|
9
|
+
|
|
10
|
+
context 'pagination' do
|
|
11
|
+
it 'can page through the promotions' do
|
|
12
|
+
get :index, params: { page: 1 }
|
|
13
|
+
expect(assigns[:pagy].page).to eq(1)
|
|
14
|
+
expect(assigns[:pagy].items).to eq(15)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe '#index' do
|
|
19
|
+
context 'without stock location' do
|
|
20
|
+
it 'returns 200' do
|
|
21
|
+
get :index
|
|
22
|
+
|
|
23
|
+
expect(response.status).to be(200)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
context 'with stock location' do
|
|
28
|
+
it 'returns 200' do
|
|
29
|
+
get :index, params: { stock_location_id: stock_location.id }
|
|
30
|
+
|
|
31
|
+
expect(response.status).to be(200)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Spree::Admin::StockLocationsController, type: :controller do
|
|
6
|
+
stub_authorization!
|
|
7
|
+
|
|
8
|
+
let!(:stock_location) { create(:stock_location) }
|
|
9
|
+
|
|
10
|
+
context 'with pagination' do
|
|
11
|
+
it 'can page through the promotions' do
|
|
12
|
+
get :index, params: { page: 1 }
|
|
13
|
+
expect(assigns[:pagy].page).to eq(1)
|
|
14
|
+
expect(assigns[:pagy].items).to eq(10)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe '#index' do
|
|
19
|
+
it 'returns 200' do
|
|
20
|
+
get :index
|
|
21
|
+
|
|
22
|
+
expect(assigns[:collection]).not_to be_empty
|
|
23
|
+
expect(assigns[:collection]).to include(stock_location)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Spree::Admin::StockMovementsController, type: :controller do
|
|
6
|
+
stub_authorization!
|
|
7
|
+
|
|
8
|
+
let!(:stock_location) do
|
|
9
|
+
create(
|
|
10
|
+
:stock_location_with_items
|
|
11
|
+
)
|
|
12
|
+
end
|
|
13
|
+
let!(:stock_movement1) do
|
|
14
|
+
create(
|
|
15
|
+
:stock_movement,
|
|
16
|
+
stock_item: stock_location.stock_items.first
|
|
17
|
+
)
|
|
18
|
+
end
|
|
19
|
+
let!(:stock_movement2) do
|
|
20
|
+
create(
|
|
21
|
+
:stock_movement,
|
|
22
|
+
stock_item: stock_location.stock_items.last
|
|
23
|
+
)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
context 'pagination' do
|
|
27
|
+
it 'can page through the promotions' do
|
|
28
|
+
get :index, params: { stock_location_id: stock_location.id, page: 1 }
|
|
29
|
+
expect(assigns[:pagy].page).to eq(1)
|
|
30
|
+
expect(assigns[:pagy].items).to eq(20)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe '#index' do
|
|
35
|
+
subject { get :index, params: params }
|
|
36
|
+
|
|
37
|
+
context 'with no params' do
|
|
38
|
+
let(:params) { { stock_location_id: stock_location.id } }
|
|
39
|
+
|
|
40
|
+
it 'responds with a successful status code' do
|
|
41
|
+
subject
|
|
42
|
+
|
|
43
|
+
expect(response).to be_successful
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it 'responds with all the stock locations stock movements' do
|
|
47
|
+
subject
|
|
48
|
+
|
|
49
|
+
expect(assigns[:stock_movements]).to contain_exactly(
|
|
50
|
+
stock_movement1,
|
|
51
|
+
stock_movement2
|
|
52
|
+
)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
context 'with search parameters' do
|
|
57
|
+
let(:params) do
|
|
58
|
+
{
|
|
59
|
+
stock_location_id: stock_location.id,
|
|
60
|
+
q: {
|
|
61
|
+
variant_sku_eq: stock_movement1.stock_item.variant.sku
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it 'responds with a successful status code' do
|
|
67
|
+
subject
|
|
68
|
+
|
|
69
|
+
expect(response).to be_successful
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it 'responds with the stock movements that match the search criteria' do
|
|
73
|
+
subject
|
|
74
|
+
|
|
75
|
+
expect(assigns[:stock_movements]).to contain_exactly(
|
|
76
|
+
stock_movement1,
|
|
77
|
+
)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Spree::Admin::TaxRatesController, type: :controller do
|
|
6
|
+
stub_authorization!
|
|
7
|
+
|
|
8
|
+
context 'with pagination' do
|
|
9
|
+
it 'can page through the promotions' do
|
|
10
|
+
get :index, params: { page: 1 }
|
|
11
|
+
expect(assigns[:pagy].page).to eq(1)
|
|
12
|
+
expect(assigns[:pagy].items).to eq(10)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Spree::Admin::UsersController, type: :controller do
|
|
6
|
+
stub_authorization!
|
|
7
|
+
|
|
8
|
+
let(:user) { create(:user) }
|
|
9
|
+
let(:state) { create(:state, state_code: 'NY') }
|
|
10
|
+
let(:valid_address_attributes) do
|
|
11
|
+
{
|
|
12
|
+
name: 'Foo Bar',
|
|
13
|
+
city: 'New York',
|
|
14
|
+
country_id: state.country.id,
|
|
15
|
+
state_id: state.id,
|
|
16
|
+
phone: '555-555-5555',
|
|
17
|
+
address1: '123 Fake St.',
|
|
18
|
+
zipcode: '10001',
|
|
19
|
+
}
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
context 'with pagination' do
|
|
23
|
+
it 'can page through the promotions' do
|
|
24
|
+
get :index, params: { id: user.id, page: 1 }
|
|
25
|
+
expect(assigns[:pagy].page).to eq(1)
|
|
26
|
+
expect(assigns[:pagy].items).to eq(20)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe '#index' do
|
|
31
|
+
stub_authorization! do |_user|
|
|
32
|
+
can :manage, Spree.user_class
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
context 'when the user can manage all users' do
|
|
36
|
+
it 'assigns a list of all users as @collection' do
|
|
37
|
+
get :index, params: { id: user.id }
|
|
38
|
+
expect(assigns(:collection)).to eq [user]
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it 'assigns a ransack search for Spree.user_class' do
|
|
42
|
+
get :index, params: { id: user.id }
|
|
43
|
+
expect(assigns[:search]).to be_a Ransack::Search
|
|
44
|
+
expect(assigns[:search].klass).to eq Spree.user_class
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
context 'when user cannot manage some users' do
|
|
49
|
+
stub_authorization! do |_user|
|
|
50
|
+
can :manage, Spree.user_class
|
|
51
|
+
cannot :manage, Spree.user_class, email: 'not_accessible_user@example.com'
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it 'assigns a list of accessible users as @collection' do
|
|
55
|
+
create(:user, email: 'not_accessible_user@example.com')
|
|
56
|
+
|
|
57
|
+
get :index, params: { id: user.id }
|
|
58
|
+
expect(assigns(:collection)).to eq [user]
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
context 'when Spree.user_class does not respond to #accessible_by' do
|
|
63
|
+
it 'assigns a list of all users as @collection' do
|
|
64
|
+
allow(Spree.user_class).to receive(:respond_to?).and_call_original
|
|
65
|
+
allow(Spree.user_class).to receive(:respond_to?)
|
|
66
|
+
.with(:accessible_by).and_return(false)
|
|
67
|
+
|
|
68
|
+
get :index, params: { id: user.id }
|
|
69
|
+
expect(assigns(:collection)).to eq [user]
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
describe '#orders' do
|
|
75
|
+
stub_authorization! do |_user|
|
|
76
|
+
can :manage, Spree.user_class
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
let(:order) { create(:order) }
|
|
80
|
+
|
|
81
|
+
before { user.orders << order }
|
|
82
|
+
|
|
83
|
+
it 'assigns a list of the users orders' do
|
|
84
|
+
get :orders, params: { id: user.id }
|
|
85
|
+
expect(assigns[:orders].count).to eq(1)
|
|
86
|
+
expect(assigns[:orders].first).to eq(order)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it 'assigns a ransack search for Spree::Order' do
|
|
90
|
+
get :orders, params: { id: user.id }
|
|
91
|
+
expect(assigns[:search]).to be_a(Ransack::Search)
|
|
92
|
+
expect(assigns[:search].klass).to eq(Spree::Order)
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
describe '#items' do
|
|
97
|
+
stub_authorization! do |_user|
|
|
98
|
+
can :manage, Spree.user_class
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
let(:order) { create(:order) }
|
|
102
|
+
|
|
103
|
+
before { user.orders << order }
|
|
104
|
+
|
|
105
|
+
it 'assigns a list of the users orders' do
|
|
106
|
+
get :items, params: { id: user.id }
|
|
107
|
+
expect(assigns[:orders].count).to eq(1)
|
|
108
|
+
expect(assigns[:orders].first).to eq(order)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it 'assigns a ransack search for Spree::Order' do
|
|
112
|
+
get :items, params: { id: user.id }
|
|
113
|
+
expect(assigns[:search]).to be_a(Ransack::Search)
|
|
114
|
+
expect(assigns[:search].klass).to eq(Spree::Order)
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Spree::Admin::VariantsController, type: :controller do
|
|
6
|
+
stub_authorization!
|
|
7
|
+
|
|
8
|
+
let!(:product) { create(:product) }
|
|
9
|
+
|
|
10
|
+
context 'with pagination' do
|
|
11
|
+
it 'can page through the promotions' do
|
|
12
|
+
get :index, params: { product_id: product.slug, page: 1 }
|
|
13
|
+
expect(assigns[:pagy].page).to eq(1)
|
|
14
|
+
expect(assigns[:pagy].items).to eq(20)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe '#index' do
|
|
19
|
+
let(:params) { { product_id: product.slug } }
|
|
20
|
+
|
|
21
|
+
subject { get :index, params: params }
|
|
22
|
+
|
|
23
|
+
context 'when the value of @parent' do
|
|
24
|
+
it 'is the product' do
|
|
25
|
+
subject
|
|
26
|
+
expect(assigns(:parent)).to eq product
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
context 'with a deleted product' do
|
|
30
|
+
before { product.discard }
|
|
31
|
+
|
|
32
|
+
it 'is the product' do
|
|
33
|
+
subject
|
|
34
|
+
expect(assigns(:parent)).to eq product
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
context 'when the value of @collection' do
|
|
40
|
+
let!(:variant) { create(:variant, product: product) }
|
|
41
|
+
let!(:deleted_variant) { create(:variant, product: product) }
|
|
42
|
+
|
|
43
|
+
context 'with soft-deleted variants' do
|
|
44
|
+
before { deleted_variant.discard }
|
|
45
|
+
|
|
46
|
+
context 'when deleted is not requested' do
|
|
47
|
+
it 'excludes deleted variants' do
|
|
48
|
+
subject
|
|
49
|
+
expect(assigns(:collection)).to include variant
|
|
50
|
+
expect(assigns(:collection)).not_to include deleted_variant
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
context 'when deleted is requested' do
|
|
55
|
+
let(:params) { { product_id: product.slug, deleted: 'on' } }
|
|
56
|
+
|
|
57
|
+
it 'includes deleted variants' do
|
|
58
|
+
subject
|
|
59
|
+
expect(assigns(:collection)).to include variant
|
|
60
|
+
expect(assigns(:collection)).to include deleted_variant
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
context 'when existent product id not given' do
|
|
65
|
+
let(:params) { { product_id: 'non-existent-product' } }
|
|
66
|
+
|
|
67
|
+
it 'cannot find non-existent product' do
|
|
68
|
+
subject
|
|
69
|
+
expect(response).to redirect_to(spree.admin_products_path)
|
|
70
|
+
expect(flash[:error]).to eql('Product is not found')
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Spree::Admin::ZonesController, type: :controller do
|
|
6
|
+
stub_authorization!
|
|
7
|
+
|
|
8
|
+
context 'with pagination' do
|
|
9
|
+
it 'can page through the promotions' do
|
|
10
|
+
get :index, params: { page: 1 }
|
|
11
|
+
expect(assigns[:pagy].page).to eq(1)
|
|
12
|
+
expect(assigns[:pagy].items).to eq(20)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe SolidusPagy::Configuration do
|
|
6
|
+
before do
|
|
7
|
+
SolidusPagy.configure do |config|
|
|
8
|
+
config.nav_helper = 'pagy_nav'
|
|
9
|
+
config.page = 1
|
|
10
|
+
config.items = 20
|
|
11
|
+
config.outset = 0
|
|
12
|
+
config.orders_per_page = 15
|
|
13
|
+
config.properties_per_page = 15
|
|
14
|
+
config.promotions_per_page = 15
|
|
15
|
+
config.admin_products_per_page = 10
|
|
16
|
+
config.admin_variants_per_page = 20
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'read nav_helper value' do
|
|
21
|
+
expect(SolidusPagy.config.nav_helper).to be('pagy_nav')
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'read page value' do
|
|
25
|
+
expect(SolidusPagy.config.page).to be(1)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it 'read items value' do
|
|
29
|
+
expect(SolidusPagy.config.items).to be(20)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it 'read outset value' do
|
|
33
|
+
expect(SolidusPagy.config.outset).to be(0)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'read orders_per_page value' do
|
|
37
|
+
expect(SolidusPagy.config.orders_per_page).to be(15)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it 'read properties_per_page value' do
|
|
41
|
+
expect(SolidusPagy.config.properties_per_page).to be(15)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it 'read promotions_per_page value' do
|
|
45
|
+
expect(SolidusPagy.config.promotions_per_page).to be(15)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it 'read admin_products_per_page value' do
|
|
49
|
+
expect(SolidusPagy.config.admin_products_per_page).to be(10)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it 'read admin_variants_per_page value' do
|
|
53
|
+
expect(SolidusPagy.config.admin_variants_per_page).to be(20)
|
|
54
|
+
end
|
|
55
|
+
end
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Configure Rails Environment
|
|
4
|
+
ENV['RAILS_ENV'] = 'test'
|
|
5
|
+
|
|
6
|
+
# Run Coverage report
|
|
7
|
+
require 'solidus_dev_support/rspec/coverage'
|
|
8
|
+
|
|
9
|
+
# Create the dummy app if it's still missing.
|
|
10
|
+
dummy_env = "#{__dir__}/dummy/config/environment.rb"
|
|
11
|
+
system 'bin/rake extension:test_app' unless File.exist? dummy_env
|
|
12
|
+
require dummy_env
|
|
13
|
+
|
|
14
|
+
# Requires factories and other useful helpers defined in spree_core.
|
|
15
|
+
require 'solidus_dev_support/rspec/feature_helper'
|
|
16
|
+
|
|
17
|
+
# Requires supporting ruby files with custom matchers and macros, etc,
|
|
18
|
+
# in spec/support/ and its subdirectories.
|
|
19
|
+
Dir["#{__dir__}/support/**/*.rb"].sort.each { |f| require f }
|
|
20
|
+
|
|
21
|
+
# Requires factories defined in lib/solidus_pagy/testing_support/factories.rb
|
|
22
|
+
SolidusDevSupport::TestingSupport::Factories.load_for(SolidusPagy::Engine)
|
|
23
|
+
|
|
24
|
+
RSpec.configure do |config|
|
|
25
|
+
config.infer_spec_type_from_file_location!
|
|
26
|
+
config.use_transactional_fixtures = false
|
|
27
|
+
|
|
28
|
+
if Spree.solidus_gem_version < Gem::Version.new('2.11')
|
|
29
|
+
config.extend Spree::TestingSupport::AuthorizationHelpers::Request, type: :system
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spree/testing_support/flash'
|
|
4
|
+
require 'spree/testing_support/url_helpers'
|
|
5
|
+
require 'spree/testing_support/controller_requests'
|
|
6
|
+
require 'spree/testing_support/authorization_helpers'
|
|
7
|
+
require 'spree/testing_support/translations'
|
|
8
|
+
require 'spree/testing_support/order_walkthrough'
|
|
9
|
+
|
|
10
|
+
RSpec.configure do |config|
|
|
11
|
+
config.include Spree::TestingSupport::Flash
|
|
12
|
+
config.include Spree::TestingSupport::UrlHelpers
|
|
13
|
+
config.include Spree::TestingSupport::ControllerRequests, type: :controller
|
|
14
|
+
config.include Spree::TestingSupport::Translations
|
|
15
|
+
config.include Rails.application.routes.url_helpers
|
|
16
|
+
end
|