solidus_virtual_gift_card 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +16 -0
  3. data/.rspec +1 -0
  4. data/Gemfile +10 -0
  5. data/LICENSE +26 -0
  6. data/README.md +52 -0
  7. data/Rakefile +21 -0
  8. data/app/assets/javascripts/spree/backend/solidus_virtual_gift_card.coffee +9 -0
  9. data/app/assets/stylesheets/spree/backend/solidus_virtual_gift_card.css +7 -0
  10. data/app/controllers/spree/admin/gift_cards_controller.rb +54 -0
  11. data/app/controllers/spree/api/gift_cards_controller.rb +23 -0
  12. data/app/mailers/spree/gift_card_mailer.rb +8 -0
  13. data/app/models/concerns/spree/gift_cards/line_item_concerns.rb +17 -0
  14. data/app/models/concerns/spree/gift_cards/order_concerns.rb +34 -0
  15. data/app/models/concerns/spree/redemption_code_generator.rb +10 -0
  16. data/app/models/spree/line_item_decorator.rb +1 -0
  17. data/app/models/spree/order_decorator.rb +1 -0
  18. data/app/models/spree/permission_sets/virtual_gift_card_display.rb +9 -0
  19. data/app/models/spree/permission_sets/virtual_gift_card_management.rb +9 -0
  20. data/app/models/spree/store_credit_category_decorator.rb +2 -0
  21. data/app/models/spree/virtual_gift_card.rb +75 -0
  22. data/app/overrides/admin_item_view_gift_card_codes.rb +13 -0
  23. data/app/overrides/admin_user_sidebar_store_credits.rb +6 -0
  24. data/app/overrides/admin_user_sub_menu.rb +6 -0
  25. data/app/views/spree/admin/gift_cards/_lookup_form.html.erb +8 -0
  26. data/app/views/spree/admin/gift_cards/_redemption_form.html.erb +8 -0
  27. data/app/views/spree/admin/gift_cards/index.html.erb +1 -0
  28. data/app/views/spree/admin/gift_cards/lookup.html.erb +16 -0
  29. data/app/views/spree/admin/gift_cards/show.html.erb +32 -0
  30. data/app/views/spree/admin/orders/_gift_card_redemption_codes.html.erb +3 -0
  31. data/app/views/spree/admin/users/_gift_card_sidebar.html.erb +3 -0
  32. data/app/views/spree/admin/users/_sub_menu.html.erb +10 -0
  33. data/app/views/spree/gift_card_mailer/gift_card_email.text.erb +7 -0
  34. data/bin/rails +7 -0
  35. data/circle.yml +6 -0
  36. data/config/initializers/gift_card_store_credit_event_originator.rb +7 -0
  37. data/config/locales/en.yml +21 -0
  38. data/config/routes.rb +23 -0
  39. data/db/migrate/20140623152903_create_virtual_gift_card.rb +16 -0
  40. data/db/migrate/20140624175113_seed_gift_card_category.rb +5 -0
  41. data/db/migrate/20140627185148_add_timestamps_to_gift_cards.rb +6 -0
  42. data/db/migrate/20140702153907_add_gift_card_flag_to_products.rb +5 -0
  43. data/db/migrate/20140707200431_add_line_item_to_gift_card.rb +7 -0
  44. data/db/seeds.rb +1 -0
  45. data/lib/generators/solidus_virtual_gift_card/install/install_generator.rb +36 -0
  46. data/lib/solidus_virtual_gift_card.rb +2 -0
  47. data/lib/spree_virtual_gift_card/engine.rb +20 -0
  48. data/lib/spree_virtual_gift_card/factories.rb +13 -0
  49. data/solidus_virtual_gift_card.gemspec +31 -0
  50. data/spec/controllers/spree/admin/gift_cards_controller_spec.rb +111 -0
  51. data/spec/controllers/spree/api/gift_cards_controller_spec.rb +88 -0
  52. data/spec/models/concerns/spree/redemption_code_generator_spec.rb +42 -0
  53. data/spec/models/spree/line_item_spec.rb +30 -0
  54. data/spec/models/spree/order_spec.rb +90 -0
  55. data/spec/models/spree/permission_sets/virtual_gift_card_display_spec.rb +22 -0
  56. data/spec/models/spree/permission_sets/virtual_gift_card_management_spec.rb +21 -0
  57. data/spec/models/spree/store_credit_category_spec.rb +23 -0
  58. data/spec/models/spree/virtual_gift_card_spec.rb +179 -0
  59. data/spec/spec_helper.rb +74 -0
  60. metadata +258 -0
@@ -0,0 +1,179 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::VirtualGiftCard do
4
+ let!(:gc_category) { create(:store_credit_gift_card_category) }
5
+ let!(:credit_type) { create(:secondary_credit_type, name: "Non-expiring") }
6
+
7
+ context 'validations' do
8
+ let(:invalid_gift_card) { Spree::VirtualGiftCard.new(amount: 0, currency: 'USD', purchaser: create(:user)) }
9
+
10
+ context 'given an amount less than one' do
11
+ it 'is not valid' do
12
+ expect(invalid_gift_card).not_to be_valid
13
+ end
14
+
15
+ it 'adds an error to amount' do
16
+ invalid_gift_card.save
17
+ expect(invalid_gift_card.errors.full_messages).to include 'Amount must be greater than 0'
18
+ end
19
+ end
20
+ end
21
+
22
+ context 'before create callbacks' do
23
+ let(:gift_card) { Spree::VirtualGiftCard.new(amount: 20, currency: 'USD', purchaser: create(:user), line_item: create(:line_item) ) }
24
+ subject { gift_card.save }
25
+
26
+ context 'a redemption code is set already' do
27
+ before { gift_card.redemption_code = 'foo' }
28
+ it 'keeps that redemption code' do
29
+ subject
30
+ expect(gift_card.redemption_code).to eq 'foo'
31
+ end
32
+ end
33
+
34
+ context 'no collision on redemption code' do
35
+ it 'sets an initial redemption code' do
36
+ subject
37
+ expect(gift_card.redemption_code).to be_present
38
+ end
39
+ end
40
+
41
+
42
+ context 'there is a collision on redemption code' do
43
+ context 'the existing giftcard has not been redeemed yet' do
44
+ let!(:existing_giftcard) { create(:virtual_gift_card) }
45
+ let(:expected_code) { 'EXPECTEDCODE' }
46
+ let(:generator) { Spree::RedemptionCodeGenerator }
47
+
48
+ it 'recursively generates redemption codes' do
49
+ expect(generator).to receive(:generate_redemption_code).and_return(existing_giftcard.redemption_code)
50
+ expect(generator).to receive(:generate_redemption_code).and_return(expected_code)
51
+
52
+ subject
53
+
54
+ expect(gift_card.redemption_code).to eq expected_code
55
+ end
56
+ end
57
+
58
+ context 'the existing gift card has been redeemed' do
59
+ let!(:existing_giftcard) { create(:virtual_gift_card, redeemed_at: Time.now) }
60
+ let(:generator) { Spree::RedemptionCodeGenerator }
61
+
62
+ it 'recursively generates redemption codes' do
63
+ expect(generator).to receive(:generate_redemption_code).and_return(existing_giftcard.redemption_code)
64
+
65
+ subject
66
+
67
+ expect(gift_card.redemption_code).to eq existing_giftcard.redemption_code
68
+ end
69
+ end
70
+ end
71
+ end
72
+
73
+ describe '#redeemed?' do
74
+ let(:gift_card) { Spree::VirtualGiftCard.new(amount: 20, currency: 'USD') }
75
+ subject { gift_card.save }
76
+
77
+ it 'is redeemed if there is a redeemed_at set' do
78
+ gift_card.redeemed_at = Time.now
79
+ subject
80
+ expect(gift_card.redeemed?).to be true
81
+ end
82
+
83
+ it 'is not redeemed if there is no timestamp for redeemed_at' do
84
+ subject
85
+ expect(gift_card.redeemed?).to be false
86
+ end
87
+ end
88
+
89
+ describe '#redeem' do
90
+ let(:gift_card) { Spree::VirtualGiftCard.create(amount: 20, currency: 'USD', purchaser: create(:user), line_item: create(:line_item)) }
91
+ let(:redeemer) { create(:user) }
92
+ subject { gift_card.redeem(redeemer) }
93
+
94
+ context 'it has already been redeemed' do
95
+ before { gift_card.redeemed_at = Date.yesterday }
96
+
97
+ it 'should return false' do
98
+ expect(subject).to be false
99
+ end
100
+
101
+ context 'does nothing to the gift card' do
102
+ it 'should not create a store credit' do
103
+ expect(gift_card.store_credit).not_to be_present
104
+ end
105
+
106
+ it 'should not update the gift card' do
107
+ expect { subject }.to_not change{ gift_card }
108
+ end
109
+ end
110
+ end
111
+
112
+ context 'it has not been redeemed already' do
113
+ context 'generates a store credit' do
114
+ before { subject }
115
+ let(:store_credit) { gift_card.store_credit }
116
+
117
+ it 'sets the relationship' do
118
+ expect(store_credit).to be_present
119
+ end
120
+
121
+ it 'sets the store credit amount' do
122
+ expect(store_credit.amount).to eq gift_card.amount
123
+ end
124
+
125
+ it 'sets the store credit currency' do
126
+ expect(store_credit.currency).to eq gift_card.currency
127
+ end
128
+
129
+ it "sets the 'Gift Card' category" do
130
+ expect(store_credit.category).to eq gc_category
131
+ end
132
+
133
+ it 'sets the redeeming user on the store credit' do
134
+ expect(store_credit.user).to eq redeemer
135
+ end
136
+
137
+ it 'sets the created_by user on the store credit' do
138
+ expect(store_credit.created_by).to eq redeemer
139
+ end
140
+
141
+ it 'sets a memo on store credit for admins to reference the redemption code' do
142
+ expect(store_credit.memo).to eq gift_card.memo
143
+ end
144
+ end
145
+
146
+ it 'returns true' do
147
+ expect(subject).to be true
148
+ end
149
+
150
+ it 'sets redeemed_at' do
151
+ subject
152
+ expect(gift_card.redeemed_at).to be_present
153
+ end
154
+
155
+ it 'sets the redeeming user association' do
156
+ subject
157
+ expect(gift_card.redeemer).to be_present
158
+ end
159
+
160
+ it 'sets the admin as the store credit event originator' do
161
+ expect { subject }.to change { Spree::StoreCreditEvent.count }.by(1)
162
+ expect(Spree::StoreCreditEvent.last.originator).to eq gift_card
163
+ end
164
+ end
165
+ end
166
+
167
+ describe '#formatted_redemption_code' do
168
+ let(:redemption_code) { 'AAAABBBBCCCCDDDD' }
169
+ let(:formatted_redemption_code) { 'AAAA-BBBB-CCCC-DDDD' }
170
+ let(:gift_card) { Spree::VirtualGiftCard.create(amount: 20, currency: 'USD') }
171
+
172
+ subject { gift_card.formatted_redemption_code }
173
+
174
+ it 'inserts dashes into the code after every 4 characters' do
175
+ expect(gift_card).to receive(:redemption_code).and_return(redemption_code)
176
+ expect(subject).to eq formatted_redemption_code
177
+ end
178
+ end
179
+ end
@@ -0,0 +1,74 @@
1
+ # Run Coverage report
2
+ require 'simplecov'
3
+ SimpleCov.start do
4
+ add_filter 'spec'
5
+ add_group 'Controllers', 'app/controllers'
6
+ add_group 'Helpers', 'app/helpers'
7
+ add_group 'Mailers', 'app/mailers'
8
+ add_group 'Models', 'app/models'
9
+ add_group 'Views', 'app/views'
10
+ add_group 'Libraries', 'lib'
11
+ end
12
+
13
+ # Configure Rails Environment
14
+ ENV['RAILS_ENV'] = 'test'
15
+
16
+ require File.expand_path('../dummy/config/environment.rb', __FILE__)
17
+
18
+ require 'rspec/rails'
19
+
20
+ require 'database_cleaner'
21
+ require 'ffaker'
22
+
23
+ require 'spree/testing_support/factories'
24
+ require 'spree/testing_support/controller_requests'
25
+ require 'spree/testing_support/authorization_helpers'
26
+ require 'spree/testing_support/url_helpers'
27
+
28
+ require 'cancan/matchers'
29
+
30
+ require "spree_virtual_gift_card/factories"
31
+
32
+ Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each { |f| require f }
33
+
34
+ RSpec.configure do |config|
35
+ config.infer_spec_type_from_file_location!
36
+ config.mock_with :rspec
37
+
38
+ config.color = true
39
+ config.order = "random"
40
+
41
+ config.expose_current_running_example_as :example
42
+ config.fail_fast = ENV["FAIL_FAST"] || false
43
+
44
+ config.filter_run focus: true
45
+ config.run_all_when_everything_filtered = true
46
+ config.use_transactional_fixtures = false
47
+
48
+ config.example_status_persistence_file_path = "./spec/examples.txt"
49
+
50
+ config.include FactoryGirl::Syntax::Methods
51
+ config.include Spree::TestingSupport::ControllerRequests, type: :controller
52
+ config.include Spree::TestingSupport::UrlHelpers, type: :controller
53
+
54
+ # Ensure Suite is set to use transactions for speed.
55
+ config.before :suite do
56
+ DatabaseCleaner.strategy = :transaction
57
+ DatabaseCleaner.clean_with :truncation
58
+ end
59
+
60
+ # Before each spec check if it is a Javascript test and switch between using
61
+ # database transactions or not where necessary.
62
+ config.before :each do |example|
63
+ DatabaseCleaner.strategy = :truncation
64
+ DatabaseCleaner.start
65
+
66
+ Spree::Api::Config[:requires_authentication] = true
67
+ Spree::Config.reset
68
+ end
69
+
70
+ # After each spec clean the database.
71
+ config.after :each do
72
+ DatabaseCleaner.clean
73
+ end
74
+ end
metadata ADDED
@@ -0,0 +1,258 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: solidus_virtual_gift_card
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Bonobos
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-08-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: solidus
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.0.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: 1.2.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 1.0.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: 1.2.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: rspec-rails
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '3.2'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '3.2'
47
+ - !ruby/object:Gem::Dependency
48
+ name: simplecov
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: sqlite3
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: sass-rails
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: coffee-rails
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: factory_girl
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ - !ruby/object:Gem::Dependency
118
+ name: capybara
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ - !ruby/object:Gem::Dependency
132
+ name: database_cleaner
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ - !ruby/object:Gem::Dependency
146
+ name: ffaker
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ type: :development
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ description:
160
+ email: engineering@bonobos.com
161
+ executables: []
162
+ extensions: []
163
+ extra_rdoc_files: []
164
+ files:
165
+ - ".gitignore"
166
+ - ".rspec"
167
+ - Gemfile
168
+ - LICENSE
169
+ - README.md
170
+ - Rakefile
171
+ - app/assets/javascripts/spree/backend/solidus_virtual_gift_card.coffee
172
+ - app/assets/stylesheets/spree/backend/solidus_virtual_gift_card.css
173
+ - app/controllers/spree/admin/gift_cards_controller.rb
174
+ - app/controllers/spree/api/gift_cards_controller.rb
175
+ - app/mailers/spree/gift_card_mailer.rb
176
+ - app/models/concerns/spree/gift_cards/line_item_concerns.rb
177
+ - app/models/concerns/spree/gift_cards/order_concerns.rb
178
+ - app/models/concerns/spree/redemption_code_generator.rb
179
+ - app/models/spree/line_item_decorator.rb
180
+ - app/models/spree/order_decorator.rb
181
+ - app/models/spree/permission_sets/virtual_gift_card_display.rb
182
+ - app/models/spree/permission_sets/virtual_gift_card_management.rb
183
+ - app/models/spree/store_credit_category_decorator.rb
184
+ - app/models/spree/virtual_gift_card.rb
185
+ - app/overrides/admin_item_view_gift_card_codes.rb
186
+ - app/overrides/admin_user_sidebar_store_credits.rb
187
+ - app/overrides/admin_user_sub_menu.rb
188
+ - app/views/spree/admin/gift_cards/_lookup_form.html.erb
189
+ - app/views/spree/admin/gift_cards/_redemption_form.html.erb
190
+ - app/views/spree/admin/gift_cards/index.html.erb
191
+ - app/views/spree/admin/gift_cards/lookup.html.erb
192
+ - app/views/spree/admin/gift_cards/show.html.erb
193
+ - app/views/spree/admin/orders/_gift_card_redemption_codes.html.erb
194
+ - app/views/spree/admin/users/_gift_card_sidebar.html.erb
195
+ - app/views/spree/admin/users/_sub_menu.html.erb
196
+ - app/views/spree/gift_card_mailer/gift_card_email.text.erb
197
+ - bin/rails
198
+ - circle.yml
199
+ - config/initializers/gift_card_store_credit_event_originator.rb
200
+ - config/locales/en.yml
201
+ - config/routes.rb
202
+ - db/migrate/20140623152903_create_virtual_gift_card.rb
203
+ - db/migrate/20140624175113_seed_gift_card_category.rb
204
+ - db/migrate/20140627185148_add_timestamps_to_gift_cards.rb
205
+ - db/migrate/20140702153907_add_gift_card_flag_to_products.rb
206
+ - db/migrate/20140707200431_add_line_item_to_gift_card.rb
207
+ - db/seeds.rb
208
+ - lib/generators/solidus_virtual_gift_card/install/install_generator.rb
209
+ - lib/solidus_virtual_gift_card.rb
210
+ - lib/spree_virtual_gift_card/engine.rb
211
+ - lib/spree_virtual_gift_card/factories.rb
212
+ - solidus_virtual_gift_card.gemspec
213
+ - spec/controllers/spree/admin/gift_cards_controller_spec.rb
214
+ - spec/controllers/spree/api/gift_cards_controller_spec.rb
215
+ - spec/models/concerns/spree/redemption_code_generator_spec.rb
216
+ - spec/models/spree/line_item_spec.rb
217
+ - spec/models/spree/order_spec.rb
218
+ - spec/models/spree/permission_sets/virtual_gift_card_display_spec.rb
219
+ - spec/models/spree/permission_sets/virtual_gift_card_management_spec.rb
220
+ - spec/models/spree/store_credit_category_spec.rb
221
+ - spec/models/spree/virtual_gift_card_spec.rb
222
+ - spec/spec_helper.rb
223
+ homepage: http://www.bonobos.com
224
+ licenses:
225
+ - BSD-3
226
+ metadata: {}
227
+ post_install_message:
228
+ rdoc_options: []
229
+ require_paths:
230
+ - lib
231
+ required_ruby_version: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - ">="
234
+ - !ruby/object:Gem::Version
235
+ version: '2.1'
236
+ required_rubygems_version: !ruby/object:Gem::Requirement
237
+ requirements:
238
+ - - ">="
239
+ - !ruby/object:Gem::Version
240
+ version: '0'
241
+ requirements:
242
+ - none
243
+ rubyforge_project:
244
+ rubygems_version: 2.2.5
245
+ signing_key:
246
+ specification_version: 4
247
+ summary: Virtual gift card for purchase, drops into the user's account as store credit
248
+ test_files:
249
+ - spec/controllers/spree/admin/gift_cards_controller_spec.rb
250
+ - spec/controllers/spree/api/gift_cards_controller_spec.rb
251
+ - spec/models/concerns/spree/redemption_code_generator_spec.rb
252
+ - spec/models/spree/line_item_spec.rb
253
+ - spec/models/spree/order_spec.rb
254
+ - spec/models/spree/permission_sets/virtual_gift_card_display_spec.rb
255
+ - spec/models/spree/permission_sets/virtual_gift_card_management_spec.rb
256
+ - spec/models/spree/store_credit_category_spec.rb
257
+ - spec/models/spree/virtual_gift_card_spec.rb
258
+ - spec/spec_helper.rb