workarea-gift_cards 3.4.10 → 4.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.
- checksums.yaml +5 -5
- data/{.eslintrc → .eslintrc.json} +12 -1
- data/.github/workflows/ci.yml +10 -8
- data/.rubocop.yml +2 -197
- data/.stylelintrc.json +8 -0
- data/CHANGELOG.md +40 -20
- data/Gemfile +3 -5
- data/README.md +25 -1
- data/app/controllers/workarea/api/admin/gift_cards_controller.rb +309 -0
- data/app/controllers/workarea/api/storefront/checkouts_controller.decorator +6 -0
- data/app/controllers/workarea/api/storefront/gift_cards_controller.rb +2 -8
- data/app/controllers/workarea/storefront/checkout/gift_cards_controller.rb +32 -0
- data/app/controllers/workarea/storefront/gift_cards_controller.rb +15 -16
- data/app/models/workarea/checkout/steps/gift_card.rb +72 -0
- data/app/models/workarea/fulfillment/policies/create_gift_card.rb +30 -0
- data/app/models/workarea/payment.decorator +25 -7
- data/app/models/workarea/payment/authorize/gift_card.rb +7 -20
- data/app/models/workarea/payment/capture/gift_card.rb +5 -7
- data/app/models/workarea/payment/gift_card.rb +1 -1
- data/app/models/workarea/payment/gift_card_operation.rb +9 -0
- data/app/models/workarea/payment/purchase/gift_card.rb +24 -1
- data/app/models/workarea/payment/refund/gift_card.rb +9 -14
- data/app/models/workarea/payment/tender/gift_card.rb +3 -10
- data/app/models/workarea/search/admin/order.decorator +2 -4
- data/app/seeds/workarea/gift_card_seeds.rb +7 -7
- data/app/view_models/workarea/storefront/gift_card_order_pricing.rb +19 -20
- data/app/view_models/workarea/storefront/order_view_model.decorator +2 -22
- data/app/views/workarea/admin/payment_gift_cards/_menu.html.haml +2 -1
- data/app/views/workarea/storefront/checkouts/_gift_card_error.html.haml +8 -6
- data/app/views/workarea/storefront/checkouts/_gift_card_payment.html.haml +20 -12
- data/app/views/workarea/storefront/gift_card_mailer/created.html.haml +1 -1
- data/app/views/workarea/storefront/order_mailer/_gift_card_summary.html.haml +6 -5
- data/app/views/workarea/storefront/orders/_gift_card_summary.html.haml +2 -2
- data/app/views/workarea/storefront/products/templates/_gift_card.html.haml +5 -5
- data/app/workers/workarea/log_gift_card_redemption.rb +16 -9
- data/config/initializers/configuration.rb +7 -4
- data/config/initializers/fields.rb +14 -0
- data/config/locales/en.yml +14 -4
- data/config/routes.rb +9 -2
- data/lib/workarea/gift_cards.rb +9 -0
- data/lib/workarea/gift_cards/gateway.rb +128 -0
- data/lib/workarea/gift_cards/version.rb +1 -1
- data/test/documentation/workarea/api/admin/gift_cards_documentation_test.rb +24 -10
- data/test/documentation/workarea/api/storefront/gift_cards_documentation_test.rb +57 -50
- data/test/dummy/config/initializers/session_store.rb +1 -1
- data/test/integration/workarea/api/admin/gift_card_integration_test.rb +13 -5
- data/test/integration/workarea/api/storefront/checkout_gift_cards_integration_test.rb +120 -0
- data/test/integration/workarea/api/storefront/{balance_integration_test.rb → gift_cards_integration_test.rb} +1 -1
- data/test/integration/workarea/storefront/checkout_gift_cards_integration_test.rb +116 -0
- data/test/integration/workarea/storefront/gift_cards_integration_test.rb +48 -0
- data/test/integration/workarea/storefront/purchase_gift_cards_integration_test.rb +55 -0
- data/test/lib/workarea/gift_cards/gateway_test.rb +131 -0
- data/test/models/workarea/checkout/steps/gift_card_test.rb +104 -0
- data/test/models/workarea/fulfillment/policies/create_gift_card_test.rb +47 -0
- data/test/models/workarea/gift_card_payment_test.rb +15 -3
- data/test/models/workarea/payment/purchase/gift_card_test.rb +11 -8
- data/test/queries/workarea/admin_redemptions_export_test.rb +31 -35
- data/test/system/workarea/storefront/gift_cards_system_test.rb +8 -2
- data/test/view_models/workarea/storefront/gift_card_order_pricing_test.rb +113 -0
- data/test/workers/workarea/log_gift_card_redemption_test.rb +1 -1
- data/workarea-gift_cards.gemspec +4 -4
- metadata +32 -25
- data/.eslintignore +0 -2
- data/.scss-lint.yml +0 -188
- data/app/controllers/workarea/api/admin/payment_gift_cards_controller.rb +0 -49
- data/app/controllers/workarea/storefront/checkouts_controller.decorator +0 -24
- data/app/services/workarea/checkout/steps/gift_card.rb +0 -49
- data/app/view_models/workarea/storefront/checkout/payment_view_model.decorator +0 -32
- data/app/view_models/workarea/storefront/checkout/summary_view_model.decorator +0 -11
- data/app/workers/workarea/create_ordered_gift_cards.rb +0 -47
- data/config/initializers/jump_to_navigation.rb +0 -3
- data/test/integration/workarea/api/storefront/checkout_integration_test.rb +0 -161
- data/test/integration/workarea/storefront/gift_card_integration_test.rb +0 -226
- data/test/services/workarea/checkout/steps/gift_card_test.rb +0 -87
- data/test/view_models/workarea/storefront/checkout/gift_card_payment_view_model_test.rb +0 -65
- data/test/workers/workarea/create_ordered_gift_cards_test.rb +0 -39
|
@@ -16,14 +16,14 @@ module Workarea
|
|
|
16
16
|
|
|
17
17
|
def test_and_document_index
|
|
18
18
|
description 'Listing payment gift cards'
|
|
19
|
-
route
|
|
19
|
+
route admin_api.gift_cards_path
|
|
20
20
|
parameter :page, 'Current page'
|
|
21
21
|
parameter :sort_by, 'Field on which to sort (see responses for possible values)'
|
|
22
22
|
parameter :sort_direction, 'Direction to sort (asc or desc)'
|
|
23
23
|
2.times { |i| create_gift_card(to: "#{i}@weblinc.com") }
|
|
24
24
|
|
|
25
25
|
record_request do
|
|
26
|
-
get admin_api.
|
|
26
|
+
get admin_api.gift_cards_path,
|
|
27
27
|
params: { page: 1, sort_by: 'created_at', sort_direction: 'desc' }
|
|
28
28
|
|
|
29
29
|
assert_equal(200, response.status)
|
|
@@ -32,10 +32,10 @@ module Workarea
|
|
|
32
32
|
|
|
33
33
|
def test_and_document_create
|
|
34
34
|
description 'Creating a gift card'
|
|
35
|
-
route admin_api.
|
|
35
|
+
route admin_api.gift_cards_path
|
|
36
36
|
|
|
37
37
|
record_request do
|
|
38
|
-
post admin_api.
|
|
38
|
+
post admin_api.gift_cards_path,
|
|
39
39
|
params: { gift_card: sample_attributes.merge('token' => 'foobar') },
|
|
40
40
|
as: :json
|
|
41
41
|
|
|
@@ -45,20 +45,20 @@ module Workarea
|
|
|
45
45
|
|
|
46
46
|
def test_and_document_show
|
|
47
47
|
description 'Showing a gift card'
|
|
48
|
-
route admin_api.
|
|
48
|
+
route admin_api.gift_card_path(':id')
|
|
49
49
|
|
|
50
50
|
record_request do
|
|
51
|
-
get admin_api.
|
|
51
|
+
get admin_api.gift_card_path(create_gift_card.id)
|
|
52
52
|
assert_equal(200, response.status)
|
|
53
53
|
end
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
def test_and_document_update
|
|
57
57
|
description 'Updating a gift card'
|
|
58
|
-
route admin_api.
|
|
58
|
+
route admin_api.gift_card_path(':id')
|
|
59
59
|
|
|
60
60
|
record_request do
|
|
61
|
-
patch admin_api.
|
|
61
|
+
patch admin_api.gift_card_path(create_gift_card.id),
|
|
62
62
|
params: { gift_card: { to: 'test@weblinc.com' } },
|
|
63
63
|
as: :json
|
|
64
64
|
|
|
@@ -68,10 +68,24 @@ module Workarea
|
|
|
68
68
|
|
|
69
69
|
def test_and_document_destroy
|
|
70
70
|
description 'Removing a gift card'
|
|
71
|
-
route admin_api.
|
|
71
|
+
route admin_api.gift_card_path(':id')
|
|
72
72
|
|
|
73
73
|
record_request do
|
|
74
|
-
delete admin_api.
|
|
74
|
+
delete admin_api.gift_card_path(create_gift_card.id)
|
|
75
|
+
assert_equal(204, response.status)
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def test_and_document_bulk_upsert
|
|
80
|
+
description 'Bulk upserting gift cards'
|
|
81
|
+
route admin_api.bulk_gift_cards_path
|
|
82
|
+
|
|
83
|
+
data = Array.new(3) do |i|
|
|
84
|
+
sample_attributes.merge('token' => "GC#{i}")
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
record_request do
|
|
88
|
+
patch admin_api.bulk_gift_cards_path, params: { gift_cards: data }, as: :json
|
|
75
89
|
assert_equal(204, response.status)
|
|
76
90
|
end
|
|
77
91
|
end
|
|
@@ -8,6 +8,42 @@ module Workarea
|
|
|
8
8
|
class GiftCardsDocumentationTest < DocumentationTest
|
|
9
9
|
resource 'Gift Cards'
|
|
10
10
|
|
|
11
|
+
def setup_checkout
|
|
12
|
+
product = create_product(
|
|
13
|
+
name: 'Integration Product',
|
|
14
|
+
variants: [
|
|
15
|
+
{ sku: 'SKU1',
|
|
16
|
+
regular: 6.to_m,
|
|
17
|
+
tax_code: '001',
|
|
18
|
+
on_sale: true,
|
|
19
|
+
sale: 5.to_m }
|
|
20
|
+
]
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
create_shipping_service(
|
|
24
|
+
name: 'Ground',
|
|
25
|
+
tax_code: '001',
|
|
26
|
+
rates: [{ price: 7.to_m }]
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
@gift_card = create_gift_card(amount: 5.to_m)
|
|
30
|
+
@order = Order.create!
|
|
31
|
+
|
|
32
|
+
post storefront_api.cart_items_path(@order),
|
|
33
|
+
params: {
|
|
34
|
+
product_id: product.id,
|
|
35
|
+
sku: product.skus.first,
|
|
36
|
+
quantity: 2
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
patch storefront_api.checkout_path(@order),
|
|
40
|
+
params: {
|
|
41
|
+
email: 'bcrouse@workarea.com',
|
|
42
|
+
billing_address: factory_defaults(:billing_address),
|
|
43
|
+
shipping_address: factory_defaults(:shipping_address)
|
|
44
|
+
}
|
|
45
|
+
end
|
|
46
|
+
|
|
11
47
|
def test_checking_gift_card_balance
|
|
12
48
|
description 'Checking gift card balance'
|
|
13
49
|
route storefront_api.gift_cards_balance_path
|
|
@@ -40,63 +76,34 @@ module Workarea
|
|
|
40
76
|
checkout completion.
|
|
41
77
|
EOS
|
|
42
78
|
|
|
43
|
-
|
|
44
|
-
name: 'Integration Product',
|
|
45
|
-
variants: [
|
|
46
|
-
{ sku: 'SKU1',
|
|
47
|
-
regular: 6.to_m,
|
|
48
|
-
tax_code: '001',
|
|
49
|
-
on_sale: true,
|
|
50
|
-
sale: 5.to_m }
|
|
51
|
-
]
|
|
52
|
-
)
|
|
79
|
+
setup_checkout
|
|
53
80
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
rates: [{ price: 7.to_m }]
|
|
58
|
-
)
|
|
81
|
+
record_request do
|
|
82
|
+
patch storefront_api.add_gift_card_checkout_path(@order),
|
|
83
|
+
params: { gift_card_number: @gift_card.token }
|
|
59
84
|
|
|
60
|
-
|
|
85
|
+
assert_equal(200, response.status)
|
|
86
|
+
end
|
|
87
|
+
end
|
|
61
88
|
|
|
62
|
-
|
|
89
|
+
def test_removing_gift_card_from_checkout
|
|
90
|
+
description 'Removing a gift card from checkout'
|
|
91
|
+
route storefront_api.remove_gift_card_checkout_path(':order_id')
|
|
92
|
+
explanation <<-EOS
|
|
93
|
+
This endpoint removes a gift card from an order during the
|
|
94
|
+
checkout process.
|
|
95
|
+
EOS
|
|
63
96
|
|
|
64
|
-
|
|
65
|
-
params: {
|
|
66
|
-
product_id: product.id,
|
|
67
|
-
sku: product.skus.first,
|
|
68
|
-
quantity: 2
|
|
69
|
-
}
|
|
97
|
+
setup_checkout
|
|
70
98
|
|
|
71
|
-
patch storefront_api.
|
|
72
|
-
params: {
|
|
73
|
-
email: 'bcrouse@workarea.com',
|
|
74
|
-
billing_address: {
|
|
75
|
-
first_name: 'Ben',
|
|
76
|
-
last_name: 'Crouse',
|
|
77
|
-
street: '12 N. 3rd St.',
|
|
78
|
-
city: 'Philadelphia',
|
|
79
|
-
region: 'PA',
|
|
80
|
-
postal_code: '19106',
|
|
81
|
-
country: 'US',
|
|
82
|
-
phone_number: '2159251800'
|
|
83
|
-
},
|
|
84
|
-
shipping_address: {
|
|
85
|
-
first_name: 'Ben',
|
|
86
|
-
last_name: 'Crouse',
|
|
87
|
-
street: '22 S. 3rd St.',
|
|
88
|
-
city: 'Philadelphia',
|
|
89
|
-
region: 'PA',
|
|
90
|
-
postal_code: '19106',
|
|
91
|
-
country: 'US',
|
|
92
|
-
phone_number: '2159251800'
|
|
93
|
-
}
|
|
94
|
-
}
|
|
99
|
+
patch storefront_api.add_gift_card_checkout_path(@order),
|
|
100
|
+
params: { gift_card_number: @gift_card.token }
|
|
95
101
|
|
|
96
|
-
|
|
97
|
-
patch storefront_api.add_gift_card_checkout_path(order),
|
|
98
|
-
params: { gift_card_number: gift_card.token }
|
|
102
|
+
payment = Payment.find(@order.id)
|
|
99
103
|
|
|
104
|
+
record_request do
|
|
105
|
+
delete storefront_api.remove_gift_card_checkout_path(@order),
|
|
106
|
+
params: { gift_card_id: payment.gift_cards.first.id }
|
|
100
107
|
assert_equal(200, response.status)
|
|
101
108
|
end
|
|
102
109
|
end
|
|
@@ -14,7 +14,7 @@ module Workarea
|
|
|
14
14
|
|
|
15
15
|
def test_lists_gift_cards
|
|
16
16
|
gift_cards = [create_gift_card(to: 'test@email.com'), create_gift_card(to: 'foo@weblinc.com')]
|
|
17
|
-
get admin_api.
|
|
17
|
+
get admin_api.gift_cards_path
|
|
18
18
|
result = JSON.parse(response.body)['gift_cards']
|
|
19
19
|
|
|
20
20
|
assert_equal(3, result.length)
|
|
@@ -24,21 +24,21 @@ module Workarea
|
|
|
24
24
|
|
|
25
25
|
def test_creates_gift_cards
|
|
26
26
|
assert_difference 'Payment::GiftCard.count', 1 do
|
|
27
|
-
post admin_api.
|
|
27
|
+
post admin_api.gift_cards_path,
|
|
28
28
|
params: { gift_card: @sample_attributes.merge('to' => 'test@email.com').except('token') }
|
|
29
29
|
end
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
def test_shows_gift_cards
|
|
33
33
|
gift_card = create_gift_card(to: 'foo@weblinc.com')
|
|
34
|
-
get admin_api.
|
|
34
|
+
get admin_api.gift_card_path(gift_card.id)
|
|
35
35
|
result = JSON.parse(response.body)['gift_card']
|
|
36
36
|
assert_equal(gift_card, Payment::GiftCard.new(result))
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
def test_updates_gift_cards
|
|
40
40
|
gift_card = create_gift_card(to: 'foo@weblinc.com')
|
|
41
|
-
patch admin_api.
|
|
41
|
+
patch admin_api.gift_card_path(gift_card.id),
|
|
42
42
|
params: { gift_card: { to: 'bar@weblinc.com' } }
|
|
43
43
|
|
|
44
44
|
assert_equal('bar@weblinc.com', gift_card.reload.to)
|
|
@@ -47,7 +47,15 @@ module Workarea
|
|
|
47
47
|
def test_destroys_gift_cards
|
|
48
48
|
gift_card = create_gift_card(to: 'foo@weblinc.com')
|
|
49
49
|
assert_difference 'Payment::GiftCard.count', -1 do
|
|
50
|
-
delete admin_api.
|
|
50
|
+
delete admin_api.gift_card_path(gift_card.id)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def test_bulk_upserts_gift_cards
|
|
55
|
+
data = Array.new(10) { |i| @sample_attributes.merge('token' => "GC#{i}") }
|
|
56
|
+
|
|
57
|
+
assert_difference 'Payment::GiftCard.count', 10 do
|
|
58
|
+
patch admin_api.bulk_gift_cards_path, params: { gift_cards: data }
|
|
51
59
|
end
|
|
52
60
|
end
|
|
53
61
|
end
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
module Workarea
|
|
4
|
+
if Plugin.installed?(:api)
|
|
5
|
+
module Api
|
|
6
|
+
module Storefront
|
|
7
|
+
class CheckoutGiftCardsIntegrationTest < Workarea::IntegrationTest
|
|
8
|
+
setup :setup_checkout
|
|
9
|
+
|
|
10
|
+
def setup_checkout
|
|
11
|
+
create_tax_category(
|
|
12
|
+
name: 'Sales Tax',
|
|
13
|
+
code: '001',
|
|
14
|
+
rates: [{ percentage: 0.07, country: 'US', region: 'PA' }]
|
|
15
|
+
)
|
|
16
|
+
create_shipping_service(
|
|
17
|
+
name: 'Ground',
|
|
18
|
+
tax_code: '001',
|
|
19
|
+
rates: [{ price: 7.to_m }]
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
product = create_product(
|
|
23
|
+
name: 'Integration Product',
|
|
24
|
+
variants: [{ sku: 'SKU1', regular: 5.to_m, tax_code: '001' }]
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
post storefront_api.carts_path
|
|
28
|
+
@order_id = JSON.parse(response.body)['id']
|
|
29
|
+
|
|
30
|
+
post storefront_api.cart_items_path(@order_id),
|
|
31
|
+
params: {
|
|
32
|
+
product_id: product.id,
|
|
33
|
+
sku: product.skus.first,
|
|
34
|
+
quantity: 2
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
patch storefront_api.checkout_path(@order_id),
|
|
38
|
+
params: {
|
|
39
|
+
email: 'bcrouse@workarea.com',
|
|
40
|
+
billing_address: factory_defaults(:billing_address),
|
|
41
|
+
shipping_address: factory_defaults(:shipping_address)
|
|
42
|
+
}
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def test_paying_with_gift_card
|
|
46
|
+
card_one = create_gift_card(token: '123', amount: 10.to_m)
|
|
47
|
+
card_two = create_gift_card(token: '456', amount: 20.to_m)
|
|
48
|
+
|
|
49
|
+
patch storefront_api.add_gift_card_checkout_path(@order_id),
|
|
50
|
+
params: { gift_card_number: card_one.token }
|
|
51
|
+
|
|
52
|
+
order = Order.find(@order_id)
|
|
53
|
+
payment = Payment.find(order.id)
|
|
54
|
+
|
|
55
|
+
assert_equal(1, payment.gift_cards.count)
|
|
56
|
+
|
|
57
|
+
gift_card = payment.gift_cards.first
|
|
58
|
+
assert_equal(card_one.token, gift_card.number)
|
|
59
|
+
assert_equal(10.to_m, gift_card.amount)
|
|
60
|
+
|
|
61
|
+
patch storefront_api.add_gift_card_checkout_path(@order_id),
|
|
62
|
+
params: { gift_card_number: card_two.token }
|
|
63
|
+
|
|
64
|
+
payment.reload
|
|
65
|
+
|
|
66
|
+
assert_equal(2, payment.gift_cards.count)
|
|
67
|
+
|
|
68
|
+
gift_card = payment.gift_cards.last
|
|
69
|
+
assert_equal(card_two.token, gift_card.number)
|
|
70
|
+
assert_equal(8.19.to_m, gift_card.amount)
|
|
71
|
+
|
|
72
|
+
delete storefront_api.remove_gift_card_checkout_path(@order_id),
|
|
73
|
+
params: { gift_card_id: payment.gift_cards.first.id }
|
|
74
|
+
|
|
75
|
+
payment.reload
|
|
76
|
+
|
|
77
|
+
assert_equal(1, payment.gift_cards.count)
|
|
78
|
+
|
|
79
|
+
gift_card = payment.gift_cards.first
|
|
80
|
+
assert_equal(card_two.token, gift_card.number)
|
|
81
|
+
assert_equal(18.19.to_m, gift_card.amount)
|
|
82
|
+
|
|
83
|
+
post storefront_api.complete_checkout_path(@order_id)
|
|
84
|
+
assert(order.reload.placed?)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def test_reduces_balance_on_gift_card
|
|
88
|
+
pass && (return) unless Workarea::GiftCards.uses_system_cards?
|
|
89
|
+
|
|
90
|
+
gift_card = create_gift_card(amount: 5.to_m)
|
|
91
|
+
|
|
92
|
+
patch storefront_api.add_gift_card_checkout_path(@order_id),
|
|
93
|
+
params: { gift_card_number: gift_card.token }
|
|
94
|
+
|
|
95
|
+
post storefront_api.complete_checkout_path(@order_id),
|
|
96
|
+
params: {
|
|
97
|
+
payment: 'new_card',
|
|
98
|
+
credit_card: {
|
|
99
|
+
number: '1',
|
|
100
|
+
month: '1',
|
|
101
|
+
year: Time.now.year + 1,
|
|
102
|
+
cvv: '999'
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
gift_card.reload
|
|
107
|
+
assert_equal(0.to_m, gift_card.balance)
|
|
108
|
+
assert_equal(5.to_m, gift_card.amount)
|
|
109
|
+
assert_equal(5.to_m, gift_card.used)
|
|
110
|
+
|
|
111
|
+
order = Order.find(@order_id)
|
|
112
|
+
redemption = gift_card.redemptions.first
|
|
113
|
+
assert_equal(order.placed_at, redemption.redeemed_at)
|
|
114
|
+
assert_equal(5.to_m, redemption.amount)
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
@@ -4,7 +4,7 @@ module Workarea
|
|
|
4
4
|
if Plugin.installed?(:api)
|
|
5
5
|
module Api
|
|
6
6
|
module Storefront
|
|
7
|
-
class
|
|
7
|
+
class GiftCardsIntegrationTest < Workarea::IntegrationTest
|
|
8
8
|
def test_balance_lookup
|
|
9
9
|
gift_card = create_gift_card(
|
|
10
10
|
to: 'bcrouse@weblinc.com',
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
module Workarea
|
|
4
|
+
module Storefront
|
|
5
|
+
class CheckoutGiftCardsIntegrationTest < Workarea::IntegrationTest
|
|
6
|
+
setup :setup_checkout
|
|
7
|
+
|
|
8
|
+
def setup_checkout
|
|
9
|
+
create_tax_category(
|
|
10
|
+
name: 'Sales Tax',
|
|
11
|
+
code: '001',
|
|
12
|
+
rates: [{ percentage: 0.07, country: 'US', region: 'PA' }]
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
create_shipping_service(
|
|
16
|
+
name: 'Ground',
|
|
17
|
+
tax_code: '001',
|
|
18
|
+
rates: [{ price: 7.to_m }]
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
product = create_product(
|
|
22
|
+
name: 'Integration Product',
|
|
23
|
+
variants: [{ sku: 'SKU1', regular: 5.to_m, tax_code: '001' }]
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
post storefront.cart_items_path,
|
|
27
|
+
params: {
|
|
28
|
+
product_id: product.id,
|
|
29
|
+
sku: product.skus.first,
|
|
30
|
+
quantity: 2
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
patch storefront.checkout_addresses_path,
|
|
34
|
+
params: {
|
|
35
|
+
email: 'bcrouse@workarea.com',
|
|
36
|
+
shipping_address: factory_defaults(:shipping_address),
|
|
37
|
+
billing_address: factory_defaults(:billing_address)
|
|
38
|
+
}
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def test_paying_with_gift_cards
|
|
42
|
+
card_one = create_gift_card(token: '123', amount: 10.to_m)
|
|
43
|
+
card_two = create_gift_card(token: '456', amount: 20.to_m)
|
|
44
|
+
|
|
45
|
+
patch storefront.checkout_gift_cards_path,
|
|
46
|
+
params: { gift_card_number: '123' }
|
|
47
|
+
|
|
48
|
+
order = Order.first
|
|
49
|
+
payment = Payment.find(order.id)
|
|
50
|
+
|
|
51
|
+
assert_equal(1, payment.gift_cards.count)
|
|
52
|
+
|
|
53
|
+
gift_card = payment.gift_cards.first
|
|
54
|
+
assert_equal(card_one.token, gift_card.number)
|
|
55
|
+
assert_equal(10.to_m, gift_card.amount)
|
|
56
|
+
|
|
57
|
+
patch storefront.checkout_gift_cards_path,
|
|
58
|
+
params: { gift_card_number: '456' }
|
|
59
|
+
|
|
60
|
+
payment.reload
|
|
61
|
+
|
|
62
|
+
assert_equal(2, payment.gift_cards.count)
|
|
63
|
+
|
|
64
|
+
gift_card = payment.gift_cards.last
|
|
65
|
+
assert_equal(card_two.token, gift_card.number)
|
|
66
|
+
assert_equal(8.19.to_m, gift_card.amount)
|
|
67
|
+
|
|
68
|
+
delete storefront.checkout_gift_cards_path,
|
|
69
|
+
params: { gift_card_id: payment.gift_cards.first.id }
|
|
70
|
+
|
|
71
|
+
payment.reload
|
|
72
|
+
|
|
73
|
+
assert_equal(1, payment.gift_cards.count)
|
|
74
|
+
|
|
75
|
+
gift_card = payment.gift_cards.first
|
|
76
|
+
assert_equal(card_two.token, gift_card.number)
|
|
77
|
+
assert_equal(18.19.to_m, gift_card.amount)
|
|
78
|
+
|
|
79
|
+
patch storefront.checkout_place_order_path
|
|
80
|
+
assert_redirected_to(storefront.checkout_confirmation_path)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def test_reduces_balance_on_gift_card
|
|
84
|
+
pass && (return) unless Workarea::GiftCards.uses_system_cards?
|
|
85
|
+
|
|
86
|
+
gift_card = create_gift_card(token: '123', amount: 5.to_m)
|
|
87
|
+
|
|
88
|
+
patch storefront.checkout_gift_cards_path,
|
|
89
|
+
params: { gift_card_number: '123' }
|
|
90
|
+
|
|
91
|
+
patch storefront.checkout_place_order_path,
|
|
92
|
+
params: {
|
|
93
|
+
payment: 'new_card',
|
|
94
|
+
credit_card: {
|
|
95
|
+
number: '1',
|
|
96
|
+
month: 1,
|
|
97
|
+
year: next_year,
|
|
98
|
+
cvv: '999'
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
assert_redirected_to(storefront.checkout_confirmation_path)
|
|
103
|
+
|
|
104
|
+
gift_card.reload
|
|
105
|
+
assert_equal(0.to_m, gift_card.balance)
|
|
106
|
+
assert_equal(5.to_m, gift_card.amount)
|
|
107
|
+
assert_equal(5.to_m, gift_card.used)
|
|
108
|
+
|
|
109
|
+
order = Order.first
|
|
110
|
+
redemption = gift_card.redemptions.first
|
|
111
|
+
assert_equal(order.placed_at, redemption.redeemed_at)
|
|
112
|
+
assert_equal(5.to_m, redemption.amount)
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|