solidus_backend 1.0.2 → 1.0.3

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 (91) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1 -0
  3. data/Gemfile +6 -0
  4. data/Rakefile +15 -0
  5. data/script/rails +9 -0
  6. data/solidus_backend.gemspec +28 -0
  7. data/spec/controllers/spree/admin/base_controller_spec.rb +24 -0
  8. data/spec/controllers/spree/admin/cancellations_controller_spec.rb +77 -0
  9. data/spec/controllers/spree/admin/customer_returns_controller_spec.rb +234 -0
  10. data/spec/controllers/spree/admin/general_settings_controller_spec.rb +41 -0
  11. data/spec/controllers/spree/admin/missing_products_controller_spec.rb +18 -0
  12. data/spec/controllers/spree/admin/orders/customer_details_controller_spec.rb +80 -0
  13. data/spec/controllers/spree/admin/orders_controller_spec.rb +472 -0
  14. data/spec/controllers/spree/admin/payment_methods_controller_spec.rb +49 -0
  15. data/spec/controllers/spree/admin/payments_controller_spec.rb +175 -0
  16. data/spec/controllers/spree/admin/products_controller_spec.rb +45 -0
  17. data/spec/controllers/spree/admin/promotion_actions_controller_spec.rb +21 -0
  18. data/spec/controllers/spree/admin/promotion_codes_controller_spec.rb +18 -0
  19. data/spec/controllers/spree/admin/promotion_rules_controller_spec.rb +21 -0
  20. data/spec/controllers/spree/admin/promotions_controller_spec.rb +122 -0
  21. data/spec/controllers/spree/admin/refunds_controller_spec.rb +32 -0
  22. data/spec/controllers/spree/admin/reimbursements_controller_spec.rb +75 -0
  23. data/spec/controllers/spree/admin/reports_controller_spec.rb +134 -0
  24. data/spec/controllers/spree/admin/resource_controller_spec.rb +166 -0
  25. data/spec/controllers/spree/admin/return_authorizations_controller_spec.rb +226 -0
  26. data/spec/controllers/spree/admin/return_items_controller_spec.rb +27 -0
  27. data/spec/controllers/spree/admin/root_controller_spec.rb +41 -0
  28. data/spec/controllers/spree/admin/search_controller_spec.rb +104 -0
  29. data/spec/controllers/spree/admin/shipping_methods_controller_spec.rb +14 -0
  30. data/spec/controllers/spree/admin/stock_items_controller_spec.rb +50 -0
  31. data/spec/controllers/spree/admin/stock_locations_controller_spec.rb +41 -0
  32. data/spec/controllers/spree/admin/stock_transfers_controller_spec.rb +331 -0
  33. data/spec/controllers/spree/admin/store_credits_controller_spec.rb +309 -0
  34. data/spec/controllers/spree/admin/users_controller_spec.rb +236 -0
  35. data/spec/controllers/spree/admin/variants_controller_spec.rb +32 -0
  36. data/spec/features/admin/configuration/analytics_tracker_spec.rb +54 -0
  37. data/spec/features/admin/configuration/countries_spec.rb +22 -0
  38. data/spec/features/admin/configuration/general_settings_spec.rb +45 -0
  39. data/spec/features/admin/configuration/payment_methods_spec.rb +125 -0
  40. data/spec/features/admin/configuration/shipping_methods_spec.rb +64 -0
  41. data/spec/features/admin/configuration/states_spec.rb +64 -0
  42. data/spec/features/admin/configuration/stock_locations_spec.rb +50 -0
  43. data/spec/features/admin/configuration/tax_categories_spec.rb +56 -0
  44. data/spec/features/admin/configuration/tax_rates_spec.rb +30 -0
  45. data/spec/features/admin/configuration/taxonomies_spec.rb +52 -0
  46. data/spec/features/admin/configuration/zones_spec.rb +39 -0
  47. data/spec/features/admin/homepage_spec.rb +78 -0
  48. data/spec/features/admin/locale_spec.rb +30 -0
  49. data/spec/features/admin/orders/adjustments_promotions_spec.rb +53 -0
  50. data/spec/features/admin/orders/adjustments_spec.rb +126 -0
  51. data/spec/features/admin/orders/cancelling_and_resuming_spec.rb +48 -0
  52. data/spec/features/admin/orders/cancelling_inventory_spec.rb +48 -0
  53. data/spec/features/admin/orders/customer_details_spec.rb +163 -0
  54. data/spec/features/admin/orders/line_items_spec.rb +50 -0
  55. data/spec/features/admin/orders/listing_spec.rb +130 -0
  56. data/spec/features/admin/orders/log_entries_spec.rb +55 -0
  57. data/spec/features/admin/orders/new_order_spec.rb +185 -0
  58. data/spec/features/admin/orders/order_details_spec.rb +533 -0
  59. data/spec/features/admin/orders/payments_spec.rb +228 -0
  60. data/spec/features/admin/orders/risk_analysis_spec.rb +47 -0
  61. data/spec/features/admin/orders/shipments_spec.rb +65 -0
  62. data/spec/features/admin/payments/store_credits_spec.rb +21 -0
  63. data/spec/features/admin/products/edit/images_spec.rb +87 -0
  64. data/spec/features/admin/products/edit/products_spec.rb +66 -0
  65. data/spec/features/admin/products/edit/taxons_spec.rb +43 -0
  66. data/spec/features/admin/products/edit/variants_spec.rb +61 -0
  67. data/spec/features/admin/products/option_types_spec.rb +114 -0
  68. data/spec/features/admin/products/products_spec.rb +392 -0
  69. data/spec/features/admin/products/properties_spec.rb +139 -0
  70. data/spec/features/admin/products/prototypes_spec.rb +110 -0
  71. data/spec/features/admin/products/stock_management_spec.rb +82 -0
  72. data/spec/features/admin/products/variant_spec.rb +51 -0
  73. data/spec/features/admin/promotion_adjustments_spec.rb +220 -0
  74. data/spec/features/admin/promotions/tiered_calculator_spec.rb +69 -0
  75. data/spec/features/admin/reports_spec.rb +61 -0
  76. data/spec/features/admin/stock_transfer_spec.rb +86 -0
  77. data/spec/features/admin/store_credits_spec.rb +82 -0
  78. data/spec/features/admin/taxons_spec.rb +31 -0
  79. data/spec/features/admin/users_spec.rb +270 -0
  80. data/spec/helpers/admin/base_helper_spec.rb +24 -0
  81. data/spec/helpers/admin/navigation_helper_spec.rb +73 -0
  82. data/spec/helpers/admin/reimbursements_helper_spec.rb +34 -0
  83. data/spec/helpers/admin/stock_movements_helper_spec.rb +29 -0
  84. data/spec/helpers/admin/store_credit_events_helper_spec.rb +95 -0
  85. data/spec/helpers/promotion_rules_helper_spec.rb +12 -0
  86. data/spec/spec_helper.rb +108 -0
  87. data/spec/support/appear_before_matcher.rb +8 -0
  88. data/spec/support/ror_ringer.jpeg +0 -0
  89. data/spec/test_views/spree/admin/widgets/edit.html.erb +1 -0
  90. data/spec/test_views/spree/admin/widgets/new.html.erb +1 -0
  91. metadata +95 -6
@@ -0,0 +1,228 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Payments', :type => :feature do
4
+ stub_authorization!
5
+
6
+ context "with a pre-existing payment" do
7
+
8
+ let!(:payment) do
9
+ create(:payment,
10
+ order: order,
11
+ amount: order.outstanding_balance,
12
+ payment_method: create(:credit_card_payment_method),
13
+ state: state
14
+ )
15
+ end
16
+
17
+ let(:order) { create(:completed_order_with_totals, number: 'R100', line_items_count: 5) }
18
+ let(:state) { 'checkout' }
19
+
20
+ before do
21
+ visit spree.admin_path
22
+ click_link 'Orders'
23
+ within_row(1) do
24
+ click_link order.number
25
+ end
26
+ click_link 'Payments'
27
+ end
28
+
29
+ def refresh_page
30
+ visit current_path
31
+ end
32
+
33
+ # Regression tests for #1453
34
+ context 'with a check payment' do
35
+ let(:order) { create(:completed_order_with_totals, number: 'R100') }
36
+ let!(:payment) do
37
+ create(:payment,
38
+ order: order,
39
+ amount: order.outstanding_balance,
40
+ payment_method: create(:check_payment_method) # Check
41
+ )
42
+ end
43
+
44
+ it 'capturing a check payment from a new order' do
45
+ click_icon(:capture)
46
+ expect(page).not_to have_content('Cannot perform requested operation')
47
+ expect(page).to have_content('Payment Updated')
48
+ end
49
+
50
+ it 'voids a check payment from a new order' do
51
+ click_icon(:void)
52
+ expect(page).to have_content('Payment Updated')
53
+ end
54
+ end
55
+
56
+ it 'should list all captures for a payment' do
57
+ capture_amount = order.outstanding_balance/2 * 100
58
+ payment.capture!(capture_amount)
59
+
60
+ visit spree.admin_order_payment_path(order, payment)
61
+ expect(page).to have_content 'Capture events'
62
+ # within '#capture_events' do
63
+ within_row(1) do
64
+ expect(page).to have_content(capture_amount / 100)
65
+ end
66
+ # end
67
+ end
68
+
69
+ it 'lists and create payments for an order', js: true do
70
+ within_row(1) do
71
+ expect(column_text(3)).to eq('$150.00')
72
+ expect(column_text(4)).to eq('Credit Card')
73
+ expect(column_text(6)).to eq('CHECKOUT')
74
+ end
75
+
76
+ click_icon :void
77
+ expect(find('#payment_status').text).to eq('BALANCE DUE')
78
+ expect(page).to have_content('Payment Updated')
79
+
80
+ within_row(1) do
81
+ expect(column_text(3)).to eq('$150.00')
82
+ expect(column_text(4)).to eq('Credit Card')
83
+ expect(column_text(6)).to eq('VOID')
84
+ end
85
+
86
+ click_on 'New Payment'
87
+ expect(page).to have_content('New Payment')
88
+ click_button 'Update'
89
+ expect(page).to have_content('successfully created!')
90
+
91
+ click_icon(:capture)
92
+ expect(find('#payment_status').text).to eq('PAID')
93
+
94
+ expect(page).not_to have_selector('#new_payment_section')
95
+ end
96
+
97
+ # Regression test for #1269
98
+ it 'cannot create a payment for an order with no payment methods' do
99
+ Spree::PaymentMethod.delete_all
100
+ order.payments.delete_all
101
+
102
+ click_on 'New Payment'
103
+ expect(page).to have_content('You cannot create a payment for an order without any payment methods defined.')
104
+ expect(page).to have_content('Please define some payment methods first.')
105
+ end
106
+
107
+ context 'payment is pending', js: true do
108
+ let(:state) { 'pending' }
109
+
110
+ it 'allows the amount to be edited by clicking on the edit button then saving' do
111
+ within_row(1) do
112
+ click_icon(:edit)
113
+ fill_in('amount', with: '$1')
114
+ expect(page).to have_selector('td.amount span', text: '$1.00')
115
+ expect(payment.reload.amount).to eq(1.00)
116
+ end
117
+ end
118
+
119
+ it 'allows the amount to be edited by clicking on the amount then saving' do
120
+ within_row(1) do
121
+ find('td.amount span').click
122
+ fill_in('amount', with: '$1.01')
123
+ expect(page).to have_selector('td.amount span', text: '$1.01')
124
+ expect(payment.reload.amount).to eq(1.01)
125
+ end
126
+ end
127
+
128
+ it 'allows the amount change to be cancelled by clicking on the cancel button' do
129
+ within_row(1) do
130
+ click_icon(:edit)
131
+
132
+ # Can't use fill_in here, as under poltergeist that will unfocus (and
133
+ # thus submit) the field under poltergeist
134
+ find('td.amount input').click
135
+ page.execute_script("$('td.amount input').val('$1')")
136
+
137
+ click_icon(:cancel)
138
+ expect(page).to have_selector('td.amount span', text: '$150.00')
139
+ expect(payment.reload.amount).to eq(150.00)
140
+ end
141
+ end
142
+
143
+ it 'displays an error when the amount is invalid' do
144
+ within_row(1) do
145
+ click_icon(:edit)
146
+ fill_in('amount', with: 'invalid')
147
+ expect(find('td.amount input').value).to eq('invalid')
148
+ expect(payment.reload.amount).to eq(150.00)
149
+ end
150
+ expect(page).to have_selector('.flash.error', text: 'Invalid resource. Please fix errors and try again.')
151
+ end
152
+ end
153
+
154
+ context 'payment is completed', js: true do
155
+ let(:state) { 'completed' }
156
+
157
+ it 'does not allow the amount to be edited' do
158
+ within_row(1) do
159
+ expect(page).not_to have_selector('.fa-edit')
160
+ expect(page).not_to have_selector('td.amount span')
161
+ end
162
+ end
163
+ end
164
+ end
165
+
166
+ context "with no prior payments" do
167
+ let(:order) { create(:order_with_line_items, :line_items_count => 1) }
168
+ let!(:payment_method) { create(:credit_card_payment_method)}
169
+
170
+ # Regression tests for #4129
171
+ context "with a credit card payment method" do
172
+ before do
173
+ visit spree.admin_order_payments_path(order)
174
+ end
175
+
176
+ it "is able to create a new credit card payment with valid information", :js => true do
177
+ fill_in "Card Number", :with => "4111 1111 1111 1111"
178
+ fill_in "Name", :with => "Test User"
179
+ fill_in "Expiration", :with => "09 / #{Time.now.year + 1}"
180
+ fill_in "Card Code", :with => "007"
181
+ # Regression test for #4277
182
+ expect(page).to have_css('.ccType[value="visa"]', visible: false)
183
+ click_button "Continue"
184
+ expect(page).to have_content("Payment has been successfully created!")
185
+ end
186
+
187
+ it "is unable to create a new payment with invalid information" do
188
+ click_button "Continue"
189
+ expect(page).to have_content("Payment could not be created.")
190
+ expect(page).to have_content("Number can't be blank")
191
+ expect(page).to have_content("Name can't be blank")
192
+ expect(page).to have_content("Verification Value can't be blank")
193
+ expect(page).to have_content("Month is not a number")
194
+ expect(page).to have_content("Year is not a number")
195
+ end
196
+ end
197
+
198
+ context "user existing card" do
199
+ let!(:cc) do
200
+ create(:credit_card, user_id: order.user_id, payment_method: payment_method, gateway_customer_profile_id: "BGS-RFRE")
201
+ end
202
+
203
+ before { visit spree.admin_order_payments_path(order) }
204
+
205
+ it "is able to reuse customer payment source" do
206
+ expect(find("#card_#{cc.id}")).to be_checked
207
+ click_button "Continue"
208
+ expect(page).to have_content("Payment has been successfully created!")
209
+ end
210
+ end
211
+
212
+ context "with a check" do
213
+ let(:order) { create(:completed_order_with_totals, :line_items_count => 1) }
214
+ let!(:payment_method) { create(:check_payment_method) }
215
+
216
+ before do
217
+ visit spree.admin_order_payments_path(order.reload)
218
+ end
219
+
220
+ it "can successfully be created and captured" do
221
+ click_on 'Update'
222
+ expect(page).to have_content("Payment has been successfully created!")
223
+ click_icon(:capture)
224
+ expect(page).to have_content("Payment Updated")
225
+ end
226
+ end
227
+ end
228
+ end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Order Risk Analysis', :type => :feature do
4
+ stub_authorization!
5
+
6
+ let!(:order) do
7
+ create(:completed_order_with_pending_payment)
8
+ end
9
+
10
+ def visit_order
11
+ visit spree.admin_path
12
+ click_link 'Orders'
13
+ within_row(1) do
14
+ click_link order.number
15
+ end
16
+ end
17
+
18
+ context "the order is considered risky" do
19
+ before do
20
+ allow_any_instance_of(Spree::Admin::BaseController).to receive_messages :try_spree_current_user => create(:user)
21
+
22
+ order.payments.first.update_column(:avs_response, 'N')
23
+ visit_order
24
+ end
25
+
26
+ it "displays 'Risk Analysis' box" do
27
+ expect(page).to have_content 'Risk Analysis'
28
+ end
29
+
30
+ it "can be approved" do
31
+ click_button('approve')
32
+ expect(page).to have_content 'Approver'
33
+ expect(page).to have_content 'Approved at'
34
+ expect(page).to have_content 'Status: complete'
35
+ end
36
+ end
37
+
38
+ context "the order is not considered risky" do
39
+ before do
40
+ visit_order
41
+ end
42
+
43
+ it "does not display 'Risk Analysis' box" do
44
+ expect(page).to_not have_content 'Risk Analysis'
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,65 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Shipments", :type => :feature do
4
+ stub_authorization!
5
+
6
+ let!(:order) { create(:order_ready_to_ship, :number => "R100", :state => "complete", :line_items_count => 5) }
7
+
8
+ # Regression test for #4025
9
+ context "a shipment without a shipping method" do
10
+ before do
11
+ order.shipments.each do |s|
12
+ # Deleting the shipping rates causes there to be no shipping methods
13
+ s.shipping_rates.delete_all
14
+ end
15
+ end
16
+
17
+ it "can still be displayed" do
18
+ expect { visit spree.edit_admin_order_path(order) }.not_to raise_error
19
+ end
20
+ end
21
+
22
+ context "shipping an order", js: true do
23
+ before(:each) do
24
+ visit spree.admin_path
25
+ click_link "Orders"
26
+ within_row(1) do
27
+ click_link "R100"
28
+ end
29
+ end
30
+
31
+ it "can ship a completed order" do
32
+ find(".ship-shipment-button").click
33
+ wait_for_ajax
34
+
35
+ expect(page).to have_content("SHIPPED PACKAGE")
36
+ expect(order.reload.shipment_state).to eq("shipped")
37
+ end
38
+ end
39
+
40
+ context "moving variants between shipments", js: true do
41
+ let!(:order) { create(:completed_order_with_pending_payment, :number => "R100", :state => "complete", :line_items_count => 5) }
42
+ let!(:la) { create(:stock_location, name: "LA") }
43
+ before(:each) do
44
+ visit spree.admin_path
45
+ click_link "Orders"
46
+ within_row(1) do
47
+ click_link "R100"
48
+ end
49
+ end
50
+
51
+ it "can move a variant to a new and to an existing shipment" do
52
+ expect(order.shipments.count).to eq(1)
53
+
54
+ within_row(1) { click_icon 'arrows-h' }
55
+ targetted_select2 'LA', from: '#s2id_item_stock_location'
56
+ click_icon :ok
57
+ expect(page).to have_css("#shipment_#{order.shipments.first.id}")
58
+
59
+ within_row(2) { click_icon 'arrows-h' }
60
+ targetted_select2 "LA(#{order.reload.shipments.last.number})", from: '#s2id_item_stock_location'
61
+ click_icon :ok
62
+ expect(page).to have_css("#shipment_#{order.reload.shipments.last.id}")
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Store credits', type: :feature do
4
+ stub_authorization!
5
+
6
+ let(:order) { FactoryGirl.create(:completed_order_with_totals) }
7
+ let(:payment) do
8
+ FactoryGirl.create(
9
+ :store_credit_payment,
10
+ order: order,
11
+ amount: 20
12
+ )
13
+ end
14
+
15
+ it "viewing a store credit payment" do
16
+ visit spree.admin_order_payment_path(order, payment)
17
+
18
+ expect(page).to have_content "Store Credit"
19
+ expect(page).to have_content "Amount: $20.00"
20
+ end
21
+ end
@@ -0,0 +1,87 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Product Images", :type => :feature do
4
+ stub_authorization!
5
+
6
+ let(:file_path) { Rails.root + "../../spec/support/ror_ringer.jpeg" }
7
+
8
+ before do
9
+ # Ensure attachment style keys are symbolized before running all tests
10
+ # Otherwise this would result in this error:
11
+ # undefined method `processors' for \"48x48>\
12
+ Spree::Image.attachment_definitions[:attachment][:styles].symbolize_keys!
13
+ end
14
+
15
+ context "uploading, editing, and deleting an image", :js => true do
16
+ it "should allow an admin to upload and edit an image for a product" do
17
+ Spree::Image.attachment_definitions[:attachment].delete :storage
18
+
19
+ create(:product)
20
+
21
+ visit spree.admin_path
22
+ click_link "Products"
23
+ click_icon(:edit)
24
+ click_link "Images"
25
+ click_link "new_image_link"
26
+ attach_file('image_attachment', file_path)
27
+ click_button "Update"
28
+ expect(page).to have_content("successfully created!")
29
+
30
+ click_icon(:edit)
31
+ fill_in "image_alt", :with => "ruby on rails t-shirt"
32
+ click_button "Update"
33
+ expect(page).to have_content("successfully updated!")
34
+ expect(page).to have_content("ruby on rails t-shirt")
35
+
36
+ accept_alert do
37
+ click_icon :trash
38
+ end
39
+ expect(page).not_to have_content("ruby on rails t-shirt")
40
+ end
41
+ end
42
+
43
+ # Regression test for #2228
44
+ it "should see variant images" do
45
+ variant = create(:variant)
46
+ variant.images.create!(:attachment => File.open(file_path))
47
+ visit spree.admin_product_images_path(variant.product)
48
+
49
+ expect(page).not_to have_content("No Images Found.")
50
+ within("table.index") do
51
+ expect(page).to have_content(variant.options_text)
52
+
53
+ #ensure no duplicate images are displayed
54
+ expect(page).to have_css("tbody tr", :count => 1)
55
+
56
+ #ensure variant header is displayed
57
+ within("thead") do
58
+ expect(page).to have_content("Variant")
59
+ end
60
+
61
+ #ensure variant header is displayed
62
+ within("tbody") do
63
+ expect(page).to have_content("Size: S")
64
+ end
65
+ end
66
+ end
67
+
68
+ it "should not see variant column when product has no variants" do
69
+ product = create(:product)
70
+ product.images.create!(:attachment => File.open(file_path))
71
+ visit spree.admin_product_images_path(product)
72
+
73
+ expect(page).not_to have_content("No Images Found.")
74
+ within("table.index") do
75
+ #ensure no duplicate images are displayed
76
+ expect(page).to have_css("tbody tr", :count => 1)
77
+
78
+ #ensure variant header is not displayed
79
+ within("thead") do
80
+ expect(page).not_to have_content("Variant")
81
+ end
82
+
83
+ #ensure correct cell count
84
+ expect(page).to have_css("thead th", :count => 3)
85
+ end
86
+ end
87
+ end