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,135 @@
1
+ require 'spec_helper'
2
+ require 'email_spec'
3
+
4
+ describe Spree::OrderMailer, :type => :mailer do
5
+ include EmailSpec::Helpers
6
+ include EmailSpec::Matchers
7
+
8
+ let(:order) do
9
+ order = create(:order)
10
+ product = stub_model(Spree::Product, :name => %Q{The "BEST" product})
11
+ variant = stub_model(Spree::Variant, :product => product)
12
+ price = stub_model(Spree::Price, :variant => variant, :amount => 5.00)
13
+ store = FactoryGirl.build :store, mail_from_address: "store@example.com"
14
+ line_item = stub_model(Spree::LineItem, :variant => variant, :order => order, :quantity => 1, :price => 4.99)
15
+ allow(variant).to receive_messages(:default_price => price)
16
+ allow(order).to receive_messages(:line_items => [line_item])
17
+ allow(order).to receive(:store).and_return(store)
18
+ order
19
+ end
20
+
21
+ it "uses the order's store for the from address" do
22
+ message = Spree::OrderMailer.confirm_email(order)
23
+ expect(message.from).to eq ["store@example.com"]
24
+ end
25
+
26
+ it "doesn't aggressively escape double quotes in confirmation body" do
27
+ confirmation_email = Spree::OrderMailer.confirm_email(order)
28
+ expect(confirmation_email.body).not_to include(""")
29
+ end
30
+
31
+ it "confirm_email accepts an order id as an alternative to an Order object" do
32
+ expect(Spree::Order).to receive(:find).with(order.id).and_return(order)
33
+ ActiveSupport::Deprecation.silence do
34
+ Spree::OrderMailer.confirm_email(order.id).body
35
+ end
36
+ end
37
+
38
+ it "cancel_email accepts an order id as an alternative to an Order object" do
39
+ expect(Spree::Order).to receive(:find).with(order.id).and_return(order)
40
+ ActiveSupport::Deprecation.silence do
41
+ Spree::OrderMailer.cancel_email(order.id).body
42
+ end
43
+ end
44
+
45
+ context "only shows eligible adjustments in emails" do
46
+ before do
47
+ create(
48
+ :adjustment,
49
+ adjustable: order,
50
+ order: order,
51
+ eligible: true,
52
+ label: 'Eligible Adjustment'
53
+ )
54
+
55
+ create(
56
+ :adjustment,
57
+ adjustable: order,
58
+ order: order,
59
+ eligible: false,
60
+ label: 'Ineligible Adjustment'
61
+ )
62
+ end
63
+
64
+ let!(:confirmation_email) { Spree::OrderMailer.confirm_email(order) }
65
+ let!(:cancel_email) { Spree::OrderMailer.cancel_email(order) }
66
+
67
+ specify do
68
+ expect(confirmation_email.body).not_to include("Ineligible Adjustment")
69
+ end
70
+
71
+ specify do
72
+ expect(cancel_email.body).not_to include("Ineligible Adjustment")
73
+ end
74
+ end
75
+
76
+ context "displays unit costs from line item" do
77
+ # Regression test for #2772
78
+
79
+ # Tests mailer view spree/order_mailer/confirm_email.text.erb
80
+ specify do
81
+ confirmation_email = Spree::OrderMailer.confirm_email(order)
82
+ expect(confirmation_email).to have_body_text("4.99")
83
+ expect(confirmation_email).to_not have_body_text("5.00")
84
+ end
85
+
86
+ # Tests mailer view spree/order_mailer/cancel_email.text.erb
87
+ specify do
88
+ cancel_email = Spree::OrderMailer.cancel_email(order)
89
+ expect(cancel_email).to have_body_text("4.99")
90
+ expect(cancel_email).to_not have_body_text("5.00")
91
+ end
92
+ end
93
+
94
+ context "emails must be translatable" do
95
+
96
+ context "pt-BR locale" do
97
+ before do
98
+ I18n.enforce_available_locales = false
99
+ pt_br_confirm_mail = { :spree => { :order_mailer => { :confirm_email => { :dear_customer => 'Caro Cliente,' } } } }
100
+ pt_br_cancel_mail = { :spree => { :order_mailer => { :cancel_email => { :order_summary_canceled => 'Resumo da Pedido [CANCELADA]' } } } }
101
+ I18n.backend.store_translations :'pt-BR', pt_br_confirm_mail
102
+ I18n.backend.store_translations :'pt-BR', pt_br_cancel_mail
103
+ I18n.locale = :'pt-BR'
104
+ end
105
+
106
+ after do
107
+ I18n.locale = I18n.default_locale
108
+ I18n.enforce_available_locales = true
109
+ end
110
+
111
+ context "confirm_email" do
112
+ specify do
113
+ confirmation_email = Spree::OrderMailer.confirm_email(order)
114
+ expect(confirmation_email).to have_body_text("Caro Cliente,")
115
+ end
116
+ end
117
+
118
+ context "cancel_email" do
119
+ specify do
120
+ cancel_email = Spree::OrderMailer.cancel_email(order)
121
+ expect(cancel_email).to have_body_text("Resumo da Pedido [CANCELADA]")
122
+ end
123
+ end
124
+ end
125
+ end
126
+
127
+ context "with preference :send_core_emails set to false" do
128
+ it "sends no email" do
129
+ Spree::Config.send_core_emails = false
130
+ message = Spree::OrderMailer.confirm_email(order)
131
+ expect(message.body).to be_blank
132
+ end
133
+ end
134
+
135
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+ require 'email_spec'
3
+
4
+ describe Spree::ReimbursementMailer, :type => :mailer do
5
+ include EmailSpec::Helpers
6
+ include EmailSpec::Matchers
7
+
8
+ let(:reimbursement) { create(:reimbursement) }
9
+
10
+ it "accepts a reimbursement id as an alternative to a Reimbursement object" do
11
+ expect(Spree::Reimbursement).to receive(:find).with(reimbursement.id).and_return(reimbursement)
12
+
13
+ expect {
14
+ Spree::ReimbursementMailer.reimbursement_email(reimbursement.id).body
15
+ }.not_to raise_error
16
+ end
17
+
18
+ context "emails must be translatable" do
19
+ context "reimbursement_email" do
20
+ context "pt-BR locale" do
21
+ before do
22
+ I18n.enforce_available_locales = false
23
+ pt_br_shipped_email = { :spree => { :reimbursement_mailer => { :reimbursement_email => { :dear_customer => 'Caro Cliente,' } } } }
24
+ I18n.backend.store_translations :'pt-BR', pt_br_shipped_email
25
+ I18n.locale = :'pt-BR'
26
+ end
27
+
28
+ after do
29
+ I18n.locale = I18n.default_locale
30
+ I18n.enforce_available_locales = true
31
+ end
32
+
33
+ specify do
34
+ reimbursement_email = Spree::ReimbursementMailer.reimbursement_email(reimbursement)
35
+ expect(reimbursement_email.body).to include("Caro Cliente,")
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+ require 'email_spec'
3
+
4
+ describe Spree::TestMailer, :type => :mailer do
5
+ include EmailSpec::Helpers
6
+ include EmailSpec::Matchers
7
+
8
+ let(:user) { create(:user) }
9
+
10
+ it "confirm_email accepts a user id as an alternative to a User object" do
11
+ expect {
12
+ test_email = Spree::TestMailer.test_email('test@example.com')
13
+ }.not_to raise_error
14
+ end
15
+ end
@@ -0,0 +1,276 @@
1
+ require 'spec_helper'
2
+ require 'cancan/matchers'
3
+ require 'spree/testing_support/ability_helpers'
4
+ require 'spree/testing_support/bar_ability'
5
+
6
+ # Fake ability for testing registration of additional abilities
7
+ class FooAbility
8
+ include CanCan::Ability
9
+
10
+ def initialize(user)
11
+ # allow anyone to perform index on Order
12
+ can :index, Spree::Order
13
+ # allow anyone to update an Order with id of 1
14
+ can :update, Spree::Order do |order|
15
+ order.id == 1
16
+ end
17
+ end
18
+ end
19
+
20
+ describe Spree::Ability, :type => :model do
21
+ let(:user) { build(:user) }
22
+ let(:ability) { Spree::Ability.new(user) }
23
+ let(:token) { nil }
24
+
25
+ after(:each) {
26
+ Spree::Ability.abilities = Set.new
27
+ }
28
+
29
+ describe "#initialize" do
30
+ subject { Spree::Ability.new(user) }
31
+
32
+ it "activates permissions from the role configuration" do
33
+ expect(Spree::RoleConfiguration.instance).to receive(:activate_permissions!).
34
+ once
35
+
36
+ subject
37
+ end
38
+ end
39
+
40
+ context 'register_ability' do
41
+ it 'should add the ability to the list of abilties' do
42
+ Spree::Ability.register_ability(FooAbility)
43
+ expect(Spree::Ability.new(user).abilities).not_to be_empty
44
+ end
45
+
46
+ it 'should apply the registered abilities permissions' do
47
+ Spree::Ability.register_ability(FooAbility)
48
+ expect(Spree::Ability.new(user).can?(:update, mock_model(Spree::Order, user: nil, :id => 1))).to be true
49
+ end
50
+ end
51
+
52
+ context 'for general resource' do
53
+ let(:resource) { Object.new }
54
+
55
+ context 'with admin user' do
56
+ let(:user) { build :admin_user }
57
+ it_should_behave_like 'access granted'
58
+ it_should_behave_like 'index allowed'
59
+ end
60
+
61
+ context 'with customer' do
62
+ it_should_behave_like 'access denied'
63
+ it_should_behave_like 'no index allowed'
64
+ end
65
+ end
66
+
67
+ context 'for admin protected resources' do
68
+ let(:resource) { Object.new }
69
+ let(:resource_shipment) { Spree::Shipment.new }
70
+ let(:resource_product) { Spree::Product.new }
71
+ let(:resource_user) { create :user }
72
+ let(:resource_order) { Spree::Order.new }
73
+ let(:fakedispatch_user) { Spree.user_class.create }
74
+ let(:fakedispatch_ability) { Spree::Ability.new(fakedispatch_user) }
75
+
76
+ context 'with admin user' do
77
+ it 'should be able to admin' do
78
+ user.spree_roles << Spree::Role.find_or_create_by(name: 'admin')
79
+ expect(ability).to be_able_to :admin, resource
80
+ expect(ability).to be_able_to :index, resource_order
81
+ expect(ability).to be_able_to :show, resource_product
82
+ expect(ability).to be_able_to :create, resource_user
83
+ end
84
+ end
85
+
86
+ context 'with fakedispatch user' do
87
+ it 'should be able to admin on the order and shipment pages' do
88
+ user.spree_roles << Spree::Role.find_or_create_by(name: 'bar')
89
+
90
+ Spree::Ability.register_ability(BarAbility)
91
+
92
+ expect(ability).not_to be_able_to :admin, resource
93
+
94
+ expect(ability).to be_able_to :admin, resource_order
95
+ expect(ability).to be_able_to :index, resource_order
96
+ expect(ability).not_to be_able_to :update, resource_order
97
+ # ability.should_not be_able_to :create, resource_order # Fails
98
+
99
+ expect(ability).to be_able_to :admin, resource_shipment
100
+ expect(ability).to be_able_to :index, resource_shipment
101
+ expect(ability).to be_able_to :create, resource_shipment
102
+
103
+ expect(ability).not_to be_able_to :admin, resource_product
104
+ expect(ability).not_to be_able_to :update, resource_product
105
+ # ability.should_not be_able_to :show, resource_product # Fails
106
+
107
+ expect(ability).not_to be_able_to :admin, resource_user
108
+ expect(ability).not_to be_able_to :update, resource_user
109
+ expect(ability).to be_able_to :update, user
110
+ # ability.should_not be_able_to :create, resource_user # Fails
111
+ # It can create new users if is has access to the :admin, User!!
112
+
113
+ # TODO change the Ability class so only users and customers get the extra premissions?
114
+
115
+ Spree::Ability.remove_ability(BarAbility)
116
+ end
117
+ end
118
+
119
+ context 'with customer' do
120
+ it 'should not be able to admin' do
121
+ expect(ability).not_to be_able_to :admin, resource
122
+ expect(ability).not_to be_able_to :admin, resource_order
123
+ expect(ability).not_to be_able_to :admin, resource_product
124
+ expect(ability).not_to be_able_to :admin, resource_user
125
+ end
126
+ end
127
+ end
128
+
129
+ context 'as Guest User' do
130
+
131
+ context 'for Country' do
132
+ let(:resource) { Spree::Country.new }
133
+ context 'requested by any user' do
134
+ it_should_behave_like 'read only'
135
+ end
136
+ end
137
+
138
+ context 'for OptionType' do
139
+ let(:resource) { Spree::OptionType.new }
140
+ context 'requested by any user' do
141
+ it_should_behave_like 'read only'
142
+ end
143
+ end
144
+
145
+ context 'for OptionValue' do
146
+ let(:resource) { Spree::OptionType.new }
147
+ context 'requested by any user' do
148
+ it_should_behave_like 'read only'
149
+ end
150
+ end
151
+
152
+ context 'for Order' do
153
+ let(:resource) { Spree::Order.new }
154
+
155
+ context 'requested by same user' do
156
+ before(:each) { resource.user = user }
157
+ it_should_behave_like 'access granted'
158
+ it_should_behave_like 'no index allowed'
159
+ end
160
+
161
+ context 'requested by other user' do
162
+ before(:each) { resource.user = Spree.user_class.new }
163
+ it_should_behave_like 'create only'
164
+ end
165
+
166
+ context 'requested with proper token' do
167
+ let(:token) { 'TOKEN123' }
168
+ before(:each) { allow(resource).to receive_messages guest_token: 'TOKEN123' }
169
+ it_should_behave_like 'access granted'
170
+ it_should_behave_like 'no index allowed'
171
+ end
172
+
173
+ context 'requested with inproper token' do
174
+ let(:token) { 'FAIL' }
175
+ before(:each) { allow(resource).to receive_messages guest_token: 'TOKEN123' }
176
+ it_should_behave_like 'create only'
177
+ end
178
+ end
179
+
180
+ context 'for Product' do
181
+ let(:resource) { Spree::Product.new }
182
+ context 'requested by any user' do
183
+ it_should_behave_like 'read only'
184
+ end
185
+ end
186
+
187
+ context 'for ProductProperty' do
188
+ let(:resource) { Spree::Product.new }
189
+ context 'requested by any user' do
190
+ it_should_behave_like 'read only'
191
+ end
192
+ end
193
+
194
+ context 'for Property' do
195
+ let(:resource) { Spree::Product.new }
196
+ context 'requested by any user' do
197
+ it_should_behave_like 'read only'
198
+ end
199
+ end
200
+
201
+ context 'for State' do
202
+ let(:resource) { Spree::State.new }
203
+ context 'requested by any user' do
204
+ it_should_behave_like 'read only'
205
+ end
206
+ end
207
+
208
+ context 'for Stock Item' do
209
+ let(:resource) { Spree::StockItem.new }
210
+ context 'active stock location' do
211
+ before { resource.build_stock_location(active: true) }
212
+ it_should_behave_like 'read only'
213
+ end
214
+
215
+ context 'inactive stock location' do
216
+ before { resource.build_stock_location(active: false) }
217
+ it_should_behave_like 'access denied'
218
+ end
219
+ end
220
+
221
+ context 'for Stock Location' do
222
+ let(:resource) { Spree::StockLocation.new }
223
+ context 'active' do
224
+ before { resource.active = true }
225
+ it_should_behave_like 'read only'
226
+ end
227
+
228
+ context 'inactive' do
229
+ before { resource.active = false }
230
+ it_should_behave_like 'access denied'
231
+ end
232
+ end
233
+
234
+ context 'for Taxons' do
235
+ let(:resource) { Spree::Taxon.new }
236
+ context 'requested by any user' do
237
+ it_should_behave_like 'read only'
238
+ end
239
+ end
240
+
241
+ context 'for Taxonomy' do
242
+ let(:resource) { Spree::Taxonomy.new }
243
+ context 'requested by any user' do
244
+ it_should_behave_like 'read only'
245
+ end
246
+ end
247
+
248
+ context 'for User' do
249
+ context 'requested by same user' do
250
+ let(:resource) { user }
251
+ it_should_behave_like 'access granted'
252
+ it_should_behave_like 'no index allowed'
253
+ end
254
+ context 'requested by other user' do
255
+ let(:resource) { Spree.user_class.create }
256
+ it_should_behave_like 'create only'
257
+ end
258
+ end
259
+
260
+ context 'for Variant' do
261
+ let(:resource) { Spree::Variant.new }
262
+ context 'requested by any user' do
263
+ it_should_behave_like 'read only'
264
+ end
265
+ end
266
+
267
+ context 'for Zone' do
268
+ let(:resource) { Spree::Zone.new }
269
+ context 'requested by any user' do
270
+ it_should_behave_like 'read only'
271
+ end
272
+ end
273
+
274
+ end
275
+
276
+ end