solidus_core 1.1.0 → 1.1.1

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.
Files changed (228) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -0
  3. data/Rakefile +16 -0
  4. data/script/rails +9 -0
  5. data/solidus_core.gemspec +48 -0
  6. data/spec/fixtures/thinking-cat.jpg +0 -0
  7. data/spec/helpers/base_helper_spec.rb +173 -0
  8. data/spec/helpers/order_helper_spec.rb +12 -0
  9. data/spec/helpers/products_helper_spec.rb +208 -0
  10. data/spec/helpers/taxons_helper_spec.rb +17 -0
  11. data/spec/lib/calculated_adjustments_spec.rb +7 -0
  12. data/spec/lib/i18n_spec.rb +106 -0
  13. data/spec/lib/search/base_spec.rb +86 -0
  14. data/spec/lib/search/variant_spec.rb +112 -0
  15. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +66 -0
  16. data/spec/lib/spree/core/controller_helpers/order_spec.rb +92 -0
  17. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +80 -0
  18. data/spec/lib/spree/core/controller_helpers/search_spec.rb +17 -0
  19. data/spec/lib/spree/core/controller_helpers/store_spec.rb +16 -0
  20. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +39 -0
  21. data/spec/lib/spree/core/current_store_spec.rb +36 -0
  22. data/spec/lib/spree/core/delegate_belongs_to_spec.rb +24 -0
  23. data/spec/lib/spree/core/importer/order_spec.rb +431 -0
  24. data/spec/lib/spree/core/role_configuration_spec.rb +156 -0
  25. data/spec/lib/spree/core/unreturned_item_charger_spec.rb +130 -0
  26. data/spec/lib/spree/core/validators/email_spec.rb +48 -0
  27. data/spec/lib/spree/localized_number_spec.rb +38 -0
  28. data/spec/lib/spree/migrations_spec.rb +36 -0
  29. data/spec/lib/spree/money_spec.rb +127 -0
  30. data/spec/lib/tasks/exchanges_spec.rb +231 -0
  31. data/spec/lib/tasks/migrations/copy_shipped_shipments_to_cartons_spec.rb +115 -0
  32. data/spec/lib/tasks/order_capturing_spec.rb +56 -0
  33. data/spec/mailers/carton_mailer_spec.rb +55 -0
  34. data/spec/mailers/order_mailer_spec.rb +135 -0
  35. data/spec/mailers/reimbursement_mailer_spec.rb +40 -0
  36. data/spec/mailers/test_mailer_spec.rb +15 -0
  37. data/spec/models/spree/ability_spec.rb +276 -0
  38. data/spec/models/spree/address_spec.rb +376 -0
  39. data/spec/models/spree/adjustment_reason_spec.rb +13 -0
  40. data/spec/models/spree/adjustment_spec.rb +169 -0
  41. data/spec/models/spree/app_configuration_spec.rb +24 -0
  42. data/spec/models/spree/asset_spec.rb +24 -0
  43. data/spec/models/spree/calculator/default_tax_spec.rb +127 -0
  44. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +25 -0
  45. data/spec/models/spree/calculator/flat_rate_spec.rb +47 -0
  46. data/spec/models/spree/calculator/flexi_rate_spec.rb +41 -0
  47. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +15 -0
  48. data/spec/models/spree/calculator/price_sack_spec.rb +30 -0
  49. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +60 -0
  50. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +23 -0
  51. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +13 -0
  52. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +52 -0
  53. data/spec/models/spree/calculator/shipping/per_item_spec.rb +20 -0
  54. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +30 -0
  55. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +36 -0
  56. data/spec/models/spree/calculator/tiered_percent_spec.rb +47 -0
  57. data/spec/models/spree/calculator_spec.rb +36 -0
  58. data/spec/models/spree/carton_spec.rb +133 -0
  59. data/spec/models/spree/classification_spec.rb +93 -0
  60. data/spec/models/spree/concerns/display_money_spec.rb +43 -0
  61. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +25 -0
  62. data/spec/models/spree/concerns/user_address_book_spec.rb +332 -0
  63. data/spec/models/spree/concerns/user_methods_spec.rb +41 -0
  64. data/spec/models/spree/credit_card_spec.rb +341 -0
  65. data/spec/models/spree/customer_return_spec.rb +276 -0
  66. data/spec/models/spree/exchange_spec.rb +79 -0
  67. data/spec/models/spree/gateway/bogus_simple.rb +20 -0
  68. data/spec/models/spree/gateway/bogus_spec.rb +13 -0
  69. data/spec/models/spree/gateway_spec.rb +104 -0
  70. data/spec/models/spree/inventory_unit_spec.rb +307 -0
  71. data/spec/models/spree/item_adjustments_spec.rb +275 -0
  72. data/spec/models/spree/line_item_spec.rb +199 -0
  73. data/spec/models/spree/option_type_spec.rb +14 -0
  74. data/spec/models/spree/option_value_spec.rb +45 -0
  75. data/spec/models/spree/order/address_spec.rb +50 -0
  76. data/spec/models/spree/order/adjustments_spec.rb +27 -0
  77. data/spec/models/spree/order/callbacks_spec.rb +42 -0
  78. data/spec/models/spree/order/checkout_spec.rb +884 -0
  79. data/spec/models/spree/order/currency_updater_spec.rb +32 -0
  80. data/spec/models/spree/order/finalizing_spec.rb +110 -0
  81. data/spec/models/spree/order/payment_spec.rb +243 -0
  82. data/spec/models/spree/order/risk_assessment_spec.rb +68 -0
  83. data/spec/models/spree/order/state_machine_spec.rb +209 -0
  84. data/spec/models/spree/order/tax_spec.rb +84 -0
  85. data/spec/models/spree/order/totals_spec.rb +24 -0
  86. data/spec/models/spree/order/updating_spec.rb +18 -0
  87. data/spec/models/spree/order/validations_spec.rb +15 -0
  88. data/spec/models/spree/order_cancellations_spec.rb +120 -0
  89. data/spec/models/spree/order_capturing_spec.rb +150 -0
  90. data/spec/models/spree/order_contents_spec.rb +307 -0
  91. data/spec/models/spree/order_inventory_spec.rb +228 -0
  92. data/spec/models/spree/order_mutex_spec.rb +85 -0
  93. data/spec/models/spree/order_promotion_spec.rb +31 -0
  94. data/spec/models/spree/order_shipping_spec.rb +241 -0
  95. data/spec/models/spree/order_spec.rb +1482 -0
  96. data/spec/models/spree/order_stock_location_spec.rb +18 -0
  97. data/spec/models/spree/order_updater_spec.rb +283 -0
  98. data/spec/models/spree/payment_method/store_credit_spec.rb +294 -0
  99. data/spec/models/spree/payment_method_spec.rb +147 -0
  100. data/spec/models/spree/payment_spec.rb +1087 -0
  101. data/spec/models/spree/permission_sets/base_spec.rb +12 -0
  102. data/spec/models/spree/permission_sets/configuration_display.rb +82 -0
  103. data/spec/models/spree/permission_sets/configuration_management_spec.rb +50 -0
  104. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +22 -0
  105. data/spec/models/spree/permission_sets/order_display_spec.rb +55 -0
  106. data/spec/models/spree/permission_sets/order_management_spec.rb +42 -0
  107. data/spec/models/spree/permission_sets/product_display_spec.rb +60 -0
  108. data/spec/models/spree/permission_sets/product_management_spec.rb +40 -0
  109. data/spec/models/spree/permission_sets/promotion_display_spec.rb +40 -0
  110. data/spec/models/spree/permission_sets/promotion_management_spec.rb +26 -0
  111. data/spec/models/spree/permission_sets/report_display_spec.rb +24 -0
  112. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +41 -0
  113. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +41 -0
  114. data/spec/models/spree/permission_sets/restricted_stock_transfer_display_spec.rb +50 -0
  115. data/spec/models/spree/permission_sets/restricted_stock_transfer_management_spec.rb +160 -0
  116. data/spec/models/spree/permission_sets/stock_display_spec.rb +24 -0
  117. data/spec/models/spree/permission_sets/stock_management_spec.rb +22 -0
  118. data/spec/models/spree/permission_sets/stock_transfer_display_spec.rb +24 -0
  119. data/spec/models/spree/permission_sets/stock_transfer_management_spec.rb +25 -0
  120. data/spec/models/spree/permission_sets/user_display_spec.rb +38 -0
  121. data/spec/models/spree/permission_sets/user_management_spec.rb +48 -0
  122. data/spec/models/spree/preference_spec.rb +80 -0
  123. data/spec/models/spree/preferences/configuration_spec.rb +30 -0
  124. data/spec/models/spree/preferences/preferable_spec.rb +294 -0
  125. data/spec/models/spree/preferences/scoped_store_spec.rb +60 -0
  126. data/spec/models/spree/preferences/static_model_preferences_spec.rb +78 -0
  127. data/spec/models/spree/preferences/statically_configurable_spec.rb +60 -0
  128. data/spec/models/spree/preferences/store_spec.rb +39 -0
  129. data/spec/models/spree/price_spec.rb +42 -0
  130. data/spec/models/spree/product/scopes_spec.rb +116 -0
  131. data/spec/models/spree/product_duplicator_spec.rb +103 -0
  132. data/spec/models/spree/product_filter_spec.rb +26 -0
  133. data/spec/models/spree/product_property_spec.rb +18 -0
  134. data/spec/models/spree/product_spec.rb +504 -0
  135. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +96 -0
  136. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +165 -0
  137. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +115 -0
  138. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +40 -0
  139. data/spec/models/spree/promotion/rules/first_order_spec.rb +75 -0
  140. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +69 -0
  141. data/spec/models/spree/promotion/rules/item_total_spec.rb +67 -0
  142. data/spec/models/spree/promotion/rules/nth_order_spec.rb +70 -0
  143. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +42 -0
  144. data/spec/models/spree/promotion/rules/option_value_spec.rb +94 -0
  145. data/spec/models/spree/promotion/rules/product_spec.rb +143 -0
  146. data/spec/models/spree/promotion/rules/taxon_spec.rb +102 -0
  147. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +27 -0
  148. data/spec/models/spree/promotion/rules/user_spec.rb +37 -0
  149. data/spec/models/spree/promotion_builder_spec.rb +118 -0
  150. data/spec/models/spree/promotion_category_spec.rb +17 -0
  151. data/spec/models/spree/promotion_code/code_builder_spec.rb +79 -0
  152. data/spec/models/spree/promotion_code_spec.rb +187 -0
  153. data/spec/models/spree/promotion_handler/cart_spec.rb +130 -0
  154. data/spec/models/spree/promotion_handler/coupon_spec.rb +335 -0
  155. data/spec/models/spree/promotion_handler/free_shipping_spec.rb +47 -0
  156. data/spec/models/spree/promotion_handler/page_spec.rb +44 -0
  157. data/spec/models/spree/promotion_rule_spec.rb +28 -0
  158. data/spec/models/spree/promotion_spec.rb +776 -0
  159. data/spec/models/spree/refund_spec.rb +192 -0
  160. data/spec/models/spree/reimbursement/credit_spec.rb +36 -0
  161. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +140 -0
  162. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +83 -0
  163. data/spec/models/spree/reimbursement_performer_spec.rb +30 -0
  164. data/spec/models/spree/reimbursement_spec.rb +231 -0
  165. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +51 -0
  166. data/spec/models/spree/reimbursement_type/credit_spec.rb +53 -0
  167. data/spec/models/spree/reimbursement_type/exchange_spec.rb +46 -0
  168. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +107 -0
  169. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +97 -0
  170. data/spec/models/spree/return_authorization_spec.rb +290 -0
  171. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +77 -0
  172. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +58 -0
  173. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +85 -0
  174. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +32 -0
  175. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +29 -0
  176. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +35 -0
  177. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +65 -0
  178. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +43 -0
  179. data/spec/models/spree/return_item_spec.rb +776 -0
  180. data/spec/models/spree/returns_calculator_spec.rb +14 -0
  181. data/spec/models/spree/shipment_spec.rb +753 -0
  182. data/spec/models/spree/shipping_calculator_spec.rb +45 -0
  183. data/spec/models/spree/shipping_manifest_spec.rb +94 -0
  184. data/spec/models/spree/shipping_method_spec.rb +88 -0
  185. data/spec/models/spree/shipping_rate_spec.rb +142 -0
  186. data/spec/models/spree/state_spec.rb +14 -0
  187. data/spec/models/spree/stock/availability_validator_spec.rb +83 -0
  188. data/spec/models/spree/stock/coordinator_spec.rb +116 -0
  189. data/spec/models/spree/stock/differentiator_spec.rb +39 -0
  190. data/spec/models/spree/stock/estimator_spec.rb +146 -0
  191. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +38 -0
  192. data/spec/models/spree/stock/package_spec.rb +163 -0
  193. data/spec/models/spree/stock/packer_spec.rb +91 -0
  194. data/spec/models/spree/stock/prioritizer_spec.rb +125 -0
  195. data/spec/models/spree/stock/quantifier_spec.rb +115 -0
  196. data/spec/models/spree/stock/splitter/backordered_spec.rb +29 -0
  197. data/spec/models/spree/stock/splitter/base_spec.rb +21 -0
  198. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +50 -0
  199. data/spec/models/spree/stock/splitter/weight_spec.rb +29 -0
  200. data/spec/models/spree/stock_item_spec.rb +444 -0
  201. data/spec/models/spree/stock_location_spec.rb +279 -0
  202. data/spec/models/spree/stock_movement_spec.rb +56 -0
  203. data/spec/models/spree/stock_transfer_spec.rb +290 -0
  204. data/spec/models/spree/store_credit_category_spec.rb +17 -0
  205. data/spec/models/spree/store_credit_event_spec.rb +314 -0
  206. data/spec/models/spree/store_credit_spec.rb +876 -0
  207. data/spec/models/spree/store_spec.rb +55 -0
  208. data/spec/models/spree/tax_category_spec.rb +27 -0
  209. data/spec/models/spree/tax_rate_spec.rb +378 -0
  210. data/spec/models/spree/taxon_spec.rb +74 -0
  211. data/spec/models/spree/taxonomy_spec.rb +18 -0
  212. data/spec/models/spree/tracker_spec.rb +21 -0
  213. data/spec/models/spree/transfer_item_spec.rb +264 -0
  214. data/spec/models/spree/unit_cancel_spec.rb +149 -0
  215. data/spec/models/spree/user_spec.rb +246 -0
  216. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +23 -0
  217. data/spec/models/spree/variant/scopes_spec.rb +55 -0
  218. data/spec/models/spree/variant_property_rule_condition_spec.rb +15 -0
  219. data/spec/models/spree/variant_property_rule_spec.rb +83 -0
  220. data/spec/models/spree/variant_property_rule_value_spec.rb +18 -0
  221. data/spec/models/spree/variant_spec.rb +601 -0
  222. data/spec/models/spree/zone_spec.rb +305 -0
  223. data/spec/spec_helper.rb +80 -0
  224. data/spec/support/big_decimal.rb +5 -0
  225. data/spec/support/concerns/default_price.rb +34 -0
  226. data/spec/support/dummy_ability.rb +4 -0
  227. data/spec/support/test_gateway.rb +2 -0
  228. metadata +242 -2
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::PermissionSets::RestrictedStockDisplay do
4
+ let(:ability) { Spree::Ability.new(user) }
5
+ let(:user) { create :user }
6
+
7
+ subject { ability }
8
+
9
+ let!(:variant) { create :variant }
10
+
11
+ let(:sl1) { create :stock_location, active: false }
12
+ let(:sl2) { create :stock_location, active: false }
13
+
14
+ let(:item1) { variant.stock_items.where(stock_location_id: sl1.id).first }
15
+ let(:item2) { variant.stock_items.where(stock_location_id: sl2.id).first }
16
+
17
+ before do
18
+ user.stock_locations << sl1
19
+ end
20
+
21
+ context "when activated" do
22
+ before do
23
+ described_class.new(ability).activate!
24
+ end
25
+
26
+ it { is_expected.to be_able_to(:display, sl1) }
27
+ it { is_expected.to_not be_able_to(:display, sl2) }
28
+
29
+ it { is_expected.to be_able_to(:display, item1) }
30
+ it { is_expected.to_not be_able_to(:display, item2) }
31
+ end
32
+
33
+ context "when not activated" do
34
+ it { is_expected.to_not be_able_to(:display, sl1) }
35
+ it { is_expected.to_not be_able_to(:display, sl2) }
36
+
37
+ it { is_expected.to_not be_able_to(:display, item1) }
38
+ it { is_expected.to_not be_able_to(:display, item2) }
39
+ end
40
+ end
41
+
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::PermissionSets::RestrictedStockManagement do
4
+ let(:ability) { Spree::Ability.new(user) }
5
+ let(:user) { create :user }
6
+
7
+ subject { ability }
8
+
9
+ let!(:variant) { create :variant }
10
+
11
+ let(:sl1) { create :stock_location, active: false }
12
+ let(:sl2) { create :stock_location, active: false }
13
+
14
+ let(:item1) { variant.stock_items.where(stock_location_id: sl1.id).first }
15
+ let(:item2) { variant.stock_items.where(stock_location_id: sl2.id).first }
16
+
17
+ before do
18
+ user.stock_locations << sl1
19
+ end
20
+
21
+ context "when activated" do
22
+ before do
23
+ described_class.new(ability).activate!
24
+ end
25
+
26
+ it { is_expected.to be_able_to(:display, sl1) }
27
+ it { is_expected.to_not be_able_to(:display, sl2) }
28
+
29
+ it { is_expected.to be_able_to(:manage, item1) }
30
+ it { is_expected.to_not be_able_to(:manage, item2) }
31
+ end
32
+
33
+ context "when not activated" do
34
+ it { is_expected.to_not be_able_to(:display, sl1) }
35
+ it { is_expected.to_not be_able_to(:display, sl2) }
36
+
37
+ it { is_expected.to_not be_able_to(:manage, item1) }
38
+ it { is_expected.to_not be_able_to(:manage, item2) }
39
+ end
40
+ end
41
+
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::PermissionSets::RestrictedStockTransferDisplay do
4
+ let(:ability) { Spree::Ability.new(user) }
5
+ let(:user) { create :user }
6
+
7
+ subject { ability }
8
+
9
+ let!(:sl1) { create :stock_location, active: false }
10
+ let!(:sl2) { create :stock_location, active: false }
11
+
12
+ let!(:source_transfer) { create :stock_transfer, source_location: sl1 }
13
+ let!(:other_source_transfer) { create :stock_transfer, source_location: sl2 }
14
+ let!(:dest_transfer) { create :stock_transfer, source_location: sl2, destination_location: sl1 }
15
+
16
+
17
+ before do
18
+ user.stock_locations << sl1
19
+ end
20
+
21
+ context "when activated" do
22
+ before do
23
+ described_class.new(ability).activate!
24
+ end
25
+
26
+ it { is_expected.to be_able_to(:display, sl1) }
27
+ it { is_expected.to_not be_able_to(:display, sl2) }
28
+
29
+ it { is_expected.to be_able_to(:display, source_transfer) }
30
+ it { is_expected.to_not be_able_to(:display, other_source_transfer) }
31
+ it { is_expected.to be_able_to(:display, dest_transfer) }
32
+
33
+ it { is_expected.to be_able_to(:admin, source_transfer) }
34
+ it { is_expected.to_not be_able_to(:admin, other_source_transfer) }
35
+ it { is_expected.to be_able_to(:admin, dest_transfer) }
36
+ end
37
+
38
+ context "when not activated" do
39
+ it { is_expected.to_not be_able_to(:display, sl1) }
40
+ it { is_expected.to_not be_able_to(:display, sl2) }
41
+
42
+ it { is_expected.to_not be_able_to(:display, source_transfer) }
43
+ it { is_expected.to_not be_able_to(:display, other_source_transfer) }
44
+ it { is_expected.to_not be_able_to(:display, dest_transfer) }
45
+
46
+ it { is_expected.to_not be_able_to(:admin, source_transfer) }
47
+ it { is_expected.to_not be_able_to(:admin, other_source_transfer) }
48
+ it { is_expected.to_not be_able_to(:admin, dest_transfer) }
49
+ end
50
+ end
@@ -0,0 +1,160 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::PermissionSets::RestrictedStockTransferManagement do
4
+ let(:ability) { Spree::Ability.new(user) }
5
+
6
+ subject { ability }
7
+
8
+ # Inactive stock locations will default to not being visible
9
+ # for users without explicit permissions.
10
+ let!(:source_location) { create :stock_location, active: false }
11
+ let!(:destination_location) { create :stock_location, active: false }
12
+
13
+ # This has the side effect of creating a stock item for each stock location above,
14
+ # which is what we actually want.
15
+ let!(:variant) { create :variant }
16
+
17
+ let(:transfer_with_source) { create :stock_transfer, source_location: source_location }
18
+ let(:transfer_with_destination) { create :stock_transfer, source_location: destination_location }
19
+ let(:transfer_with_source_and_destination) do
20
+ create :stock_transfer, source_location: source_location, destination_location: destination_location
21
+ end
22
+
23
+ let(:transfer_amount) { 1 }
24
+ let(:source_transfer_item) do
25
+ transfer_with_source.transfer_items.create(variant: variant, expected_quantity: transfer_amount)
26
+ end
27
+ let(:destination_transfer_item) do
28
+ transfer_with_destination.transfer_items.create(variant: variant, expected_quantity: transfer_amount)
29
+ end
30
+ let(:source_and_destination_transfer_item) do
31
+ transfer_with_source_and_destination.transfer_items.create(variant: variant, expected_quantity: transfer_amount)
32
+ end
33
+
34
+ context "when activated" do
35
+ let(:user) { create :user, stock_locations: stock_locations }
36
+ let(:stock_locations) {[]}
37
+
38
+ before do
39
+ user.stock_locations = stock_locations
40
+ # When creating transfer_items for a stock transfer, stock items must have a count on hand
41
+ # with an amount that would allow a transfer item to pass validations (meaning the count on hand has to be equal
42
+ # to the expected_quantity for the transfer)
43
+ variant.stock_items.update_all count_on_hand: transfer_amount
44
+
45
+ described_class.new(ability).activate!
46
+ end
47
+
48
+ context "when the user is only associated with the source location" do
49
+ let(:stock_locations) {[source_location]}
50
+
51
+ it { is_expected.to be_able_to(:display, source_location) }
52
+ it { is_expected.to_not be_able_to(:display, destination_location) }
53
+
54
+ it { is_expected.to be_able_to(:display, Spree::StockTransfer) }
55
+ it { is_expected.to be_able_to(:admin, Spree::StockTransfer) }
56
+ it { is_expected.to be_able_to(:create, Spree::StockTransfer) }
57
+
58
+ it { is_expected.to be_able_to(:transfer_from, source_location) }
59
+ it { is_expected.to be_able_to(:transfer_to, source_location) }
60
+
61
+ it { is_expected.not_to be_able_to(:transfer_from, destination_location) }
62
+ it { is_expected.not_to be_able_to(:transfer_to, destination_location) }
63
+
64
+ it { is_expected.to be_able_to(:display, transfer_with_source) }
65
+ it { is_expected.to be_able_to(:display, transfer_with_source_and_destination) }
66
+ it { is_expected.not_to be_able_to(:display, transfer_with_destination) }
67
+
68
+ it { is_expected.to be_able_to(:manage, transfer_with_source) }
69
+ it { is_expected.not_to be_able_to(:manage, transfer_with_destination) }
70
+ it { is_expected.not_to be_able_to(:manage, transfer_with_source_and_destination) }
71
+
72
+ it { is_expected.to be_able_to(:manage, source_transfer_item) }
73
+ it { is_expected.not_to be_able_to(:manage, destination_transfer_item) }
74
+ it { is_expected.not_to be_able_to(:manage, source_and_destination_transfer_item) }
75
+ end
76
+
77
+
78
+ context "when the user is associated with both locations" do
79
+ let(:stock_locations) {[source_location, destination_location]}
80
+
81
+ it { is_expected.to be_able_to(:display, source_location) }
82
+ it { is_expected.to be_able_to(:display, destination_location) }
83
+
84
+ it { is_expected.to be_able_to(:display, Spree::StockTransfer) }
85
+ it { is_expected.to be_able_to(:admin, Spree::StockTransfer) }
86
+ it { is_expected.to be_able_to(:create, Spree::StockTransfer) }
87
+
88
+ it { is_expected.to be_able_to(:transfer_from, source_location) }
89
+ it { is_expected.to be_able_to(:transfer_to, source_location) }
90
+
91
+ it { is_expected.to be_able_to(:transfer_from, destination_location) }
92
+ it { is_expected.to be_able_to(:transfer_to, destination_location) }
93
+
94
+ it { is_expected.to be_able_to(:display, transfer_with_source) }
95
+ it { is_expected.to be_able_to(:display, transfer_with_source_and_destination) }
96
+ it { is_expected.to be_able_to(:display, transfer_with_destination) }
97
+
98
+ it { is_expected.to be_able_to(:manage, transfer_with_source) }
99
+ it { is_expected.to be_able_to(:manage, transfer_with_destination) }
100
+ it { is_expected.to be_able_to(:manage, transfer_with_source_and_destination) }
101
+
102
+ it { is_expected.to be_able_to(:manage, source_transfer_item) }
103
+ it { is_expected.to be_able_to(:manage, destination_transfer_item) }
104
+ it { is_expected.to be_able_to(:manage, source_and_destination_transfer_item) }
105
+ end
106
+
107
+ context "when the user is associated with neither location" do
108
+ let(:stock_locations) {[]}
109
+
110
+ it { is_expected.to_not be_able_to(:display, source_location) }
111
+ it { is_expected.to_not be_able_to(:display, destination_location) }
112
+
113
+ it { is_expected.not_to be_able_to(:display, Spree::StockTransfer) }
114
+ it { is_expected.not_to be_able_to(:admin, Spree::StockTransfer) }
115
+ it { is_expected.not_to be_able_to(:create, Spree::StockTransfer) }
116
+
117
+ it { is_expected.not_to be_able_to(:transfer_from, source_location) }
118
+ it { is_expected.not_to be_able_to(:transfer_to, source_location) }
119
+
120
+ it { is_expected.not_to be_able_to(:transfer_from, destination_location) }
121
+ it { is_expected.not_to be_able_to(:transfer_to, destination_location) }
122
+
123
+ it { is_expected.not_to be_able_to(:manage, transfer_with_source) }
124
+ it { is_expected.not_to be_able_to(:manage, transfer_with_destination) }
125
+ it { is_expected.not_to be_able_to(:manage, transfer_with_source_and_destination) }
126
+
127
+ it { is_expected.not_to be_able_to(:manage, source_transfer_item) }
128
+ it { is_expected.not_to be_able_to(:manage, destination_transfer_item) }
129
+ it { is_expected.not_to be_able_to(:manage, source_and_destination_transfer_item) }
130
+ end
131
+ end
132
+
133
+ context "when not activated" do
134
+ let(:user) { create :user }
135
+
136
+ it { is_expected.not_to be_able_to(:display, Spree::StockTransfer) }
137
+ it { is_expected.not_to be_able_to(:admin, Spree::StockTransfer) }
138
+ it { is_expected.not_to be_able_to(:create, Spree::StockTransfer) }
139
+
140
+ it { is_expected.to_not be_able_to(:display, source_location) }
141
+ it { is_expected.to_not be_able_to(:display, destination_location) }
142
+
143
+ it { is_expected.not_to be_able_to(:transfer_from, source_location) }
144
+ it { is_expected.not_to be_able_to(:transfer_to, source_location) }
145
+
146
+ it { is_expected.not_to be_able_to(:transfer_from, destination_location) }
147
+ it { is_expected.not_to be_able_to(:transfer_to, destination_location) }
148
+
149
+ it { is_expected.to_not be_able_to(:display, source_location) }
150
+ it { is_expected.to_not be_able_to(:display, destination_location) }
151
+
152
+ it { is_expected.not_to be_able_to(:manage, transfer_with_source) }
153
+ it { is_expected.not_to be_able_to(:manage, transfer_with_destination) }
154
+ it { is_expected.not_to be_able_to(:manage, transfer_with_source_and_destination) }
155
+
156
+ it { is_expected.not_to be_able_to(:manage, source_transfer_item) }
157
+ it { is_expected.not_to be_able_to(:manage, destination_transfer_item) }
158
+ it { is_expected.not_to be_able_to(:manage, source_and_destination_transfer_item) }
159
+ end
160
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::PermissionSets::StockDisplay do
4
+ let(:ability) { DummyAbility.new }
5
+
6
+ subject { ability }
7
+
8
+ context "when activated" do
9
+ before do
10
+ described_class.new(ability).activate!
11
+ end
12
+
13
+ it { is_expected.to be_able_to(:display, Spree::StockItem) }
14
+ it { is_expected.to be_able_to(:admin, Spree::StockItem) }
15
+ it { is_expected.to be_able_to(:display, Spree::StockLocation) }
16
+ end
17
+
18
+ context "when not activated" do
19
+ it { is_expected.not_to be_able_to(:display, Spree::StockItem) }
20
+ it { is_expected.not_to be_able_to(:admin, Spree::StockItem) }
21
+ it { is_expected.not_to be_able_to(:display, Spree::StockLocation) }
22
+ end
23
+ end
24
+
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::PermissionSets::StockManagement do
4
+ let(:ability) { DummyAbility.new }
5
+
6
+ subject { ability }
7
+
8
+ context "when activated" do
9
+ before do
10
+ described_class.new(ability).activate!
11
+ end
12
+
13
+ it { is_expected.to be_able_to(:manage, Spree::StockItem) }
14
+ it { is_expected.to be_able_to(:display, Spree::StockLocation) }
15
+ end
16
+
17
+ context "when not activated" do
18
+ it { is_expected.not_to be_able_to(:manage, Spree::StockItem) }
19
+ it { is_expected.not_to be_able_to(:display, Spree::StockLocation) }
20
+ end
21
+ end
22
+
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::PermissionSets::StockTransferDisplay do
4
+ let(:ability) { DummyAbility.new }
5
+
6
+ subject { ability }
7
+
8
+ context "when activated" do
9
+ before do
10
+ described_class.new(ability).activate!
11
+ end
12
+
13
+ it { is_expected.to be_able_to(:display, Spree::StockTransfer) }
14
+ it { is_expected.to be_able_to(:admin, Spree::StockTransfer) }
15
+ it { is_expected.to be_able_to(:display, Spree::StockLocation) }
16
+ end
17
+
18
+ context "when not activated" do
19
+ it { is_expected.not_to be_able_to(:display, Spree::StockTransfer) }
20
+ it { is_expected.not_to be_able_to(:admin, Spree::StockTransfer) }
21
+ it { is_expected.not_to be_able_to(:display, Spree::StockLocation) }
22
+ end
23
+ end
24
+
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::PermissionSets::StockTransferManagement do
4
+ let(:ability) { DummyAbility.new }
5
+
6
+ subject { ability }
7
+
8
+ context "when activated" do
9
+ before do
10
+ described_class.new(ability).activate!
11
+ end
12
+
13
+ it { is_expected.to be_able_to(:manage, Spree::StockTransfer) }
14
+ it { is_expected.to be_able_to(:manage, Spree::TransferItem) }
15
+ it { is_expected.to be_able_to(:display, Spree::StockLocation) }
16
+ end
17
+
18
+ context "when not activated" do
19
+ it { is_expected.to_not be_able_to(:manage, Spree::StockTransfer) }
20
+ it { is_expected.to_not be_able_to(:manage, Spree::TransferItem) }
21
+ it { is_expected.not_to be_able_to(:display, Spree::StockLocation) }
22
+ end
23
+ end
24
+
25
+
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::PermissionSets::UserDisplay do
4
+ let(:ability) { DummyAbility.new }
5
+
6
+ subject { ability }
7
+
8
+ context "when activated" do
9
+ before do
10
+ described_class.new(ability).activate!
11
+ end
12
+
13
+ it { is_expected.to be_able_to(:display, Spree.user_class) }
14
+ it { is_expected.to be_able_to(:admin, Spree.user_class) }
15
+ it { is_expected.to be_able_to(:edit, Spree.user_class) }
16
+ it { is_expected.to be_able_to(:addresses, Spree.user_class) }
17
+ it { is_expected.to be_able_to(:orders, Spree.user_class) }
18
+ it { is_expected.to be_able_to(:items, Spree.user_class) }
19
+ it { is_expected.to be_able_to(:display, Spree::StoreCredit) }
20
+ it { is_expected.to be_able_to(:admin, Spree::StoreCredit) }
21
+ it { is_expected.to be_able_to(:display, Spree::Role) }
22
+ it { is_expected.not_to be_able_to(:delete, Spree.user_class) }
23
+ it { is_expected.not_to be_able_to(:destroy, Spree.user_class) }
24
+ end
25
+
26
+ context "when not activated" do
27
+ it { is_expected.not_to be_able_to(:display, Spree.user_class) }
28
+ it { is_expected.not_to be_able_to(:admin, Spree.user_class) }
29
+ it { is_expected.not_to be_able_to(:edit, Spree.user_class) }
30
+ it { is_expected.not_to be_able_to(:addresses, Spree.user_class) }
31
+ it { is_expected.not_to be_able_to(:orders, Spree.user_class) }
32
+ it { is_expected.not_to be_able_to(:items, Spree.user_class) }
33
+ it { is_expected.not_to be_able_to(:display, Spree::StoreCredit) }
34
+ it { is_expected.not_to be_able_to(:admin, Spree::StoreCredit) }
35
+ it { is_expected.not_to be_able_to(:display, Spree::Role) }
36
+ end
37
+ end
38
+
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::PermissionSets::UserManagement do
4
+ let(:ability) { DummyAbility.new }
5
+
6
+ subject { ability }
7
+
8
+ context "when activated" do
9
+ before do
10
+ described_class.new(ability).activate!
11
+ end
12
+
13
+ it { is_expected.to be_able_to(:admin, Spree.user_class) }
14
+ it { is_expected.to be_able_to(:display, Spree.user_class) }
15
+ it { is_expected.to be_able_to(:create, Spree.user_class) }
16
+ it { is_expected.to be_able_to(:update, Spree.user_class) }
17
+ it { is_expected.to be_able_to(:save_in_address_book, Spree.user_class) }
18
+ it { is_expected.to be_able_to(:remove_from_address_book, Spree.user_class) }
19
+ it { is_expected.to be_able_to(:addresses, Spree.user_class) }
20
+ it { is_expected.to be_able_to(:orders, Spree.user_class) }
21
+ it { is_expected.to be_able_to(:items, Spree.user_class) }
22
+
23
+ it { is_expected.to be_able_to(:update_email, Spree.user_class.new(spree_roles: [])) }
24
+ it { is_expected.not_to be_able_to(:update_email, Spree.user_class.new(spree_roles: [create(:role)])) }
25
+
26
+ it { is_expected.not_to be_able_to(:delete, Spree.user_class) }
27
+ it { is_expected.not_to be_able_to(:destroy, Spree.user_class) }
28
+
29
+ it { is_expected.to be_able_to(:manage, Spree::StoreCredit) }
30
+ it { is_expected.to be_able_to(:display, Spree::Role) }
31
+ end
32
+
33
+ context "when not activated" do
34
+ it { is_expected.not_to be_able_to(:manage, Spree.user_class) }
35
+ it { is_expected.not_to be_able_to(:delete, Spree.user_class) }
36
+ it { is_expected.not_to be_able_to(:destroy, Spree.user_class) }
37
+ it { is_expected.not_to be_able_to(:update, Spree.user_class) }
38
+ it { is_expected.not_to be_able_to(:save_in_address_book, Spree.user_class) }
39
+ it { is_expected.not_to be_able_to(:remove_from_address_book, Spree.user_class) }
40
+ it { is_expected.not_to be_able_to(:addresses, Spree.user_class) }
41
+ it { is_expected.not_to be_able_to(:orders, Spree.user_class) }
42
+ it { is_expected.not_to be_able_to(:items, Spree.user_class) }
43
+ it { is_expected.not_to be_able_to(:destroy, Spree.user_class) }
44
+ it { is_expected.not_to be_able_to(:manage, Spree::StoreCredit) }
45
+ it { is_expected.not_to be_able_to(:display, Spree::Role) }
46
+ end
47
+ end
48
+