spree_core 3.3.0.rc1 → 3.3.0.rc2

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 (220) hide show
  1. checksums.yaml +4 -4
  2. data/app/helpers/spree/base_helper.rb +1 -1
  3. data/app/mailers/spree/base_mailer.rb +5 -0
  4. data/app/models/spree/ability.rb +4 -1
  5. data/app/models/spree/image.rb +6 -2
  6. data/app/models/spree/order.rb +10 -9
  7. data/app/models/spree/order/payments.rb +1 -1
  8. data/app/models/spree/payment_method/store_credit.rb +4 -0
  9. data/app/models/spree/shipment.rb +2 -0
  10. data/app/views/spree/shared/_base_mailer_header.html.erb +5 -1
  11. data/app/views/spree/shared/_mailer_line_item.html.erb +5 -1
  12. data/config/routes.rb +0 -3
  13. data/lib/spree/core/components.rb +17 -0
  14. data/lib/spree/core/controller_helpers/auth.rb +3 -1
  15. data/lib/spree/core/engine.rb +1 -0
  16. data/lib/spree/core/validators/email.rb +1 -5
  17. data/lib/spree/core/version.rb +1 -1
  18. data/spree_core.gemspec +1 -1
  19. metadata +4 -204
  20. data/lib/spree/testing_support/shoulda_matcher_configuration.rb +0 -6
  21. data/spec/fixtures/thinking-cat.jpg +0 -0
  22. data/spec/helpers/base_helper_spec.rb +0 -200
  23. data/spec/helpers/products_helper_spec.rb +0 -289
  24. data/spec/lib/calculated_adjustments_spec.rb +0 -7
  25. data/spec/lib/i18n_spec.rb +0 -123
  26. data/spec/lib/search/base_spec.rb +0 -86
  27. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -103
  28. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -110
  29. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -17
  30. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -72
  31. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -39
  32. data/spec/lib/spree/core/delegate_belongs_to_spec.rb +0 -22
  33. data/spec/lib/spree/core/importer/order_spec.rb +0 -607
  34. data/spec/lib/spree/core/number_generator_spec.rb +0 -139
  35. data/spec/lib/spree/core/token_generator_spec.rb +0 -24
  36. data/spec/lib/spree/core/validators/email_spec.rb +0 -54
  37. data/spec/lib/spree/core_spec.rb +0 -23
  38. data/spec/lib/spree/localized_number_spec.rb +0 -54
  39. data/spec/lib/spree/migrations_spec.rb +0 -36
  40. data/spec/lib/spree/money_spec.rb +0 -122
  41. data/spec/lib/tasks/exchanges_spec.rb +0 -136
  42. data/spec/mailers/order_mailer_spec.rb +0 -122
  43. data/spec/mailers/reimbursement_mailer_spec.rb +0 -52
  44. data/spec/mailers/shipment_mailer_spec.rb +0 -81
  45. data/spec/mailers/test_mailer_spec.rb +0 -38
  46. data/spec/models/spree/ability_spec.rb +0 -251
  47. data/spec/models/spree/address_spec.rb +0 -402
  48. data/spec/models/spree/adjustable/adjuster/base_spec.rb +0 -10
  49. data/spec/models/spree/adjustable/adjuster/promotion_spec.rb +0 -211
  50. data/spec/models/spree/adjustable/adjuster/tax_spec.rb +0 -86
  51. data/spec/models/spree/adjustable/adjustments_updater_spec.rb +0 -26
  52. data/spec/models/spree/adjustment_spec.rb +0 -189
  53. data/spec/models/spree/app_configuration_spec.rb +0 -26
  54. data/spec/models/spree/asset_spec.rb +0 -28
  55. data/spec/models/spree/calculator/default_tax_spec.rb +0 -152
  56. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -25
  57. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -47
  58. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -41
  59. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -15
  60. data/spec/models/spree/calculator/price_sack_spec.rb +0 -30
  61. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -47
  62. data/spec/models/spree/calculator/shipping.rb +0 -8
  63. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -23
  64. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -13
  65. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -52
  66. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -20
  67. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -29
  68. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -40
  69. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -51
  70. data/spec/models/spree/calculator_spec.rb +0 -69
  71. data/spec/models/spree/classification_spec.rb +0 -93
  72. data/spec/models/spree/concerns/display_money_spec.rb +0 -43
  73. data/spec/models/spree/concerns/user_methods_spec.rb +0 -82
  74. data/spec/models/spree/concerns/vat_price_calculation_spec.rb +0 -66
  75. data/spec/models/spree/country_spec.rb +0 -55
  76. data/spec/models/spree/credit_card_spec.rb +0 -328
  77. data/spec/models/spree/customer_return_spec.rb +0 -240
  78. data/spec/models/spree/exchange_spec.rb +0 -75
  79. data/spec/models/spree/gateway/bogus_simple.rb +0 -20
  80. data/spec/models/spree/gateway/bogus_spec.rb +0 -13
  81. data/spec/models/spree/gateway_spec.rb +0 -61
  82. data/spec/models/spree/image_spec.rb +0 -8
  83. data/spec/models/spree/inventory_unit_spec.rb +0 -256
  84. data/spec/models/spree/line_item_spec.rb +0 -348
  85. data/spec/models/spree/option_type_prototype_spec.rb +0 -9
  86. data/spec/models/spree/option_type_spec.rb +0 -14
  87. data/spec/models/spree/option_value_spec.rb +0 -18
  88. data/spec/models/spree/order/address_spec.rb +0 -50
  89. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  90. data/spec/models/spree/order/callbacks_spec.rb +0 -42
  91. data/spec/models/spree/order/checkout_spec.rb +0 -770
  92. data/spec/models/spree/order/currency_updater_spec.rb +0 -32
  93. data/spec/models/spree/order/finalizing_spec.rb +0 -114
  94. data/spec/models/spree/order/helpers_spec.rb +0 -5
  95. data/spec/models/spree/order/payment_spec.rb +0 -214
  96. data/spec/models/spree/order/risk_assessment_spec.rb +0 -84
  97. data/spec/models/spree/order/shipments_spec.rb +0 -43
  98. data/spec/models/spree/order/state_machine_spec.rb +0 -212
  99. data/spec/models/spree/order/store_credit_spec.rb +0 -457
  100. data/spec/models/spree/order/tax_spec.rb +0 -84
  101. data/spec/models/spree/order/totals_spec.rb +0 -24
  102. data/spec/models/spree/order/updating_spec.rb +0 -18
  103. data/spec/models/spree/order/validations_spec.rb +0 -15
  104. data/spec/models/spree/order_contents_spec.rb +0 -332
  105. data/spec/models/spree/order_inventory_spec.rb +0 -247
  106. data/spec/models/spree/order_merger_spec.rb +0 -135
  107. data/spec/models/spree/order_spec.rb +0 -1067
  108. data/spec/models/spree/order_updater_spec.rb +0 -305
  109. data/spec/models/spree/payment/gateway_options_spec.rb +0 -127
  110. data/spec/models/spree/payment/store_credit_spec.rb +0 -60
  111. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -291
  112. data/spec/models/spree/payment_method_spec.rb +0 -108
  113. data/spec/models/spree/payment_spec.rb +0 -922
  114. data/spec/models/spree/preference_spec.rb +0 -80
  115. data/spec/models/spree/preferences/configuration_spec.rb +0 -30
  116. data/spec/models/spree/preferences/preferable_spec.rb +0 -344
  117. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -58
  118. data/spec/models/spree/preferences/store_spec.rb +0 -46
  119. data/spec/models/spree/price_spec.rb +0 -128
  120. data/spec/models/spree/product/scopes_spec.rb +0 -174
  121. data/spec/models/spree/product_duplicator_spec.rb +0 -102
  122. data/spec/models/spree/product_filter_spec.rb +0 -26
  123. data/spec/models/spree/product_option_type_spec.rb +0 -9
  124. data/spec/models/spree/product_promotion_rule_spec.rb +0 -9
  125. data/spec/models/spree/product_property_spec.rb +0 -26
  126. data/spec/models/spree/product_spec.rb +0 -626
  127. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -113
  128. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -148
  129. data/spec/models/spree/promotion/actions/create_line_items_spec.rb +0 -86
  130. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -36
  131. data/spec/models/spree/promotion/rules/country_spec.rb +0 -36
  132. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -75
  133. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -282
  134. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -42
  135. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -90
  136. data/spec/models/spree/promotion/rules/product_spec.rb +0 -143
  137. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -102
  138. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -27
  139. data/spec/models/spree/promotion/rules/user_spec.rb +0 -45
  140. data/spec/models/spree/promotion_action_spec.rb +0 -10
  141. data/spec/models/spree/promotion_category_spec.rb +0 -17
  142. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -102
  143. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -323
  144. data/spec/models/spree/promotion_handler/free_shipping_spec.rb +0 -48
  145. data/spec/models/spree/promotion_handler/page_spec.rb +0 -44
  146. data/spec/models/spree/promotion_rule_spec.rb +0 -29
  147. data/spec/models/spree/promotion_rule_taxon_spec.rb +0 -9
  148. data/spec/models/spree/promotion_rule_user_spec.rb +0 -9
  149. data/spec/models/spree/promotion_spec.rb +0 -674
  150. data/spec/models/spree/property_prototype_spec.rb +0 -9
  151. data/spec/models/spree/property_spec.rb +0 -5
  152. data/spec/models/spree/prototype_spec.rb +0 -5
  153. data/spec/models/spree/prototype_taxon_spec.rb +0 -9
  154. data/spec/models/spree/refund_reason_spec.rb +0 -20
  155. data/spec/models/spree/refund_spec.rb +0 -195
  156. data/spec/models/spree/reimbursement/credit_spec.rb +0 -36
  157. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -140
  158. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -83
  159. data/spec/models/spree/reimbursement_performer_spec.rb +0 -30
  160. data/spec/models/spree/reimbursement_spec.rb +0 -188
  161. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -63
  162. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -53
  163. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -46
  164. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -55
  165. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -101
  166. data/spec/models/spree/return_authorization_reason_spec.rb +0 -7
  167. data/spec/models/spree/return_authorization_spec.rb +0 -230
  168. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -77
  169. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -58
  170. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -61
  171. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -32
  172. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -29
  173. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -35
  174. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -65
  175. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  176. data/spec/models/spree/return_item_spec.rb +0 -734
  177. data/spec/models/spree/returns_calculator_spec.rb +0 -14
  178. data/spec/models/spree/role_spec.rb +0 -7
  179. data/spec/models/spree/shipment_spec.rb +0 -744
  180. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  181. data/spec/models/spree/shipping_category_spec.rb +0 -19
  182. data/spec/models/spree/shipping_method_spec.rb +0 -125
  183. data/spec/models/spree/shipping_rate_spec.rb +0 -140
  184. data/spec/models/spree/state_spec.rb +0 -29
  185. data/spec/models/spree/stock/availability_validator_spec.rb +0 -42
  186. data/spec/models/spree/stock/content_item_spec.rb +0 -31
  187. data/spec/models/spree/stock/coordinator_spec.rb +0 -61
  188. data/spec/models/spree/stock/differentiator_spec.rb +0 -39
  189. data/spec/models/spree/stock/estimator_spec.rb +0 -202
  190. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -37
  191. data/spec/models/spree/stock/package_spec.rb +0 -182
  192. data/spec/models/spree/stock/packer_spec.rb +0 -70
  193. data/spec/models/spree/stock/prioritizer_spec.rb +0 -125
  194. data/spec/models/spree/stock/quantifier_spec.rb +0 -126
  195. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -29
  196. data/spec/models/spree/stock/splitter/base_spec.rb +0 -21
  197. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -47
  198. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -32
  199. data/spec/models/spree/stock_item_spec.rb +0 -465
  200. data/spec/models/spree/stock_location_spec.rb +0 -243
  201. data/spec/models/spree/stock_movement_spec.rb +0 -120
  202. data/spec/models/spree/stock_transfer_spec.rb +0 -50
  203. data/spec/models/spree/store_credit_event_spec.rb +0 -101
  204. data/spec/models/spree/store_credit_spec.rb +0 -798
  205. data/spec/models/spree/store_spec.rb +0 -78
  206. data/spec/models/spree/tax_category_spec.rb +0 -32
  207. data/spec/models/spree/tax_rate_spec.rb +0 -561
  208. data/spec/models/spree/taxon_spec.rb +0 -93
  209. data/spec/models/spree/taxonomy_spec.rb +0 -18
  210. data/spec/models/spree/tracker_spec.rb +0 -21
  211. data/spec/models/spree/user_spec.rb +0 -203
  212. data/spec/models/spree/variant_spec.rb +0 -818
  213. data/spec/models/spree/zone_member_spec.rb +0 -38
  214. data/spec/models/spree/zone_spec.rb +0 -472
  215. data/spec/spec_helper.rb +0 -82
  216. data/spec/support/big_decimal.rb +0 -5
  217. data/spec/support/concerns/adjustment_source.rb +0 -23
  218. data/spec/support/concerns/default_price.rb +0 -37
  219. data/spec/support/rake.rb +0 -13
  220. data/spec/support/test_gateway.rb +0 -2
@@ -1,69 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::Calculator, type: :model do
4
-
5
- let(:order) { create(:order) }
6
- let!(:line_item) { create(:line_item, order: order) }
7
- let(:shipment) { create(:shipment, order: order, stock_location: create(:stock_location_with_items)) }
8
-
9
- context "with computable" do
10
- context "and compute methods stubbed out" do
11
- context "with a Spree::LineItem" do
12
- it "calls compute_line_item" do
13
- expect(subject).to receive(:compute_line_item).with(line_item)
14
- subject.compute(line_item)
15
- end
16
- end
17
-
18
- context "with a Spree::Order" do
19
- it "calls compute_order" do
20
- expect(subject).to receive(:compute_order).with(order)
21
- subject.compute(order)
22
- end
23
- end
24
-
25
- context "with a Spree::Shipment" do
26
- it "calls compute_shipment" do
27
- expect(subject).to receive(:compute_shipment).with(shipment)
28
- subject.compute(shipment)
29
- end
30
- end
31
-
32
- context "with a arbitray object" do
33
- it "calls the correct compute" do
34
- s = "Calculator can all"
35
- expect(subject).to receive(:compute_string).with(s)
36
- subject.compute(s)
37
- end
38
- end
39
- end
40
-
41
- context "with no stubbing" do
42
- context "with a Spree::LineItem" do
43
- it "raises NotImplementedError" do
44
- expect{subject.compute(line_item)}.to raise_error NotImplementedError, /Please implement \'compute_line_item\(line_item\)\' in your calculator/
45
- end
46
- end
47
-
48
- context "with a Spree::Order" do
49
- it "raises NotImplementedError" do
50
- expect{subject.compute(order)}.to raise_error NotImplementedError, /Please implement \'compute_order\(order\)\' in your calculator/
51
- end
52
- end
53
-
54
- context "with a Spree::Shipment" do
55
- it "raises NotImplementedError" do
56
- expect{subject.compute(shipment)}.to raise_error NotImplementedError, /Please implement \'compute_shipment\(shipment\)\' in your calculator/
57
- end
58
- end
59
-
60
- context "with a arbitray object" do
61
- it "raises NotImplementedError" do
62
- s = "Calculator can all"
63
- expect{subject.compute(s)}.to raise_error NotImplementedError, /Please implement \'compute_string\(string\)\' in your calculator/
64
- end
65
- end
66
- end
67
- end
68
-
69
- end
@@ -1,93 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Spree
4
- describe Classification, type: :model do
5
- # Regression test for #3494
6
- it "cannot link the same taxon to the same product more than once" do
7
- product = create(:product)
8
- taxon = create(:taxon)
9
- add_taxon = lambda { product.taxons << taxon }
10
- expect(add_taxon).not_to raise_error
11
- expect(add_taxon).to raise_error(ActiveRecord::RecordInvalid)
12
- end
13
-
14
- let(:taxon_with_5_products) do
15
- products = []
16
- 5.times do
17
- products << create(:base_product)
18
- end
19
-
20
- create(:taxon, products: products)
21
- end
22
-
23
- def positions_to_be_valid(taxon)
24
- positions = taxon.reload.classifications.map(&:position)
25
- expect(positions).to eq((1..taxon.classifications.count).to_a)
26
- end
27
-
28
- it "has a valid fixtures" do
29
- expect positions_to_be_valid(taxon_with_5_products)
30
- expect(Spree::Classification.count).to eq 5
31
- end
32
-
33
- context "removing product from taxon" do
34
- before :each do
35
- p = taxon_with_5_products.products[1]
36
- expect(p.classifications.first.position).to eq(2)
37
- taxon_with_5_products.products.destroy(p)
38
- end
39
-
40
- it "resets positions" do
41
- expect positions_to_be_valid(taxon_with_5_products)
42
- end
43
- end
44
-
45
- context "replacing taxon's products" do
46
- before :each do
47
- products = taxon_with_5_products.products.to_a
48
- products.pop(1)
49
- taxon_with_5_products.products = products
50
- taxon_with_5_products.save!
51
- end
52
-
53
- it "resets positions" do
54
- expect positions_to_be_valid(taxon_with_5_products)
55
- end
56
- end
57
-
58
- context "removing taxon from product" do
59
- before :each do
60
- p = taxon_with_5_products.products[1]
61
- p.taxons.destroy(taxon_with_5_products)
62
- p.save!
63
- end
64
-
65
- it "resets positions" do
66
- expect positions_to_be_valid(taxon_with_5_products)
67
- end
68
- end
69
-
70
- context "replacing product's taxons" do
71
- before :each do
72
- p = taxon_with_5_products.products[1]
73
- p.taxons = []
74
- p.save!
75
- end
76
-
77
- it "resets positions" do
78
- expect positions_to_be_valid(taxon_with_5_products)
79
- end
80
- end
81
-
82
- context "destroying classification" do
83
- before :each do
84
- classification = taxon_with_5_products.classifications[1]
85
- classification.destroy
86
- end
87
-
88
- it "resets positions" do
89
- expect positions_to_be_valid(taxon_with_5_products)
90
- end
91
- end
92
- end
93
- end
@@ -1,43 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Spree
4
-
5
- describe DisplayMoney do
6
- let(:test_class) do
7
- Class.new do
8
- extend DisplayMoney
9
- def total; 10.0; end
10
- end
11
- end
12
-
13
- describe ".money_methods" do
14
- before { test_class.money_methods :total }
15
-
16
- context "currency is not defined" do
17
- it "generates a display_method that builds a Spree::Money without options" do
18
- expect(test_class.new.display_total).to eq Spree::Money.new(10.0)
19
- end
20
- end
21
-
22
- context "currency is defined" do
23
- before { test_class.class_eval { def currency; "USD"; end } }
24
-
25
- it "generates a display_* method that builds a Spree::Money with currency" do
26
- expect(test_class.new.display_total).to eq Spree::Money.new(10.0, currency: "USD")
27
- end
28
- end
29
-
30
- context "with multiple + options" do
31
- before do
32
- test_class.class_eval { def amount; 20.0; end }
33
- test_class.money_methods :total, amount: { no_cents: true }
34
- end
35
-
36
- it "generates a display_* method that builds a Spree::Money with the specified options" do
37
- expect(test_class.new.display_total).to eq Spree::Money.new(10.0)
38
- expect(test_class.new.display_amount).to eq Spree::Money.new(20.0, no_cents: true)
39
- end
40
- end
41
- end
42
- end
43
- end
@@ -1,82 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::UserMethods do
4
- let(:test_user) { create :user }
5
-
6
- describe 'Associations' do
7
- subject { test_user }
8
-
9
- it 'should have many promotion_rule_users' do
10
- is_expected.to have_many(:promotion_rule_users).with_foreign_key(:user_id).
11
- class_name('Spree::PromotionRuleUser').dependent(:destroy)
12
- end
13
-
14
- it 'should have many role_users' do
15
- is_expected.to have_many(:role_users).class_name('Spree::RoleUser').
16
- with_foreign_key(:user_id).dependent(:destroy)
17
- end
18
- end
19
-
20
- describe '#has_spree_role?' do
21
- subject { test_user.has_spree_role? name }
22
-
23
- let(:role) { Spree::Role.create(name: name) }
24
- let(:name) { 'test' }
25
-
26
- context 'with a role' do
27
- before { test_user.spree_roles << role }
28
- it { is_expected.to be_truthy }
29
- end
30
-
31
- context 'without a role' do
32
- it { is_expected.to be_falsy }
33
- end
34
- end
35
-
36
- describe '#last_incomplete_spree_order' do
37
- subject { test_user.last_incomplete_spree_order }
38
-
39
- context 'with an incomplete order' do
40
- let(:last_incomplete_order) { create :order, user: test_user }
41
-
42
- before do
43
- create(:order, user: test_user, created_at: 1.day.ago)
44
- create(:order, user: create(:user))
45
- last_incomplete_order
46
- end
47
-
48
- it { is_expected.to eq last_incomplete_order }
49
- end
50
-
51
- context 'without an incomplete order' do
52
- it { is_expected.to be_nil }
53
- end
54
- end
55
-
56
- context '#check_completed_orders' do
57
- let(:possible_promotion) { create(:promotion, advertise: true, starts_at: 1.day.ago) }
58
- context 'rstrict t delete dependent destroyed' do
59
- before do
60
- test_user.promotion_rules.create!(promotion: possible_promotion)
61
- create(:order, user: test_user, completed_at: Time.current)
62
- end
63
-
64
- it 'should not destroy dependent destroy items' do
65
- expect { test_user.destroy }.to raise_error(Spree::Core::DestroyWithOrdersError)
66
- expect(test_user.promotion_rule_users.any?).to be(true)
67
- end
68
- end
69
-
70
- context 'allow to destroy dependent destroy' do
71
- before do
72
- test_user.promotion_rules.create!(promotion: possible_promotion)
73
- create(:order, user: test_user, created_at: 1.day.ago)
74
- test_user.destroy
75
- end
76
-
77
- it 'should not destroy dependent destroy items' do
78
- expect(test_user.promotion_rule_users.any?).to be(false)
79
- end
80
- end
81
- end
82
- end
@@ -1,66 +0,0 @@
1
- require "spec_helper"
2
-
3
- module Spree
4
- describe VatPriceCalculation do
5
- let(:test_class) do
6
- Class.new do
7
- include VatPriceCalculation
8
- def total; 10.0; end
9
- end
10
- end
11
-
12
- describe "#gross_amount" do
13
- let(:zone) { Zone.new }
14
- let(:tax_category) { TaxCategory.new }
15
- let(:price_options) do
16
- {
17
- tax_zone: zone,
18
- tax_category: tax_category
19
- }
20
- end
21
- let(:amount) { 100 }
22
-
23
- subject(:gross_amount) { test_class.new.gross_amount(amount, price_options) }
24
-
25
- context "with no default zone set" do
26
- it "does not call TaxRate.included_tax_amount_for" do
27
- expect(TaxRate).not_to receive(:included_tax_amount_for)
28
- gross_amount
29
- end
30
- end
31
-
32
- context "with no zone given" do
33
- let(:zone) { nil }
34
- it "does not call TaxRate.included_tax_amount_for" do
35
- expect(TaxRate).not_to receive(:included_tax_amount_for)
36
- gross_amount
37
- end
38
- end
39
-
40
- context "with a default zone set" do
41
- let(:default_zone) { Spree::Zone.new }
42
- before do
43
- allow(Spree::Zone).to receive(:default_tax).and_return(default_zone)
44
- end
45
-
46
- context "and zone equal to the default zone" do
47
- let(:zone) { default_zone }
48
-
49
- it "does not call 'TaxRate.included_tax_amount_for'" do
50
- expect(TaxRate).not_to receive(:included_tax_amount_for)
51
- gross_amount
52
- end
53
- end
54
-
55
- context "and zone not equal to default zone" do
56
- let(:zone) { Spree::Zone.new }
57
-
58
- it "calls TaxRate.included_tax_amount_for two times" do
59
- expect(TaxRate).to receive(:included_tax_amount_for).twice
60
- gross_amount
61
- end
62
- end
63
- end
64
- end
65
- end
66
- end
@@ -1,55 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::Country, type: :model do
4
- let(:america) { create :country }
5
- let(:canada) { create :country, name: 'Canada', iso_name: 'CANADA', numcode: '124' }
6
-
7
- describe 'Callbacks' do
8
- it { is_expected.to callback(:ensure_not_default).before(:destroy) }
9
- end
10
-
11
- describe 'Associations' do
12
- it { is_expected.to have_many(:addresses).dependent(:restrict_with_error) }
13
- end
14
-
15
- describe 'Validations' do
16
- it { is_expected.to validate_presence_of(:name) }
17
- it { is_expected.to validate_presence_of(:iso_name) }
18
- it { is_expected.to validate_uniqueness_of(:iso_name).case_insensitive }
19
- it { is_expected.to validate_uniqueness_of(:name).case_insensitive }
20
- end
21
-
22
- describe '.default' do
23
- context 'when default_country_id config is set' do
24
- before { Spree::Config[:default_country_id] = canada.id }
25
- it 'will return the country from the config' do
26
- expect(described_class.default.id).to eql canada.id
27
- end
28
- end
29
-
30
- context 'config is not set though record for america exists' do
31
- before { america.touch }
32
- it 'will return the US' do
33
- expect(described_class.default.id).to eql america.id
34
- end
35
- end
36
- end
37
-
38
- describe 'ensure default country in not deleted' do
39
- before { Spree::Config[:default_country_id] = america.id }
40
-
41
- context 'will not destroy country if it is default' do
42
- subject { america.destroy }
43
- it { is_expected.to be_falsy }
44
-
45
- context 'error should be default country cannot be deleted' do
46
- before { subject }
47
- it { expect(america.errors[:base]).to include(Spree.t(:default_country_cannot_be_deleted)) }
48
- end
49
- end
50
-
51
- context 'will destroy if it is not a default' do
52
- it { expect(canada.destroy).to be_truthy }
53
- end
54
- end
55
- end
@@ -1,328 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::CreditCard, type: :model do
4
- let(:valid_credit_card_attributes) do
5
- {
6
- number: '4111111111111111',
7
- verification_value: '123',
8
- expiry: "12 / #{(Time.current.year + 1).to_s.last(2)}",
9
- name: 'Spree Commerce'
10
- }
11
- end
12
-
13
- def self.payment_states
14
- Spree::Payment.state_machine.states.keys
15
- end
16
-
17
- let(:credit_card) { Spree::CreditCard.new }
18
-
19
- before(:each) do
20
-
21
- @order = create(:order)
22
- @payment = Spree::Payment.create(amount: 100, order: @order)
23
-
24
- @success_response = double('gateway_response', success?: true, authorization: '123', avs_result: { 'code' => 'avs-code' })
25
- @fail_response = double('gateway_response', success?: false)
26
-
27
- @payment_gateway = mock_model(Spree::PaymentMethod,
28
- payment_profiles_supported?: true,
29
- authorize: @success_response,
30
- purchase: @success_response,
31
- capture: @success_response,
32
- void: @success_response,
33
- credit: @success_response,
34
- )
35
-
36
- allow(@payment).to receive_messages payment_method: @payment_gateway
37
- end
38
-
39
- it 'should respond to track_data' do
40
- expect(credit_card.respond_to?(:track_data)).to be true
41
- end
42
-
43
- context "#can_capture?" do
44
- it "should be true if payment is pending" do
45
- payment = mock_model(Spree::Payment, pending?: true, created_at: Time.current)
46
- expect(credit_card.can_capture?(payment)).to be true
47
- end
48
-
49
- it "should be true if payment is checkout" do
50
- payment = mock_model(Spree::Payment, pending?: false, checkout?: true, created_at: Time.current)
51
- expect(credit_card.can_capture?(payment)).to be true
52
- end
53
- end
54
-
55
- context "#can_void?" do
56
- it "should be true if payment is not void" do
57
- payment = mock_model(Spree::Payment, failed?: false, void?: false)
58
- expect(credit_card.can_void?(payment)).to be true
59
- end
60
- end
61
-
62
- context "#can_credit?" do
63
- it "should be false if payment is not completed" do
64
- payment = mock_model(Spree::Payment, completed?: false)
65
- expect(credit_card.can_credit?(payment)).to be false
66
- end
67
-
68
- it "should be false when credit_allowed is zero" do
69
- payment = mock_model(Spree::Payment, completed?: true, credit_allowed: 0, order: mock_model(Spree::Order, payment_state: 'credit_owed'))
70
- expect(credit_card.can_credit?(payment)).to be false
71
- end
72
- end
73
-
74
- context "#valid?" do
75
- it "should validate presence of number" do
76
- credit_card.attributes = valid_credit_card_attributes.except(:number)
77
- expect(credit_card).not_to be_valid
78
- expect(credit_card.errors[:number]).to eq(["can't be blank"])
79
- end
80
-
81
- it "should validate presence of security code" do
82
- credit_card.attributes = valid_credit_card_attributes.except(:verification_value)
83
- expect(credit_card).not_to be_valid
84
- expect(credit_card.errors[:verification_value]).to eq(["can't be blank"])
85
- end
86
-
87
- it "validates name presence" do
88
- credit_card.valid?
89
- expect(credit_card.error_on(:name).size).to eq(1)
90
- end
91
-
92
- it "should only validate on create" do
93
- credit_card.attributes = valid_credit_card_attributes
94
- credit_card.save
95
- expect(credit_card).to be_valid
96
- end
97
-
98
- context "encrypted data is present" do
99
- it "does not validate presence of number or cvv" do
100
- credit_card.encrypted_data = "$fdgsfgdgfgfdg&gfdgfdgsf-"
101
- credit_card.valid?
102
- expect(credit_card.errors[:number]).to be_empty
103
- expect(credit_card.errors[:verification_value]).to be_empty
104
- end
105
- end
106
-
107
- context "imported is true" do
108
- it "does not validate presence of number or cvv" do
109
- credit_card.imported = true
110
- credit_card.valid?
111
- expect(credit_card.errors[:number]).to be_empty
112
- expect(credit_card.errors[:verification_value]).to be_empty
113
- end
114
- end
115
- end
116
-
117
- context "#save" do
118
- before do
119
- credit_card.attributes = valid_credit_card_attributes
120
- credit_card.save!
121
- end
122
-
123
- let!(:persisted_card) { Spree::CreditCard.find(credit_card.id) }
124
-
125
- it "should not actually store the number" do
126
- expect(persisted_card.number).to be_blank
127
- end
128
-
129
- it "should not actually store the security code" do
130
- expect(persisted_card.verification_value).to be_blank
131
- end
132
- end
133
-
134
- context "#number=" do
135
- it "should strip non-numeric characters from card input" do
136
- credit_card.number = "6011000990139424"
137
- expect(credit_card.number).to eq("6011000990139424")
138
-
139
- credit_card.number = " 6011-0009-9013-9424 "
140
- expect(credit_card.number).to eq("6011000990139424")
141
- end
142
-
143
- it "should not raise an exception on non-string input" do
144
- credit_card.number = Hash.new
145
- expect(credit_card.number).to be_nil
146
- end
147
- end
148
-
149
- # Regression test for #3847 & #3896
150
- context "#expiry=" do
151
- it "can set with a 2-digit month and year" do
152
- credit_card.expiry = '04 / 14'
153
- expect(credit_card.month).to eq(4)
154
- expect(credit_card.year).to eq(2014)
155
- end
156
-
157
- it "can set with a 2-digit month and 4-digit year" do
158
- credit_card.expiry = '04 / 2014'
159
- expect(credit_card.month).to eq(4)
160
- expect(credit_card.year).to eq(2014)
161
- end
162
-
163
- it "can set with a 2-digit month and 4-digit year without whitespace" do
164
- credit_card.expiry = '04/14'
165
- expect(credit_card.month).to eq(4)
166
- expect(credit_card.year).to eq(2014)
167
- end
168
-
169
- it "can set with a 2-digit month and 4-digit year without whitespace" do
170
- credit_card.expiry = '04/2014'
171
- expect(credit_card.month).to eq(4)
172
- expect(credit_card.year).to eq(2014)
173
- end
174
-
175
- it "can set with a 2-digit month and 4-digit year without whitespace and slash" do
176
- credit_card.expiry = '042014'
177
- expect(credit_card.month).to eq(4)
178
- expect(credit_card.year).to eq(2014)
179
- end
180
-
181
- it "can set with a 2-digit month and 2-digit year without whitespace and slash" do
182
- credit_card.expiry = '0414'
183
- expect(credit_card.month).to eq(4)
184
- expect(credit_card.year).to eq(2014)
185
- end
186
-
187
- it "does not blow up when passed an empty string" do
188
- expect { credit_card.expiry = '' }.not_to raise_error
189
- end
190
-
191
- # Regression test for #4725
192
- it "does not blow up when passed one number" do
193
- expect { credit_card.expiry = '12' }.not_to raise_error
194
- end
195
-
196
- end
197
-
198
- context "#cc_type=" do
199
- it "converts between the different types" do
200
- credit_card.cc_type = 'mastercard'
201
- expect(credit_card.cc_type).to eq('master')
202
-
203
- credit_card.cc_type = 'maestro'
204
- expect(credit_card.cc_type).to eq('master')
205
-
206
- credit_card.cc_type = 'amex'
207
- expect(credit_card.cc_type).to eq('american_express')
208
-
209
- credit_card.cc_type = 'dinersclub'
210
- expect(credit_card.cc_type).to eq('diners_club')
211
-
212
- credit_card.cc_type = 'some_outlandish_cc_type'
213
- expect(credit_card.cc_type).to eq('some_outlandish_cc_type')
214
- end
215
-
216
- it "assigns the type based on card number in the event of js failure" do
217
- credit_card.number = '4242424242424242'
218
- credit_card.cc_type = ''
219
- expect(credit_card.cc_type).to eq('visa')
220
-
221
- credit_card.number = '5555555555554444'
222
- credit_card.cc_type = ''
223
- expect(credit_card.cc_type).to eq('master')
224
-
225
- credit_card.number = '2223000010309703'
226
- credit_card.cc_type = ''
227
- expect(credit_card.cc_type).to eq('master')
228
-
229
- credit_card.number = '378282246310005'
230
- credit_card.cc_type = ''
231
- expect(credit_card.cc_type).to eq('american_express')
232
-
233
- credit_card.number = '30569309025904'
234
- credit_card.cc_type = ''
235
- expect(credit_card.cc_type).to eq('diners_club')
236
-
237
- credit_card.number = '3530111333300000'
238
- credit_card.cc_type = ''
239
- expect(credit_card.cc_type).to eq('jcb')
240
-
241
- credit_card.number = ''
242
- credit_card.cc_type = ''
243
- expect(credit_card.cc_type).to eq('')
244
-
245
- credit_card.number = nil
246
- credit_card.cc_type = ''
247
- expect(credit_card.cc_type).to eq('')
248
- end
249
- end
250
-
251
- context "#associations" do
252
- it "should be able to access its payments" do
253
- expect { credit_card.payments.to_a }.not_to raise_error
254
- end
255
- end
256
-
257
- context "#first_name" do
258
- before do
259
- credit_card.name = "Ludwig van Beethoven"
260
- end
261
-
262
- it "extracts the first name" do
263
- expect(credit_card.first_name).to eq "Ludwig"
264
- end
265
- end
266
-
267
- context "#last_name" do
268
- before do
269
- credit_card.name = "Ludwig van Beethoven"
270
- end
271
-
272
- it "extracts the last name" do
273
- expect(credit_card.last_name).to eq "van Beethoven"
274
- end
275
- end
276
-
277
- context "#to_active_merchant" do
278
- before do
279
- credit_card.number = "4111111111111111"
280
- credit_card.year = Time.current.year
281
- credit_card.month = Time.current.month
282
- credit_card.name = "Ludwig van Beethoven"
283
- credit_card.verification_value = 123
284
- end
285
-
286
- it "converts to an ActiveMerchant::Billing::CreditCard object" do
287
- am_card = credit_card.to_active_merchant
288
- expect(am_card.number).to eq("4111111111111111")
289
- expect(am_card.year).to eq(Time.current.year)
290
- expect(am_card.month).to eq(Time.current.month)
291
- expect(am_card.first_name).to eq("Ludwig")
292
- expect(am_card.last_name).to eq("van Beethoven")
293
- expect(am_card.verification_value).to eq(123)
294
- end
295
- end
296
-
297
- it 'ensures only one credit card per user is default at a time' do
298
- user = FactoryGirl.create(:user)
299
- first = FactoryGirl.create(:credit_card, user: user, default: true)
300
- second = FactoryGirl.create(:credit_card, user: user, default: true)
301
-
302
- expect(first.reload.default).to eq false
303
- expect(second.reload.default).to eq true
304
-
305
- first.default = true
306
- first.save!
307
-
308
- expect(first.reload.default).to eq true
309
- expect(second.reload.default).to eq false
310
- end
311
-
312
- it 'allows default credit cards for different users' do
313
- first = FactoryGirl.create(:credit_card, user: FactoryGirl.create(:user), default: true)
314
- second = FactoryGirl.create(:credit_card, user: FactoryGirl.create(:user), default: true)
315
-
316
- expect(first.reload.default).to eq true
317
- expect(second.reload.default).to eq true
318
- end
319
-
320
- it 'allows this card to save even if the previously default card has expired' do
321
- user = FactoryGirl.create(:user)
322
- first = FactoryGirl.create(:credit_card, user: user, default: true)
323
- second = FactoryGirl.create(:credit_card, user: user, default: false)
324
- first.update_columns(year: DateTime.current.year, month: 1.month.ago.month)
325
-
326
- expect { second.update_attributes!(default: true) }.not_to raise_error
327
- end
328
- end