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.
Files changed (76) hide show
  1. checksums.yaml +5 -5
  2. data/{.eslintrc → .eslintrc.json} +12 -1
  3. data/.github/workflows/ci.yml +10 -8
  4. data/.rubocop.yml +2 -197
  5. data/.stylelintrc.json +8 -0
  6. data/CHANGELOG.md +40 -20
  7. data/Gemfile +3 -5
  8. data/README.md +25 -1
  9. data/app/controllers/workarea/api/admin/gift_cards_controller.rb +309 -0
  10. data/app/controllers/workarea/api/storefront/checkouts_controller.decorator +6 -0
  11. data/app/controllers/workarea/api/storefront/gift_cards_controller.rb +2 -8
  12. data/app/controllers/workarea/storefront/checkout/gift_cards_controller.rb +32 -0
  13. data/app/controllers/workarea/storefront/gift_cards_controller.rb +15 -16
  14. data/app/models/workarea/checkout/steps/gift_card.rb +72 -0
  15. data/app/models/workarea/fulfillment/policies/create_gift_card.rb +30 -0
  16. data/app/models/workarea/payment.decorator +25 -7
  17. data/app/models/workarea/payment/authorize/gift_card.rb +7 -20
  18. data/app/models/workarea/payment/capture/gift_card.rb +5 -7
  19. data/app/models/workarea/payment/gift_card.rb +1 -1
  20. data/app/models/workarea/payment/gift_card_operation.rb +9 -0
  21. data/app/models/workarea/payment/purchase/gift_card.rb +24 -1
  22. data/app/models/workarea/payment/refund/gift_card.rb +9 -14
  23. data/app/models/workarea/payment/tender/gift_card.rb +3 -10
  24. data/app/models/workarea/search/admin/order.decorator +2 -4
  25. data/app/seeds/workarea/gift_card_seeds.rb +7 -7
  26. data/app/view_models/workarea/storefront/gift_card_order_pricing.rb +19 -20
  27. data/app/view_models/workarea/storefront/order_view_model.decorator +2 -22
  28. data/app/views/workarea/admin/payment_gift_cards/_menu.html.haml +2 -1
  29. data/app/views/workarea/storefront/checkouts/_gift_card_error.html.haml +8 -6
  30. data/app/views/workarea/storefront/checkouts/_gift_card_payment.html.haml +20 -12
  31. data/app/views/workarea/storefront/gift_card_mailer/created.html.haml +1 -1
  32. data/app/views/workarea/storefront/order_mailer/_gift_card_summary.html.haml +6 -5
  33. data/app/views/workarea/storefront/orders/_gift_card_summary.html.haml +2 -2
  34. data/app/views/workarea/storefront/products/templates/_gift_card.html.haml +5 -5
  35. data/app/workers/workarea/log_gift_card_redemption.rb +16 -9
  36. data/config/initializers/configuration.rb +7 -4
  37. data/config/initializers/fields.rb +14 -0
  38. data/config/locales/en.yml +14 -4
  39. data/config/routes.rb +9 -2
  40. data/lib/workarea/gift_cards.rb +9 -0
  41. data/lib/workarea/gift_cards/gateway.rb +128 -0
  42. data/lib/workarea/gift_cards/version.rb +1 -1
  43. data/test/documentation/workarea/api/admin/gift_cards_documentation_test.rb +24 -10
  44. data/test/documentation/workarea/api/storefront/gift_cards_documentation_test.rb +57 -50
  45. data/test/dummy/config/initializers/session_store.rb +1 -1
  46. data/test/integration/workarea/api/admin/gift_card_integration_test.rb +13 -5
  47. data/test/integration/workarea/api/storefront/checkout_gift_cards_integration_test.rb +120 -0
  48. data/test/integration/workarea/api/storefront/{balance_integration_test.rb → gift_cards_integration_test.rb} +1 -1
  49. data/test/integration/workarea/storefront/checkout_gift_cards_integration_test.rb +116 -0
  50. data/test/integration/workarea/storefront/gift_cards_integration_test.rb +48 -0
  51. data/test/integration/workarea/storefront/purchase_gift_cards_integration_test.rb +55 -0
  52. data/test/lib/workarea/gift_cards/gateway_test.rb +131 -0
  53. data/test/models/workarea/checkout/steps/gift_card_test.rb +104 -0
  54. data/test/models/workarea/fulfillment/policies/create_gift_card_test.rb +47 -0
  55. data/test/models/workarea/gift_card_payment_test.rb +15 -3
  56. data/test/models/workarea/payment/purchase/gift_card_test.rb +11 -8
  57. data/test/queries/workarea/admin_redemptions_export_test.rb +31 -35
  58. data/test/system/workarea/storefront/gift_cards_system_test.rb +8 -2
  59. data/test/view_models/workarea/storefront/gift_card_order_pricing_test.rb +113 -0
  60. data/test/workers/workarea/log_gift_card_redemption_test.rb +1 -1
  61. data/workarea-gift_cards.gemspec +4 -4
  62. metadata +32 -25
  63. data/.eslintignore +0 -2
  64. data/.scss-lint.yml +0 -188
  65. data/app/controllers/workarea/api/admin/payment_gift_cards_controller.rb +0 -49
  66. data/app/controllers/workarea/storefront/checkouts_controller.decorator +0 -24
  67. data/app/services/workarea/checkout/steps/gift_card.rb +0 -49
  68. data/app/view_models/workarea/storefront/checkout/payment_view_model.decorator +0 -32
  69. data/app/view_models/workarea/storefront/checkout/summary_view_model.decorator +0 -11
  70. data/app/workers/workarea/create_ordered_gift_cards.rb +0 -47
  71. data/config/initializers/jump_to_navigation.rb +0 -3
  72. data/test/integration/workarea/api/storefront/checkout_integration_test.rb +0 -161
  73. data/test/integration/workarea/storefront/gift_card_integration_test.rb +0 -226
  74. data/test/services/workarea/checkout/steps/gift_card_test.rb +0 -87
  75. data/test/view_models/workarea/storefront/checkout/gift_card_payment_view_model_test.rb +0 -65
  76. data/test/workers/workarea/create_ordered_gift_cards_test.rb +0 -39
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: e5ce7f4c60c63f9f96b8683527e9fbbbf375af62
4
- data.tar.gz: b93a65061af79af2a91e2fd0449a687a3b8f5250
2
+ SHA256:
3
+ metadata.gz: 4640c0b94ade3085580304d3a0220f85cb73a570d93e3a7c945081a1bda0a72f
4
+ data.tar.gz: bcab8a176b67c59e809a89d0b459d3f01dd123d91e05b6aab8f51f3ea13766cd
5
5
  SHA512:
6
- metadata.gz: 2eddb8f458fb6ffe22ccb1e476557639de20a89d83d959e9956b420063e58bf32d9293308bf03eb176bd28e4d05df37ef0e3e8e4393ea8e971ccd4c48e3392b9
7
- data.tar.gz: 2cc8d19326e64c599e56e2e0ee172803b46887d17ce673fe3d29995a24fc33d3a3210a5036ecf41c1236d35e570085c5376da16e7a3bb04c57a67689ccd3b5b5
6
+ metadata.gz: 4f8f96a3442cabeb3cc94aef6fd542b6a77d0c792947cf795edade12f36f6e67ca1ef743632415a2d4d689990e2f70eeefa8a4b28024699f44658851eeb2e18f
7
+ data.tar.gz: 800f842ad499e8adac230b8fabc356ad890d82c38f8269f449baf2e0f5082740e092df674c14c43c3c2b4a038bad49a9b4e7d13897aab24415668232285c5743
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "extends": "eslint:recommended",
3
3
  "rules": {
4
- "semi": [1, "always"]
4
+ "semi": ["error", "always"],
5
+ "eqeqeq": ["error", "always"]
5
6
  },
6
7
  "globals": {
7
8
  "window": true,
@@ -20,5 +21,15 @@
20
21
  "Waypoint": true,
21
22
  "wysihtml": true,
22
23
  "LocalTime": true,
24
+ "describe": true,
25
+ "after": true,
26
+ "afterEach": true,
27
+ "before": true,
28
+ "beforeEach": true,
29
+ "it": true,
30
+ "expect": true,
31
+ "sinon": true,
32
+ "fixture": true,
33
+ "chai": true
23
34
  }
24
35
  }
@@ -1,14 +1,16 @@
1
1
  name: CI
2
2
  on: [push]
3
- env:
4
- BUNDLE_GEMS__WEBLINC__COM: ${{ secrets.BUNDLE_GEMS__WEBLINC__COM }}
3
+
5
4
  jobs:
6
5
  static_analysis:
7
6
  runs-on: ubuntu-latest
8
7
  steps:
9
8
  - uses: actions/checkout@v1
10
- - uses: workarea-commerce/ci/bundler-audit@ruby-2.4
11
- - uses: workarea-commerce/ci/rubocop@ruby-2.4
9
+ - uses: workarea-commerce/ci/bundler-audit@v1
10
+ - uses: workarea-commerce/ci/rubocop@v1
11
+ - uses: workarea-commerce/ci/eslint@v1
12
+ with:
13
+ args: '**/*.js'
12
14
 
13
15
  admin_tests:
14
16
  runs-on: ubuntu-latest
@@ -16,7 +18,7 @@ jobs:
16
18
  - uses: actions/checkout@v1
17
19
  - uses: actions/setup-ruby@v1
18
20
  with:
19
- ruby-version: 2.4.x
21
+ ruby-version: 2.6.x
20
22
  - uses: workarea-commerce/ci/test@v1
21
23
  with:
22
24
  command: bin/rails app:workarea:test:admin
@@ -27,7 +29,7 @@ jobs:
27
29
  - uses: actions/checkout@v1
28
30
  - uses: actions/setup-ruby@v1
29
31
  with:
30
- ruby-version: 2.4.x
32
+ ruby-version: 2.6.x
31
33
  - uses: workarea-commerce/ci/test@v1
32
34
  with:
33
35
  command: bin/rails app:workarea:test:core
@@ -38,7 +40,7 @@ jobs:
38
40
  - uses: actions/checkout@v1
39
41
  - uses: actions/setup-ruby@v1
40
42
  with:
41
- ruby-version: 2.4.x
43
+ ruby-version: 2.6.x
42
44
  - uses: workarea-commerce/ci/test@v1
43
45
  with:
44
46
  command: bin/rails app:workarea:test:storefront
@@ -49,7 +51,7 @@ jobs:
49
51
  - uses: actions/checkout@v1
50
52
  - uses: actions/setup-ruby@v1
51
53
  with:
52
- ruby-version: 2.4.x
54
+ ruby-version: 2.6.x
53
55
  - uses: workarea-commerce/ci/test@v1
54
56
  with:
55
57
  command: bin/rails app:workarea:test:plugins
@@ -1,197 +1,2 @@
1
- AllCops:
2
- TargetRubyVersion: 2.4
3
- # RuboCop has a bunch of cops enabled by default. This setting tells RuboCop
4
- # to ignore them, so only the ones explicitly set in this file are enabled.
5
- DisabledByDefault: true
6
-
7
- # Prefer &&/|| over and/or.
8
- Style/AndOr:
9
- Enabled: true
10
- Exclude:
11
- - 'testing/lib/workarea/performance_test.rb'
12
- - 'admin/app/controllers/workarea/admin/help_authorization.rb'
13
- - 'admin/app/controllers/workarea/admin/users_controller.rb'
14
- - 'core/app/controllers/workarea/authorization.rb'
15
- - 'core/app/models/workarea/analytics/time_series.rb'
16
- - 'core/app/models/workarea/payment/operation.rb'
17
- - 'core/lib/workarea/validators/ip_address_validator.rb'
18
- - 'script/rename'
19
- - 'storefront/app/controllers/workarea/storefront/checkout/place_order_controller.rb'
20
- - 'storefront/app/controllers/workarea/storefront/current_checkout.rb'
21
- - 'storefront/app/controllers/workarea/storefront/searches_controller.rb'
22
- - 'storefront/app/controllers/workarea/storefront/users/orders_controller.rb'
23
- - 'storefront/app/controllers/workarea/storefront/users/passwords_controller.rb'
24
-
25
- # Align `when` with `case`.
26
- Layout/CaseIndentation:
27
- Enabled: true
28
- Exclude:
29
- - 'admin/app/helpers/workarea/admin/dashboard_helper.rb'
30
-
31
- # Align comments with method definitions.
32
- Layout/CommentIndentation:
33
- Enabled: true
34
-
35
- Layout/EmptyLineAfterMagicComment:
36
- Enabled: true
37
-
38
- # In a regular class definition, no empty lines around the body.
39
- Layout/EmptyLinesAroundClassBody:
40
- Enabled: true
41
- Exclude:
42
- - 'admin/app/controllers/workarea/admin/release_sessions_controller.rb'
43
- - 'admin/app/view_models/workarea/admin/release_calendar_view_model.rb'
44
- - 'admin/lib/workarea/mailer_previews/admin/comment_mailer_preview.rb'
45
- - 'admin/test/integration/workarea/admin/content_blocks_integration_test.rb'
46
- - 'admin/test/view_models/workarea/admin/content_view_model_test.rb'
47
- - 'core/app/models/workarea/checkout/steps/addresses.rb'
48
- - 'core/app/models/workarea/pricing/discount/buy_some_get_some/product_application.rb'
49
- - 'core/app/queries/workarea/metadata/catalog_category.rb'
50
- - 'core/app/queries/workarea/metadata/content_page.rb'
51
- - 'core/app/queries/workarea/search/facet.rb'
52
- - 'core/app/queries/workarea/search/range_filter.rb'
53
- - 'core/config/initializers/13_rack_attack.rb'
54
- - 'core/lib/generators/workarea/override/override_generator.rb'
55
- - 'core/lib/workarea/elasticsearch/query_cache.rb'
56
- - 'core/lib/workarea/monitoring/elasticsearch_check.rb'
57
- - 'core/lib/workarea/monitoring/mongoid_check.rb'
58
- - 'core/lib/workarea/monitoring/sidekiq_queue_size_check.rb'
59
- - 'core/lib/workarea/validators/email_validator.rb'
60
- - 'core/test/lib/workarea/mail_interceptor_test.rb'
61
- - 'core/test/models/workarea/commentable_test.rb'
62
- - 'core/test/models/workarea/search/settings_test.rb'
63
- - 'core/test/models/workarea/shipping/rate_lookup_test.rb'
64
- - 'core/test/queries/workarea/find_pipeline_asset_test.rb'
65
- - 'core/test/queries/workarea/product_primary_image_url_test.rb'
66
- - 'core/test/queries/workarea/search/filter_test.rb'
67
- - 'core/test/workers/workarea/bulk_index_admin_test.rb'
68
- - 'core/test/workers/workarea/bulk_index_products_test.rb'
69
- - 'core/vendor/active_shipping/lib/active_shipping/carriers/australia_post.rb'
70
- - 'core/vendor/active_shipping/lib/active_shipping/carriers/canada_post_pws.rb'
71
- - 'core/vendor/active_shipping/lib/active_shipping/carriers/usps_returns.rb'
72
- - 'core/vendor/active_shipping/lib/active_shipping/delivery_date_estimates_response.rb'
73
- - 'core/vendor/active_shipping/lib/active_shipping/rate_response.rb'
74
- - 'core/vendor/active_shipping/test/remote/australia_post_test.rb'
75
- - 'core/vendor/active_shipping/test/remote/usps_returns_test.rb'
76
- - 'core/vendor/active_shipping/test/unit/carriers/australia_post_test.rb'
77
- - 'core/vendor/active_shipping/test/unit/carriers/canada_post_pws_test.rb'
78
- - 'core/vendor/active_shipping/test/unit/carriers/usps_returns_test.rb'
79
- - 'storefront/app/view_models/workarea/storefront/content_blocks/product_list_view_model.rb'
80
- - 'storefront/app/view_models/workarea/storefront/product_view_model.rb'
81
- - 'storefront/lib/workarea/mailer_previews/storefront/order_mailer_preview.rb'
82
- - 'storefront/test/performance/workarea/storefront/categories_performance_test.rb'
83
- - 'storefront/test/performance/workarea/storefront/search_performance_test.rb'
84
- - 'storefront/test/view_models/workarea/storefront/user_activity_view_model_test.rb'
85
-
86
- # In a regular method definition, no empty lines around the body.
87
- Layout/EmptyLinesAroundMethodBody:
88
- Enabled: true
89
-
90
- # In a regular module definition, no empty lines around the body.
91
- Layout/EmptyLinesAroundModuleBody:
92
- Enabled: true
93
- Exclude:
94
- - 'core/lib/workarea/ext/mongoid/timestamps_timeless.rb'
95
- - 'storefront/app/view_models/workarea/storefront/search_customization_content.rb'
96
- - 'testing/lib/workarea/testing/warning_suppressor.rb'
97
-
98
- # Use Ruby >= 1.9 syntax for hashes. Prefer { a: :b } over { :a => :b }.
99
- Style/HashSyntax:
100
- Enabled: true
101
-
102
- Layout/SpaceAfterColon:
103
- Enabled: true
104
- Exclude:
105
- - 'testing/lib/workarea/testing/factories/content.rb'
106
- - 'testing/lib/workarea/testing/factories/pricing.rb'
107
-
108
- Layout/SpaceAfterComma:
109
- Enabled: true
110
- Exclude:
111
- - 'admin/app/controllers/workarea/admin/shipping_services_controller.rb'
112
- - 'admin/test/helpers/workarea/admin/application_helper_test.rb'
113
- - 'core/app/models/workarea/payment/credit_card.rb'
114
- - 'core/app/models/workarea/pricing/request.rb'
115
- - 'core/spec/lib/workarea/swappable_list_spec.rb'
116
- - 'core/test/models/workarea/inventory_test.rb'
117
- - 'core/test/queries/workarea/search/range_facet_test.rb'
118
- - 'storefront/test/view_models/workarea/storefront/package_view_model_test.rb'
119
-
120
- Layout/SpaceAroundEqualsInParameterDefault:
121
- Enabled: true
122
- Exclude:
123
- - 'admin/app/helpers/workarea/admin/content_block_icon_helper.rb'
124
- - 'core/app/helpers/workarea/content_assets_helper.rb'
125
- - 'core/lib/workarea/elasticsearch/query_cache.rb'
126
- - 'testing/lib/workarea/system_test.rb'
127
- - 'testing/lib/workarea/testing/locale_routing_fixes.rb'
128
-
129
-
130
- Layout/SpaceAroundKeyword:
131
- Enabled: true
132
-
133
- Layout/SpaceAroundOperators:
134
- Enabled: true
135
- Exclude:
136
- - 'admin/app/controllers/workarea/admin/content_emails_controller.rb'
137
- - 'admin/app/controllers/workarea/admin/users_controller.rb'
138
- - 'core/app/helpers/workarea/content_assets_helper.rb'
139
- - 'core/vendor/active_shipping/lib/active_shipping/carriers/canada_post_pws.rb'
140
- - 'core/vendor/active_shipping/lib/active_shipping/carriers/fedex.rb'
141
- - 'core/vendor/active_shipping/lib/active_shipping/carriers/stamps.rb'
142
-
143
- Layout/SpaceBeforeFirstArg:
144
- Enabled: true
145
-
146
- # Defining a method with parameters needs parentheses.
147
- Style/MethodDefParentheses:
148
- Enabled: true
149
-
150
- # Use `foo {}` not `foo{}`.
151
- Layout/SpaceBeforeBlockBraces:
152
- Enabled: true
153
- Exclude:
154
- - 'admin/app/view_models/workarea/admin/release_calendar_view_model.rb'
155
-
156
- # Use `foo { bar }` not `foo {bar}`.
157
- Layout/SpaceInsideBlockBraces:
158
- Enabled: true
159
-
160
- # Use `{ a: 1 }` not `{a:1}`.
161
- Layout/SpaceInsideHashLiteralBraces:
162
- Enabled: true
163
- Exclude:
164
- - 'admin/test/integration/workarea/admin/pricing_sku_prices_integration_test.rb'
165
- - 'admin/test/integration/workarea/admin/shipping_service_integration_test.rb'
166
- - 'admin/test/integration/workarea/admin/tax_categories_integration_test.rb'
167
- - 'admin/test/view_models/workarea/admin/changeset_view_model_test.rb'
168
- - 'core/app/models/workarea/release/changeset.rb'
169
- - 'core/app/queries/workarea/search/product_rules.rb'
170
- - 'core/app/queries/workarea/search/term_filter.rb'
171
- - 'core/lib/workarea/configuration.rb'
172
- - 'core/spec/models/workarea/order_spec.rb'
173
- - 'core/test/models/workarea/application_document_test.rb'
174
- - 'core/test/models/workarea/fulfillment_test.rb'
175
- - 'core/test/queries/workarea/search/product_rules_test.rb'
176
- - 'core/test/workers/workarea/generate_content_metadata_test.rb'
177
-
178
- Layout/SpaceInsideParens:
179
- Enabled: true
180
- Exclude:
181
- - 'core/app/models/workarea/inventory/collection.rb'
182
- - 'core/app/models/workarea/pricing/calculators/item_calculator.rb'
183
- - 'core/spec/models/workarea/order/queries_spec.rb'
184
-
185
- # Detect hard tabs, no hard tabs.
186
- Layout/Tab:
187
- Enabled: true
188
- Exclude:
189
- - 'core/vendor/active_shipping/lib/active_shipping/carriers/canada_post.rb'
190
-
191
- # No trailing whitespace.
192
- Layout/TrailingWhitespace:
193
- Enabled: true
194
-
195
- # Use my_method(my_arg) not my_method( my_arg ) or my_method my_arg.
196
- Lint/RequireParentheses:
197
- Enabled: true
1
+ inherit_from:
2
+ - https://raw.githubusercontent.com/workarea-commerce/workarea/master/.rubocop.yml
@@ -0,0 +1,8 @@
1
+ {
2
+ "extends": "stylelint-config-recommended-scss",
3
+ "rules": {
4
+ "block-no-empty": null,
5
+ "no-descending-specificity": null,
6
+ "property-no-unknown": [true, { "ignoreProperties": ["mso-hide"] }]
7
+ }
8
+ }
@@ -1,41 +1,44 @@
1
- Workarea Gift Cards 3.4.10 (2020-02-04)
1
+ Workarea Gift Cards 4.0.3 (2020-08-19)
2
2
  --------------------------------------------------------------------------------
3
3
 
4
- * Fix the Gemfile
4
+ * Fix Update Step Result
5
5
 
6
- Tom Scott
7
-
8
- * Remove ESLint from Gift Cards build
6
+ Prevent returning `false` early when no Gift Card params are set. This
7
+ ensures the step won't block checkout.
9
8
 
10
9
  Tom Scott
11
10
 
12
- * Fix rubocop config for 2.4
11
+ * Improve Test Experience For Custom Gift Card Gateways
13
12
 
14
- Tom Scott
13
+ If you're creating a new custom gift card gateway for your project, and
14
+ you want to use the tests from base as a starting point for that
15
+ integration, you currently must duplicate the tests from the plugin in
16
+ your own plugin, which makes things a bit harder but also removes the
17
+ ability to take on updates to the test in case of bug fixes. To improve
18
+ this experience, the `Workarea::GiftCards::GatewayTest` has been
19
+ modified to more easily allow decorating it in a host application. All
20
+ tests are now wrapped in a VCR cassette whose name is defined by the
21
+ parameterized gateway class name and the name of the method being
22
+ tested. This will activate and create cassettes in the real world when a
23
+ gateway makes an outbound HTTP call, similar to
24
+ `CreditCardIntegrationTest`.
15
25
 
16
- * Use the same ruby version on static analysis as we use in tests
26
+ GIFTCARDS-9
17
27
 
18
28
  Tom Scott
19
29
 
20
- * Use the same env var everywhere
21
30
 
22
- Tom Scott
23
31
 
24
- * Backport Missing `:via` Param
32
+ Workarea Gift Cards 4.0.2 (2020-03-03)
33
+ --------------------------------------------------------------------------------
25
34
 
26
- The `:via` param was not included on the gift card template, causing a
27
- test in base to fail and subsequently block other plugin development
28
- that depends on this gem. This change is from a later version of
29
- Workarea, but was not backported to earlier versions. Additionally, this
30
- commit adds the test workflow and ensures the correct version of
31
- Workarea is being loaded to ensure accurate testing.
35
+ * Fix misaligned test class name
32
36
 
33
- GIFTCARDS-7
34
- Tom Scott
37
+ Ben Crouse
35
38
 
36
39
 
37
40
 
38
- Workarea Gift Cards 3.4.9 (2020-01-21)
41
+ Workarea Gift Cards 4.0.1 (2020-01-21)
39
42
  --------------------------------------------------------------------------------
40
43
 
41
44
  * Fix Tests for 2020
@@ -46,6 +49,23 @@ Workarea Gift Cards 3.4.9 (2020-01-21)
46
49
  GIFTCARDS-6
47
50
  Tom Scott
48
51
 
52
+ * Fix Tests for 2020
53
+
54
+ Update all tests so that they no longer depend on the year 2020 as an
55
+ expiration year. Instead, use the method provided by Workarea.
56
+
57
+ GIFTCARDS-6
58
+ Tom Scott
59
+
60
+
61
+
62
+ Workarea Gift Cards 4.0.0 (2019-11-26)
63
+ --------------------------------------------------------------------------------
64
+
65
+ * Use custom fulfillment policy for digital gift card generation
66
+
67
+ Curt Howard
68
+
49
69
 
50
70
 
51
71
  Workarea Gift Cards 3.4.7 (2019-09-04)
data/Gemfile CHANGED
@@ -1,9 +1,7 @@
1
1
  source 'https://rubygems.org'
2
- git_source(:github) { |repo| "git@github.com:#{repo}.git" }
2
+ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
3
3
 
4
4
  gemspec
5
5
 
6
- source 'https://gems.weblinc.com' do
7
- gem 'workarea', '~> 3.3.0'
8
- gem 'workarea-api', '~> 4.3.0'
9
- end
6
+ gem 'workarea-api', github: 'workarea-commerce/workarea-api'
7
+ gem 'workarea', github: 'workarea-commerce/workarea', branch: 'v3.5-stable'
data/README.md CHANGED
@@ -107,11 +107,35 @@ end
107
107
 
108
108
  Note that it is set to a string of the class constant, and not an instance of the class. The system constantizes and initializes a new instance whenever it uses the gateway to ensure autoloading works correctly and so a gateway that cares about the current state of the application is applied correctly. This is most relevant in multi-site environments where each site might want to use their own gift card gateway.
109
109
 
110
+ ### Testing Your Custom Gateway
111
+
112
+ Workarea comes with unit tests for the main Gateway class, and you can
113
+ decorate this test to provide your own setup code. A minimal
114
+ implementation would look as follows:
115
+
116
+ ```ruby
117
+ module Workarea
118
+ module GiftCards
119
+ decorate GatewayTest do
120
+ # Provide your own Gateway instance here to use it in each test.
121
+ def gateway
122
+ CustomGiftCardGateway.new
123
+ end
124
+
125
+ # Provide a custom object representing a Gift Card on your
126
+ # 3rd-party service.
127
+ def gift_card
128
+ CustomGiftCard.new(balance: 10.to_m)
129
+ end
130
+ end
131
+ end
132
+ end
133
+ ```
110
134
 
111
135
  Workarea Commerce Documentation
112
136
  --------------------------------------------------------------------------------
113
137
 
114
- See [https://developer.workarea.com](https://developer.workarea.com) for Workarea Commerce documentation.
138
+ See [https://developer.workarea.com](https://developer.workarea.com) for Workarea Commerce documentation
115
139
 
116
140
  License
117
141
  --------------------------------------------------------------------------------
@@ -0,0 +1,309 @@
1
+ module Workarea
2
+ if Plugin.installed?(:api)
3
+ module Api
4
+ module Admin
5
+ class GiftCardsController < Admin::ApplicationController
6
+ before_action :find_gift_card, except: [:index, :create, :bulk]
7
+
8
+ swagger_path '/gift_cards' do
9
+ operation :get do
10
+ key :summary, 'All Gift cards'
11
+ key :description, 'Returns all gift cards from the system'
12
+ key :operationId, 'listGiftCards'
13
+ key :produces, ['application/json']
14
+
15
+ parameter do
16
+ key :name, :page
17
+ key :in, :query
18
+ key :description, 'Current page'
19
+ key :required, false
20
+ key :type, :integer
21
+ key :default, 1
22
+ end
23
+ parameter do
24
+ key :name, :sort_by
25
+ key :in, :query
26
+ key :description, 'Field on which to sort (see responses for possible values)'
27
+ key :required, false
28
+ key :type, :string
29
+ key :default, 'created_at'
30
+ end
31
+ parameter do
32
+ key :name, :sort_direction
33
+ key :in, :query
34
+ key :description, 'Direction for sort by'
35
+ key :type, :string
36
+ key :enum, %w(asc desc)
37
+ key :default, 'desc'
38
+ end
39
+
40
+ response 200 do
41
+ key :description, 'Gift cards'
42
+ schema do
43
+ key :type, :object
44
+ property :gift_cards do
45
+ key :type, :array
46
+ items do
47
+ key :'$ref', 'Workarea::Payment::GiftCard'
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ operation :post do
55
+ key :summary, 'Create GiftCard'
56
+ key :description, 'Creates a new gift_card.'
57
+ key :operationId, 'addGiftCard'
58
+ key :produces, ['application/json']
59
+
60
+ parameter do
61
+ key :name, :body
62
+ key :in, :body
63
+ key :description, 'GiftCard to add'
64
+ key :required, true
65
+ schema do
66
+ key :type, :object
67
+ property :gift_card do
68
+ key :'$ref', 'Workarea::Payment::GiftCard'
69
+ end
70
+ end
71
+ end
72
+
73
+ response 201 do
74
+ key :description, 'Gift card created'
75
+ schema do
76
+ key :type, :object
77
+ property :gift_card do
78
+ key :'$ref', 'Workarea::Payment::GiftCard'
79
+ end
80
+ end
81
+ end
82
+
83
+ response 422 do
84
+ key :description, 'Validation failure'
85
+ schema do
86
+ key :type, :object
87
+ property :problem do
88
+ key :type, :string
89
+ end
90
+ property :document do
91
+ key :'$ref', 'Workarea::Payment::GiftCard'
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
97
+
98
+ def index
99
+ @gift_cards = Payment::GiftCard
100
+ .all
101
+ .order_by(sort_field => sort_direction)
102
+ .page(params[:page])
103
+
104
+ respond_with gift_cards: @gift_cards
105
+ end
106
+
107
+ def create
108
+ @gift_card = Payment::GiftCard.create!(params[:gift_card])
109
+ respond_with(
110
+ { gift_card: @gift_card },
111
+ {
112
+ status: :created,
113
+ location: gift_card_path(@gift_card)
114
+ }
115
+ )
116
+ end
117
+
118
+ swagger_path '/gift_cards/{id}' do
119
+ operation :get do
120
+ key :summary, 'Find Gift card by ID'
121
+ key :description, 'Returns a single gift card'
122
+ key :operationId, 'showGiftCard'
123
+
124
+ parameter do
125
+ key :name, :id
126
+ key :in, :path
127
+ key :description, 'ID of gift card to fetch'
128
+ key :required, true
129
+ key :type, :string
130
+ end
131
+
132
+ response 200 do
133
+ key :description, 'Gift card details'
134
+ schema do
135
+ key :type, :object
136
+ property :gift_card do
137
+ key :'$ref', 'Workarea::Payment::GiftCard'
138
+ end
139
+ end
140
+ end
141
+
142
+ response 404 do
143
+ key :description, 'Gift card not found'
144
+ schema do
145
+ key :type, :object
146
+ property :problem do
147
+ key :type, :string
148
+ end
149
+ property :params do
150
+ key :type, :object
151
+ key :additionalProperties, true
152
+ end
153
+ end
154
+ end
155
+ end
156
+
157
+ operation :patch do
158
+ key :summary, 'Update a GiftCard'
159
+ key :description, 'Updates attributes on a gift card'
160
+ key :operationId, 'updateGiftCard'
161
+
162
+ parameter do
163
+ key :name, :id
164
+ key :in, :path
165
+ key :description, 'ID of gift card to update'
166
+ key :required, true
167
+ key :type, :string
168
+ end
169
+
170
+ parameter do
171
+ key :name, :body
172
+ key :in, :body
173
+ key :required, true
174
+ schema do
175
+ key :type, :object
176
+ property :gift_card do
177
+ key :description, 'New attributes'
178
+ key :'$ref', 'Workarea::Payment::GiftCard'
179
+ end
180
+ end
181
+ end
182
+
183
+ response 204 do
184
+ key :description, 'Gift card updated successfully'
185
+ end
186
+
187
+ response 422 do
188
+ key :description, 'Validation failure'
189
+ schema do
190
+ key :type, :object
191
+ property :problem do
192
+ key :type, :string
193
+ end
194
+ property :document do
195
+ key :'$ref', 'Workarea::Payment::GiftCard'
196
+ end
197
+ end
198
+ end
199
+
200
+ response 404 do
201
+ key :description, 'Gift card not found'
202
+ schema do
203
+ key :type, :object
204
+ property :problem do
205
+ key :type, :string
206
+ end
207
+ property :params do
208
+ key :type, :object
209
+ key :additionalProperties, true
210
+ end
211
+ end
212
+ end
213
+ end
214
+
215
+ operation :delete do
216
+ key :summary, 'Remove a Gift card'
217
+ key :description, 'Remove a gift card'
218
+ key :operationId, 'removeGiftCard'
219
+
220
+ parameter do
221
+ key :name, :id
222
+ key :in, :path
223
+ key :description, 'ID of gift card to remove'
224
+ key :required, true
225
+ key :type, :string
226
+ end
227
+
228
+ response 204 do
229
+ key :description, 'Gift card removed successfully'
230
+ end
231
+
232
+ response 404 do
233
+ key :description, 'Gift card not found'
234
+ schema do
235
+ key :type, :object
236
+ property :problem do
237
+ key :type, :string
238
+ end
239
+ property :params do
240
+ key :type, :object
241
+ key :additionalProperties, true
242
+ end
243
+ end
244
+ end
245
+ end
246
+ end
247
+
248
+ def show
249
+ respond_with gift_card: @gift_card
250
+ end
251
+
252
+ def update
253
+ @gift_card.update_attributes!(params[:gift_card])
254
+ respond_with gift_card: @gift_card
255
+ end
256
+
257
+ def destroy
258
+ @gift_card.destroy
259
+ head :no_content
260
+ end
261
+
262
+ swagger_path '/gift_cards/bulk' do
263
+ operation :patch do
264
+ key :summary, 'Bulk Upsert Gift cards'
265
+ key :description, 'Creates new gift cards or updates existing ones in bulk.'
266
+ key :operationId, 'upsertGiftCards'
267
+ key :produces, ['application/json']
268
+
269
+ parameter do
270
+ key :name, :body
271
+ key :in, :body
272
+ key :description, 'Array of gift cards to upsert'
273
+ key :required, true
274
+ schema do
275
+ key :type, :object
276
+ property :gift_cards do
277
+ key :type, :array
278
+ items do
279
+ key :'$ref', 'Workarea::Payment::GiftCard'
280
+ end
281
+ end
282
+ end
283
+ end
284
+
285
+ response 204 do
286
+ key :description, 'Upsert received'
287
+ end
288
+ end
289
+ end
290
+
291
+ def bulk
292
+ @bulk = Api::Admin::BulkUpsert.create!(
293
+ klass: Payment::GiftCard,
294
+ data: params[:gift_cards].map(&:to_h)
295
+ )
296
+
297
+ head :no_content
298
+ end
299
+
300
+ private
301
+
302
+ def find_gift_card
303
+ @gift_card = Payment::GiftCard.find(params[:id])
304
+ end
305
+ end
306
+ end
307
+ end
308
+ end
309
+ end