solidus_virtual_gift_card 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -0
  3. data/app/assets/javascripts/spree/backend/solidus_virtual_gift_card.coffee +6 -6
  4. data/app/assets/stylesheets/spree/backend/solidus_virtual_gift_card.css +4 -0
  5. data/app/controllers/spree/admin/gift_cards_controller.rb +32 -12
  6. data/app/mailers/spree/gift_card_mailer.rb +2 -1
  7. data/app/models/concerns/spree/gift_cards/line_item_concerns.rb +6 -1
  8. data/app/models/concerns/spree/gift_cards/order_concerns.rb +15 -9
  9. data/app/models/concerns/spree/gift_cards/order_contents_concerns.rb +84 -0
  10. data/app/models/spree/order_contents_decorator.rb +1 -0
  11. data/app/models/spree/virtual_gift_card.rb +47 -10
  12. data/app/overrides/admin_gift_card_order_confirmation.rb +6 -0
  13. data/app/overrides/admin_item_view_gift_card_codes.rb +9 -2
  14. data/app/views/spree/admin/gift_cards/_lookup_form.html.erb +31 -6
  15. data/app/views/spree/admin/gift_cards/edit.html.erb +81 -0
  16. data/app/views/spree/admin/gift_cards/index.html.erb +39 -0
  17. data/app/views/spree/admin/gift_cards/show.html.erb +0 -32
  18. data/app/views/spree/admin/orders/_cart_gift_card_details.html.erb +3 -0
  19. data/app/views/spree/admin/orders/_confirmation_gift_card_details.html.erb +50 -0
  20. data/app/views/spree/admin/orders/_gift_card_details.html.erb +2 -0
  21. data/app/views/spree/admin/orders/_shipments_gift_card_details.html.erb +3 -0
  22. data/bin/rails +1 -1
  23. data/config/initializers/line_item_controller_gift_card_details.rb +4 -0
  24. data/config/initializers/ransack.rb +7 -0
  25. data/config/locales/en.yml +3 -0
  26. data/config/routes.rb +9 -1
  27. data/db/migrate/20151013172931_add_recipient_fields_to_virtual_gift_card.rb +8 -0
  28. data/db/migrate/20151013210615_add_active_flag_to_virtual_gift_card.rb +5 -0
  29. data/db/migrate/20151013214647_set_redeemable_true_on_virtual_gift_cards.rb +11 -0
  30. data/db/migrate/20151019190731_add_email_send_time_to_virtual_gift_card.rb +7 -0
  31. data/lib/spree_virtual_gift_card/factories.rb +11 -2
  32. data/lib/tasks/send_gift_card_emails.rake +8 -0
  33. data/solidus_virtual_gift_card.gemspec +1 -1
  34. data/spec/controllers/spree/admin/gift_cards_controller_spec.rb +1 -33
  35. data/spec/controllers/spree/api/gift_cards_controller_spec.rb +1 -1
  36. data/spec/features/admin/gift_cards_spec.rb +74 -0
  37. data/spec/lib/tasks/send_gift_card_emails_spec.rb +60 -0
  38. data/spec/models/spree/line_item_spec.rb +21 -0
  39. data/spec/models/spree/order_contents_spec.rb +270 -0
  40. data/spec/models/spree/order_spec.rb +34 -57
  41. data/spec/models/spree/virtual_gift_card_spec.rb +54 -23
  42. data/spec/spec_helper.rb +1 -0
  43. metadata +23 -3
  44. data/app/views/spree/admin/orders/_gift_card_redemption_codes.html.erb +0 -3
@@ -5,7 +5,7 @@ describe Spree::VirtualGiftCard do
5
5
  let!(:credit_type) { create(:secondary_credit_type, name: "Non-expiring") }
6
6
 
7
7
  context 'validations' do
8
- let(:invalid_gift_card) { Spree::VirtualGiftCard.new(amount: 0, currency: 'USD', purchaser: create(:user)) }
8
+ let(:invalid_gift_card) { build(:virtual_gift_card, amount: 0) }
9
9
 
10
10
  context 'given an amount less than one' do
11
11
  it 'is not valid' do
@@ -19,29 +19,31 @@ describe Spree::VirtualGiftCard do
19
19
  end
20
20
  end
21
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 }
22
+ describe '#make_redeemable!' do
23
+ let(:user) { create(:user) }
24
+ let(:gift_card) { create(:virtual_gift_card) }
25
+ subject { gift_card.make_redeemable!(purchaser: user) }
25
26
 
26
- context 'a redemption code is set already' do
27
- before { gift_card.redemption_code = 'foo' }
28
- it 'keeps that redemption code' do
27
+ context 'no collision on redemption code' do
28
+ it 'sets a redemption code' do
29
29
  subject
30
- expect(gift_card.redemption_code).to eq 'foo'
30
+ expect(gift_card.redemption_code).to be_present
31
31
  end
32
32
  end
33
33
 
34
- context 'no collision on redemption code' do
35
- it 'sets an initial redemption code' do
34
+ context 'redemption code is already set' do
35
+ let(:expected_code) { "EXPECTEDCODE" }
36
+ before { gift_card.redemption_code = expected_code }
37
+ it "does not update the redemption code" do
36
38
  subject
37
- expect(gift_card.redemption_code).to be_present
39
+ expect(gift_card.redemption_code).to eq expected_code
38
40
  end
39
41
  end
40
42
 
41
43
 
42
- context 'there is a collision on redemption code' do
44
+ context 'there is a collision on redemption code' do
43
45
  context 'the existing giftcard has not been redeemed yet' do
44
- let!(:existing_giftcard) { create(:virtual_gift_card) }
46
+ let!(:existing_giftcard) { create(:virtual_gift_card, redemption_code: "ABC123-EFG456") }
45
47
  let(:expected_code) { 'EXPECTEDCODE' }
46
48
  let(:generator) { Spree::RedemptionCodeGenerator }
47
49
 
@@ -56,7 +58,7 @@ describe Spree::VirtualGiftCard do
56
58
  end
57
59
 
58
60
  context 'the existing gift card has been redeemed' do
59
- let!(:existing_giftcard) { create(:virtual_gift_card, redeemed_at: Time.now) }
61
+ let!(:existing_giftcard) { create(:virtual_gift_card, redemption_code: "ABC123-EFG456", redeemed_at: Time.now) }
60
62
  let(:generator) { Spree::RedemptionCodeGenerator }
61
63
 
62
64
  it 'recursively generates redemption codes' do
@@ -71,26 +73,42 @@ describe Spree::VirtualGiftCard do
71
73
  end
72
74
 
73
75
  describe '#redeemed?' do
74
- let(:gift_card) { Spree::VirtualGiftCard.new(amount: 20, currency: 'USD') }
75
- subject { gift_card.save }
76
+ let(:gift_card) { build(:virtual_gift_card) }
76
77
 
77
78
  it 'is redeemed if there is a redeemed_at set' do
78
79
  gift_card.redeemed_at = Time.now
79
- subject
80
80
  expect(gift_card.redeemed?).to be true
81
81
  end
82
82
 
83
83
  it 'is not redeemed if there is no timestamp for redeemed_at' do
84
- subject
85
84
  expect(gift_card.redeemed?).to be false
86
85
  end
87
86
  end
88
87
 
89
88
  describe '#redeem' do
90
- let(:gift_card) { Spree::VirtualGiftCard.create(amount: 20, currency: 'USD', purchaser: create(:user), line_item: create(:line_item)) }
89
+ let(:gift_card) { create(:redeemable_virtual_gift_card) }
91
90
  let(:redeemer) { create(:user) }
92
91
  subject { gift_card.redeem(redeemer) }
93
92
 
93
+ context 'it is not redeemable' do
94
+ before { gift_card.redeemable = false }
95
+
96
+ it 'should return false' do
97
+ expect(subject).to be false
98
+ end
99
+
100
+ context 'does nothing to the gift card' do
101
+ it 'should not create a store credit' do
102
+ expect(gift_card.store_credit).not_to be_present
103
+ end
104
+
105
+ it 'should not update the gift card' do
106
+ expect { subject }.to_not change{ gift_card }
107
+ end
108
+ end
109
+ end
110
+
111
+
94
112
  context 'it has already been redeemed' do
95
113
  before { gift_card.redeemed_at = Date.yesterday }
96
114
 
@@ -109,7 +127,7 @@ describe Spree::VirtualGiftCard do
109
127
  end
110
128
  end
111
129
 
112
- context 'it has not been redeemed already' do
130
+ context 'it has not been redeemed already and is redeemable' do
113
131
  context 'generates a store credit' do
114
132
  before { subject }
115
133
  let(:store_credit) { gift_card.store_credit }
@@ -165,15 +183,28 @@ describe Spree::VirtualGiftCard do
165
183
  end
166
184
 
167
185
  describe '#formatted_redemption_code' do
168
- let(:redemption_code) { 'AAAABBBBCCCCDDDD' }
169
186
  let(:formatted_redemption_code) { 'AAAA-BBBB-CCCC-DDDD' }
170
- let(:gift_card) { Spree::VirtualGiftCard.create(amount: 20, currency: 'USD') }
187
+ let(:gift_card) { build(:redeemable_virtual_gift_card, redemption_code: 'AAAABBBBCCCCDDDD') }
171
188
 
172
189
  subject { gift_card.formatted_redemption_code }
173
190
 
174
191
  it 'inserts dashes into the code after every 4 characters' do
175
- expect(gift_card).to receive(:redemption_code).and_return(redemption_code)
176
192
  expect(subject).to eq formatted_redemption_code
177
193
  end
178
194
  end
195
+
196
+ describe "#send_email" do
197
+ let(:gift_card) { create(:redeemable_virtual_gift_card) }
198
+
199
+ subject { gift_card.send_email }
200
+
201
+ it "sends the gift card email" do
202
+ expect(Spree::GiftCardMailer).to receive(:gift_card_email).with(gift_card).and_return(double(deliver_later: true))
203
+ subject
204
+ end
205
+
206
+ it "sets sent_at" do
207
+ expect { subject }.to change { gift_card.sent_at }
208
+ end
209
+ end
179
210
  end
data/spec/spec_helper.rb CHANGED
@@ -16,6 +16,7 @@ ENV['RAILS_ENV'] = 'test'
16
16
  require File.expand_path('../dummy/config/environment.rb', __FILE__)
17
17
 
18
18
  require 'rspec/rails'
19
+ require 'rake'
19
20
 
20
21
  require 'database_cleaner'
21
22
  require 'ffaker'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solidus_virtual_gift_card
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bonobos
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-27 00:00:00.000000000 Z
11
+ date: 2015-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: solidus
@@ -175,28 +175,37 @@ files:
175
175
  - app/mailers/spree/gift_card_mailer.rb
176
176
  - app/models/concerns/spree/gift_cards/line_item_concerns.rb
177
177
  - app/models/concerns/spree/gift_cards/order_concerns.rb
178
+ - app/models/concerns/spree/gift_cards/order_contents_concerns.rb
178
179
  - app/models/concerns/spree/redemption_code_generator.rb
179
180
  - app/models/spree/line_item_decorator.rb
181
+ - app/models/spree/order_contents_decorator.rb
180
182
  - app/models/spree/order_decorator.rb
181
183
  - app/models/spree/permission_sets/virtual_gift_card_display.rb
182
184
  - app/models/spree/permission_sets/virtual_gift_card_management.rb
183
185
  - app/models/spree/store_credit_category_decorator.rb
184
186
  - app/models/spree/virtual_gift_card.rb
187
+ - app/overrides/admin_gift_card_order_confirmation.rb
185
188
  - app/overrides/admin_item_view_gift_card_codes.rb
186
189
  - app/overrides/admin_user_sidebar_store_credits.rb
187
190
  - app/overrides/admin_user_sub_menu.rb
188
191
  - app/views/spree/admin/gift_cards/_lookup_form.html.erb
189
192
  - app/views/spree/admin/gift_cards/_redemption_form.html.erb
193
+ - app/views/spree/admin/gift_cards/edit.html.erb
190
194
  - app/views/spree/admin/gift_cards/index.html.erb
191
195
  - app/views/spree/admin/gift_cards/lookup.html.erb
192
196
  - app/views/spree/admin/gift_cards/show.html.erb
193
- - app/views/spree/admin/orders/_gift_card_redemption_codes.html.erb
197
+ - app/views/spree/admin/orders/_cart_gift_card_details.html.erb
198
+ - app/views/spree/admin/orders/_confirmation_gift_card_details.html.erb
199
+ - app/views/spree/admin/orders/_gift_card_details.html.erb
200
+ - app/views/spree/admin/orders/_shipments_gift_card_details.html.erb
194
201
  - app/views/spree/admin/users/_gift_card_sidebar.html.erb
195
202
  - app/views/spree/admin/users/_sub_menu.html.erb
196
203
  - app/views/spree/gift_card_mailer/gift_card_email.text.erb
197
204
  - bin/rails
198
205
  - circle.yml
199
206
  - config/initializers/gift_card_store_credit_event_originator.rb
207
+ - config/initializers/line_item_controller_gift_card_details.rb
208
+ - config/initializers/ransack.rb
200
209
  - config/locales/en.yml
201
210
  - config/routes.rb
202
211
  - db/migrate/20140623152903_create_virtual_gift_card.rb
@@ -204,16 +213,24 @@ files:
204
213
  - db/migrate/20140627185148_add_timestamps_to_gift_cards.rb
205
214
  - db/migrate/20140702153907_add_gift_card_flag_to_products.rb
206
215
  - db/migrate/20140707200431_add_line_item_to_gift_card.rb
216
+ - db/migrate/20151013172931_add_recipient_fields_to_virtual_gift_card.rb
217
+ - db/migrate/20151013210615_add_active_flag_to_virtual_gift_card.rb
218
+ - db/migrate/20151013214647_set_redeemable_true_on_virtual_gift_cards.rb
219
+ - db/migrate/20151019190731_add_email_send_time_to_virtual_gift_card.rb
207
220
  - db/seeds.rb
208
221
  - lib/generators/solidus_virtual_gift_card/install/install_generator.rb
209
222
  - lib/solidus_virtual_gift_card.rb
210
223
  - lib/spree_virtual_gift_card/engine.rb
211
224
  - lib/spree_virtual_gift_card/factories.rb
225
+ - lib/tasks/send_gift_card_emails.rake
212
226
  - solidus_virtual_gift_card.gemspec
213
227
  - spec/controllers/spree/admin/gift_cards_controller_spec.rb
214
228
  - spec/controllers/spree/api/gift_cards_controller_spec.rb
229
+ - spec/features/admin/gift_cards_spec.rb
230
+ - spec/lib/tasks/send_gift_card_emails_spec.rb
215
231
  - spec/models/concerns/spree/redemption_code_generator_spec.rb
216
232
  - spec/models/spree/line_item_spec.rb
233
+ - spec/models/spree/order_contents_spec.rb
217
234
  - spec/models/spree/order_spec.rb
218
235
  - spec/models/spree/permission_sets/virtual_gift_card_display_spec.rb
219
236
  - spec/models/spree/permission_sets/virtual_gift_card_management_spec.rb
@@ -248,8 +265,11 @@ summary: Virtual gift card for purchase, drops into the user's account as store
248
265
  test_files:
249
266
  - spec/controllers/spree/admin/gift_cards_controller_spec.rb
250
267
  - spec/controllers/spree/api/gift_cards_controller_spec.rb
268
+ - spec/features/admin/gift_cards_spec.rb
269
+ - spec/lib/tasks/send_gift_card_emails_spec.rb
251
270
  - spec/models/concerns/spree/redemption_code_generator_spec.rb
252
271
  - spec/models/spree/line_item_spec.rb
272
+ - spec/models/spree/order_contents_spec.rb
253
273
  - spec/models/spree/order_spec.rb
254
274
  - spec/models/spree/permission_sets/virtual_gift_card_display_spec.rb
255
275
  - spec/models/spree/permission_sets/virtual_gift_card_management_spec.rb
@@ -1,3 +0,0 @@
1
- <% item.line_item.gift_cards.each do |gift_card| %>
2
- <br><strong><%= Spree.t('admin.gift_cards.redemption_code') %>:</strong> <%= gift_card.redemption_code %>
3
- <% end %>