workarea-api-storefront 4.4.6

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 (203) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/README.md +58 -0
  4. data/Rakefile +10 -0
  5. data/app/controllers/workarea/api/storefront/accounts_controller.rb +31 -0
  6. data/app/controllers/workarea/api/storefront/analytics_controller.rb +41 -0
  7. data/app/controllers/workarea/api/storefront/application_controller.rb +65 -0
  8. data/app/controllers/workarea/api/storefront/assets_controller.rb +11 -0
  9. data/app/controllers/workarea/api/storefront/authentication.rb +30 -0
  10. data/app/controllers/workarea/api/storefront/authentication_tokens_controller.rb +50 -0
  11. data/app/controllers/workarea/api/storefront/cart_items_controller.rb +100 -0
  12. data/app/controllers/workarea/api/storefront/carts_controller.rb +47 -0
  13. data/app/controllers/workarea/api/storefront/categories_controller.rb +25 -0
  14. data/app/controllers/workarea/api/storefront/checkouts_controller.rb +117 -0
  15. data/app/controllers/workarea/api/storefront/contacts_controller.rb +20 -0
  16. data/app/controllers/workarea/api/storefront/current_checkout.rb +60 -0
  17. data/app/controllers/workarea/api/storefront/email_signups_controller.rb +15 -0
  18. data/app/controllers/workarea/api/storefront/menus_controller.rb +19 -0
  19. data/app/controllers/workarea/api/storefront/orders_controller.rb +32 -0
  20. data/app/controllers/workarea/api/storefront/pages_controller.rb +14 -0
  21. data/app/controllers/workarea/api/storefront/password_resets_controller.rb +17 -0
  22. data/app/controllers/workarea/api/storefront/products_controller.rb +17 -0
  23. data/app/controllers/workarea/api/storefront/recent_views_controller.rb +46 -0
  24. data/app/controllers/workarea/api/storefront/recommendations_controller.rb +22 -0
  25. data/app/controllers/workarea/api/storefront/saved_addresses_controller.rb +38 -0
  26. data/app/controllers/workarea/api/storefront/saved_credit_cards_controller.rb +54 -0
  27. data/app/controllers/workarea/api/storefront/searches_controller.rb +29 -0
  28. data/app/controllers/workarea/api/storefront/system_content_controller.rb +16 -0
  29. data/app/controllers/workarea/api/storefront/taxons_controller.rb +20 -0
  30. data/app/controllers/workarea/api/storefront/user_activity.rb +36 -0
  31. data/app/controllers/workarea/storefront/application_controller.decorator +12 -0
  32. data/app/helpers/workarea/api/storefront/application_helper.rb +15 -0
  33. data/app/helpers/workarea/api/storefront/checkouts_helper.rb +11 -0
  34. data/app/helpers/workarea/api/storefront/content_blocks_helper.rb +38 -0
  35. data/app/models/workarea/catalog/category.decorator +7 -0
  36. data/app/models/workarea/user/authentication_token.rb +33 -0
  37. data/app/models/workarea/user.decorator +8 -0
  38. data/app/view_models/workarea/api/storefront/search_suggestion_view_model.rb +21 -0
  39. data/app/views/workarea/api/storefront/accounts/_account.json.jbuilder +7 -0
  40. data/app/views/workarea/api/storefront/accounts/create.json.jbuilder +7 -0
  41. data/app/views/workarea/api/storefront/accounts/show.json.jbuilder +1 -0
  42. data/app/views/workarea/api/storefront/assets/show.json.jbuilder +4 -0
  43. data/app/views/workarea/api/storefront/authentication_tokens/_authentication_token.json.jbuilder +2 -0
  44. data/app/views/workarea/api/storefront/authentication_tokens/create.json.jbuilder +1 -0
  45. data/app/views/workarea/api/storefront/authentication_tokens/update.json.jbuilder +1 -0
  46. data/app/views/workarea/api/storefront/cart_items/item.json.jbuilder +9 -0
  47. data/app/views/workarea/api/storefront/carts/index.json.jbuilder +4 -0
  48. data/app/views/workarea/api/storefront/carts/show.json.jbuilder +1 -0
  49. data/app/views/workarea/api/storefront/categories/_category.json.jbuilder +4 -0
  50. data/app/views/workarea/api/storefront/categories/index.json.jbuilder +3 -0
  51. data/app/views/workarea/api/storefront/categories/show.json.jbuilder +30 -0
  52. data/app/views/workarea/api/storefront/checkouts/_shipping_options.json.jbuilder +4 -0
  53. data/app/views/workarea/api/storefront/checkouts/show.json.jbuilder +17 -0
  54. data/app/views/workarea/api/storefront/checkouts/steps/_addresses.json.jbuilder +19 -0
  55. data/app/views/workarea/api/storefront/checkouts/steps/_payment.json.jbuilder +9 -0
  56. data/app/views/workarea/api/storefront/checkouts/steps/_shipping.json.jbuilder +9 -0
  57. data/app/views/workarea/api/storefront/content_blocks/_block.json.jbuilder +7 -0
  58. data/app/views/workarea/api/storefront/email_signups/create.json.jbuilder +2 -0
  59. data/app/views/workarea/api/storefront/email_signups/show.json.jbuilder +4 -0
  60. data/app/views/workarea/api/storefront/facets/_range.json.jbuilder +8 -0
  61. data/app/views/workarea/api/storefront/facets/_terms.json.jbuilder +8 -0
  62. data/app/views/workarea/api/storefront/fulfillments/_fulfillment.json.jbuilder +18 -0
  63. data/app/views/workarea/api/storefront/menus/_menu.json.jbuilder +11 -0
  64. data/app/views/workarea/api/storefront/menus/index.json.jbuilder +3 -0
  65. data/app/views/workarea/api/storefront/menus/show.json.jbuilder +1 -0
  66. data/app/views/workarea/api/storefront/orders/_item.json.jbuilder +26 -0
  67. data/app/views/workarea/api/storefront/orders/_order.json.jbuilder +42 -0
  68. data/app/views/workarea/api/storefront/orders/index.json.jbuilder +4 -0
  69. data/app/views/workarea/api/storefront/orders/show.json.jbuilder +7 -0
  70. data/app/views/workarea/api/storefront/orders/tenders/_credit_card.json.jbuilder +6 -0
  71. data/app/views/workarea/api/storefront/orders/tenders/_store_credit.json.jbuilder +2 -0
  72. data/app/views/workarea/api/storefront/pages/show.json.jbuilder +16 -0
  73. data/app/views/workarea/api/storefront/products/_image_urls.json.jbuilder +5 -0
  74. data/app/views/workarea/api/storefront/products/_product.json.jbuilder +41 -0
  75. data/app/views/workarea/api/storefront/products/show.json.jbuilder +9 -0
  76. data/app/views/workarea/api/storefront/recent_views/show.json.jbuilder +8 -0
  77. data/app/views/workarea/api/storefront/recommendations/show.json.jbuilder +3 -0
  78. data/app/views/workarea/api/storefront/saved_addresses/_saved_address.json.jbuilder +2 -0
  79. data/app/views/workarea/api/storefront/saved_addresses/index.json.jbuilder +4 -0
  80. data/app/views/workarea/api/storefront/saved_addresses/show.json.jbuilder +2 -0
  81. data/app/views/workarea/api/storefront/saved_credit_cards/_card.json.jbuilder +9 -0
  82. data/app/views/workarea/api/storefront/saved_credit_cards/index.json.jbuilder +4 -0
  83. data/app/views/workarea/api/storefront/saved_credit_cards/show.json.jbuilder +2 -0
  84. data/app/views/workarea/api/storefront/searches/index.json.jbuilder +1 -0
  85. data/app/views/workarea/api/storefront/searches/show.json.jbuilder +19 -0
  86. data/app/views/workarea/api/storefront/shared/_address.json.jbuilder +12 -0
  87. data/app/views/workarea/api/storefront/shared/_pagination.json.jbuilder +11 -0
  88. data/app/views/workarea/api/storefront/system_content/show.json.jbuilder +12 -0
  89. data/app/views/workarea/api/storefront/taxons/_taxon.json.jbuilder +10 -0
  90. data/app/views/workarea/api/storefront/taxons/show.json.jbuilder +7 -0
  91. data/app/workers/workarea/remove_authentication_tokens_on_password_changes.rb +19 -0
  92. data/bin/rails +18 -0
  93. data/config/initializers/config.rb +2 -0
  94. data/config/locales/en.yml +13 -0
  95. data/config/routes.rb +41 -0
  96. data/lib/workarea/api/storefront/engine.rb +10 -0
  97. data/lib/workarea/api/storefront.rb +15 -0
  98. data/test/documentation/workarea/api/storefront/accounts_documentation_test.rb +70 -0
  99. data/test/documentation/workarea/api/storefront/analytics_documentation_test.rb +51 -0
  100. data/test/documentation/workarea/api/storefront/assets_documentation_test.rb +32 -0
  101. data/test/documentation/workarea/api/storefront/authentication_documentation_test.rb +84 -0
  102. data/test/documentation/workarea/api/storefront/cart_items_documentation_test.rb +104 -0
  103. data/test/documentation/workarea/api/storefront/carts_documentation_test.rb +121 -0
  104. data/test/documentation/workarea/api/storefront/categories_documentation_test.rb +90 -0
  105. data/test/documentation/workarea/api/storefront/checkouts_documentation_test.rb +142 -0
  106. data/test/documentation/workarea/api/storefront/contacts_documentation_test.rb +39 -0
  107. data/test/documentation/workarea/api/storefront/email_signups_documentation_test.rb +53 -0
  108. data/test/documentation/workarea/api/storefront/menus_documentation_test.rb +67 -0
  109. data/test/documentation/workarea/api/storefront/orders_documentation_test.rb +127 -0
  110. data/test/documentation/workarea/api/storefront/pages_documentation_test.rb +66 -0
  111. data/test/documentation/workarea/api/storefront/password_resets_documentation_test.rb +30 -0
  112. data/test/documentation/workarea/api/storefront/products_documentation_test.rb +64 -0
  113. data/test/documentation/workarea/api/storefront/recent_views_documentation_test.rb +116 -0
  114. data/test/documentation/workarea/api/storefront/recommendations_documentation_test.rb +68 -0
  115. data/test/documentation/workarea/api/storefront/saved_addresses_documentation_test.rb +129 -0
  116. data/test/documentation/workarea/api/storefront/saved_credit_cards_documentation_test.rb +129 -0
  117. data/test/documentation/workarea/api/storefront/searches_documentation_test.rb +88 -0
  118. data/test/documentation/workarea/api/storefront/system_content_documentation_test.rb +66 -0
  119. data/test/documentation/workarea/api/storefront/taxons_documentation_test.rb +37 -0
  120. data/test/documentation/workarea/api/storefront/validation_documentation_test.rb +81 -0
  121. data/test/dummy/Rakefile +7 -0
  122. data/test/dummy/app/assets/config/manifest.js +4 -0
  123. data/test/dummy/app/assets/images/.keep +0 -0
  124. data/test/dummy/app/assets/javascripts/application.js +13 -0
  125. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  126. data/test/dummy/app/controllers/application_controller.rb +3 -0
  127. data/test/dummy/app/controllers/concerns/.keep +0 -0
  128. data/test/dummy/app/helpers/application_helper.rb +2 -0
  129. data/test/dummy/app/jobs/application_job.rb +2 -0
  130. data/test/dummy/app/mailers/.keep +0 -0
  131. data/test/dummy/app/mailers/application_mailer.rb +4 -0
  132. data/test/dummy/app/models/.keep +0 -0
  133. data/test/dummy/app/models/concerns/.keep +0 -0
  134. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  135. data/test/dummy/app/views/layouts/mailer.html.erb +13 -0
  136. data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
  137. data/test/dummy/bin/bundle +3 -0
  138. data/test/dummy/bin/rails +4 -0
  139. data/test/dummy/bin/rake +4 -0
  140. data/test/dummy/bin/setup +34 -0
  141. data/test/dummy/bin/update +29 -0
  142. data/test/dummy/config/application.rb +25 -0
  143. data/test/dummy/config/boot.rb +5 -0
  144. data/test/dummy/config/cable.yml +9 -0
  145. data/test/dummy/config/environment.rb +5 -0
  146. data/test/dummy/config/environments/development.rb +55 -0
  147. data/test/dummy/config/environments/production.rb +86 -0
  148. data/test/dummy/config/environments/test.rb +43 -0
  149. data/test/dummy/config/initializers/application_controller_renderer.rb +6 -0
  150. data/test/dummy/config/initializers/assets.rb +11 -0
  151. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  152. data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
  153. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  154. data/test/dummy/config/initializers/inflections.rb +16 -0
  155. data/test/dummy/config/initializers/mime_types.rb +4 -0
  156. data/test/dummy/config/initializers/new_framework_defaults.rb +21 -0
  157. data/test/dummy/config/initializers/session_store.rb +3 -0
  158. data/test/dummy/config/initializers/workarea.rb +8 -0
  159. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  160. data/test/dummy/config/locales/en.yml +23 -0
  161. data/test/dummy/config/puma.rb +47 -0
  162. data/test/dummy/config/routes.rb +6 -0
  163. data/test/dummy/config/secrets.yml +22 -0
  164. data/test/dummy/config/spring.rb +6 -0
  165. data/test/dummy/config.ru +4 -0
  166. data/test/dummy/db/seeds.rb +2 -0
  167. data/test/dummy/log/.keep +0 -0
  168. data/test/dummy/public/404.html +67 -0
  169. data/test/dummy/public/422.html +67 -0
  170. data/test/dummy/public/500.html +66 -0
  171. data/test/dummy/public/apple-touch-icon-precomposed.png +0 -0
  172. data/test/dummy/public/apple-touch-icon.png +0 -0
  173. data/test/dummy/public/favicon.ico +1 -0
  174. data/test/integration/workarea/api/storefront/accounts_integration_test.rb +49 -0
  175. data/test/integration/workarea/api/storefront/analytics_integration_test.rb +36 -0
  176. data/test/integration/workarea/api/storefront/assets_integration_test.rb +24 -0
  177. data/test/integration/workarea/api/storefront/authentication_integration_test.rb +50 -0
  178. data/test/integration/workarea/api/storefront/authentication_tokens_integration_test.rb +87 -0
  179. data/test/integration/workarea/api/storefront/cart_items_integration_test.rb +149 -0
  180. data/test/integration/workarea/api/storefront/carts_integration_test.rb +114 -0
  181. data/test/integration/workarea/api/storefront/categories_integration_test.rb +84 -0
  182. data/test/integration/workarea/api/storefront/checkouts_integration_test.rb +203 -0
  183. data/test/integration/workarea/api/storefront/contacts_integration_test.rb +28 -0
  184. data/test/integration/workarea/api/storefront/email_signups_integration_test.rb +35 -0
  185. data/test/integration/workarea/api/storefront/menus_integration_test.rb +53 -0
  186. data/test/integration/workarea/api/storefront/orders_integration_test.rb +115 -0
  187. data/test/integration/workarea/api/storefront/pages_integration_test.rb +57 -0
  188. data/test/integration/workarea/api/storefront/password_resets_integration_test.rb +20 -0
  189. data/test/integration/workarea/api/storefront/products_integration_test.rb +50 -0
  190. data/test/integration/workarea/api/storefront/recent_views_integration_test.rb +118 -0
  191. data/test/integration/workarea/api/storefront/recommendations_integration_test.rb +51 -0
  192. data/test/integration/workarea/api/storefront/saved_addresses_integration_test.rb +100 -0
  193. data/test/integration/workarea/api/storefront/saved_credit_cards_integration_test.rb +107 -0
  194. data/test/integration/workarea/api/storefront/searches_integration_test.rb +128 -0
  195. data/test/integration/workarea/api/storefront/system_content_integration_test.rb +35 -0
  196. data/test/integration/workarea/api/storefront/taxons_integration_test.rb +44 -0
  197. data/test/integration/workarea/api/storefront/user_carts_integration_test.rb +55 -0
  198. data/test/models/workarea/user/authentication_token_test.rb +30 -0
  199. data/test/support/authentication_test.rb +25 -0
  200. data/test/support/orders_test.rb +18 -0
  201. data/test/test_helper.rb +10 -0
  202. data/workarea-api-storefront.gemspec +18 -0
  203. metadata +277 -0
@@ -0,0 +1,129 @@
1
+ require 'test_helper'
2
+ require 'workarea/api/documentation_test'
3
+
4
+ module Workarea
5
+ module Api
6
+ module Storefront
7
+ class SavedAddressesDocumentationTest < DocumentationTest
8
+ include AuthenticationTest
9
+
10
+ resource 'Saved Addresses'
11
+
12
+ setup :set_user
13
+ setup :set_address
14
+
15
+ def set_user
16
+ @user = create_user(first_name: 'Susan', last_name: 'Baker')
17
+ @auth = @user.authentication_tokens.create!
18
+ end
19
+
20
+ def set_address
21
+ @address = @user.addresses.create!(
22
+ first_name: 'Susan',
23
+ last_name: 'Baker',
24
+ street: '350 Fifth Avenue',
25
+ city: 'New York',
26
+ region: 'NY',
27
+ country: 'US',
28
+ postal_code: '10118',
29
+ phone_number: '6465552390'
30
+ )
31
+ end
32
+
33
+ def test_and_show_index_of_addresses
34
+ @user.addresses.create!(
35
+ first_name: 'Susan',
36
+ last_name: 'Baker',
37
+ street: '4059 Mt Lee Dr.',
38
+ city: 'Hollywood',
39
+ region: 'CA',
40
+ country: 'US',
41
+ postal_code: '90068',
42
+ phone_number: '7545552390'
43
+ )
44
+
45
+ description "Listing the user's saved addresses"
46
+ route storefront_api.saved_addresses_path
47
+ explanation <<-EOS
48
+ List a customer's saved addresses. Useful for account management and
49
+ for using saved addresses in checkout.
50
+ EOS
51
+
52
+ record_request do
53
+ get storefront_api.saved_addresses_path,
54
+ headers: { 'HTTP_AUTHORIZATION' => encode_credentials(@auth.token) }
55
+
56
+ assert_equal(200, response.status)
57
+ end
58
+ end
59
+
60
+ def test_and_document_show_a_single_address
61
+ description 'Showing a saved address'
62
+ route storefront_api.saved_address_path(':id')
63
+
64
+ record_request do
65
+ get storefront_api.saved_address_path(@address),
66
+ headers: { 'HTTP_AUTHORIZATION' => encode_credentials(@auth.token) }
67
+
68
+ assert_equal(200, response.status)
69
+ end
70
+ end
71
+
72
+ def test_and_document_creating_a_new_address
73
+ description 'Creating a saved address'
74
+ route storefront_api.saved_addresses_path
75
+
76
+ record_request do
77
+ post storefront_api.saved_addresses_path,
78
+ headers: { 'HTTP_AUTHORIZATION' => encode_credentials(@auth.token) },
79
+ as: :json,
80
+ params: {
81
+ first_name: 'Susan',
82
+ last_name: 'Baker',
83
+ street: '4059 Mt Lee Dr.',
84
+ city: 'Hollywood',
85
+ region: 'CA',
86
+ country: 'US',
87
+ postal_code: '90068',
88
+ phone_number: '7545552390'
89
+ }
90
+
91
+ assert_equal(200, response.status)
92
+ end
93
+ end
94
+
95
+ def test_and_document_updating_an_address
96
+ description 'Updating a saved address'
97
+ route storefront_api.saved_address_path(':id')
98
+
99
+ record_request do
100
+ patch storefront_api.saved_address_path(@address),
101
+ headers: { 'HTTP_AUTHORIZATION' => encode_credentials(@auth.token) },
102
+ as: :json,
103
+ params: {
104
+ street: '4059 Mt Lee Dr.',
105
+ city: 'Hollywood',
106
+ region: 'CA',
107
+ postal_code: '90068',
108
+ phone_number: '7545552390'
109
+ }
110
+
111
+ assert_equal(200, response.status)
112
+ end
113
+ end
114
+
115
+ def test_and_document_deleting_an_address
116
+ description 'Deleting a saved address'
117
+ route storefront_api.saved_address_path(':id')
118
+
119
+ record_request do
120
+ delete storefront_api.saved_address_path(@address),
121
+ headers: { 'HTTP_AUTHORIZATION' => encode_credentials(@auth.token) }
122
+
123
+ assert_equal(204, response.status)
124
+ end
125
+ end
126
+ end
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,129 @@
1
+ require 'test_helper'
2
+ require 'workarea/api/documentation_test'
3
+
4
+ module Workarea
5
+ module Api
6
+ module Storefront
7
+ class SavedCreditCardsDocumentationTest < DocumentationTest
8
+ include AuthenticationTest
9
+
10
+ resource 'Saved Credit Cards'
11
+
12
+ setup :set_user
13
+ setup :set_payment_profile
14
+ setup :set_credit_card
15
+
16
+ def set_user
17
+ @user = create_user(first_name: 'Susan', last_name: 'Baker')
18
+ @auth = @user.authentication_tokens.create!
19
+ end
20
+
21
+ def set_payment_profile
22
+ @payment_profile = Payment::Profile.lookup(
23
+ PaymentReference.new(@user)
24
+ )
25
+ end
26
+
27
+ def set_credit_card
28
+ @credit_card = @payment_profile.credit_cards.create!(
29
+ number: '4012888888881881',
30
+ first_name: 'Susan',
31
+ last_name: 'Baker',
32
+ month: '3',
33
+ year: (Time.now.year + 4).to_s,
34
+ cvv: '999'
35
+ )
36
+ end
37
+
38
+ def test_and_show_index_of_credit_cards
39
+ @payment_profile.credit_cards.create!(
40
+ number: '4111111111111111',
41
+ first_name: 'Susan',
42
+ last_name: 'Baker',
43
+ month: '7',
44
+ year: (Time.now.year + 5).to_s,
45
+ cvv: '999'
46
+ )
47
+
48
+ description 'Listing the user\'s saved credit cards'
49
+ route storefront_api.saved_credit_cards_path
50
+ explanation <<-EOS
51
+ List a customer's saved addresses. Useful for account management.
52
+ These addresses will be available to the customer in an
53
+ authenticated checkout.
54
+ EOS
55
+
56
+ record_request do
57
+ get storefront_api.saved_credit_cards_path,
58
+ headers: { 'HTTP_AUTHORIZATION' => encode_credentials(@auth.token) }
59
+
60
+ assert_equal(200, response.status)
61
+ end
62
+ end
63
+
64
+ def test_and_document_show_a_single_credit_card
65
+ description 'Showing a saved credit card'
66
+ route storefront_api.saved_credit_card_path(':id')
67
+
68
+ record_request do
69
+ get storefront_api.saved_credit_card_path(@credit_card),
70
+ headers: { 'HTTP_AUTHORIZATION' => encode_credentials(@auth.token) }
71
+
72
+ assert_equal(200, response.status)
73
+ end
74
+ end
75
+
76
+ def test_and_document_creating_a_new_credit_card
77
+ description 'Creating a saved credit card'
78
+ route storefront_api.saved_credit_cards_path
79
+
80
+ record_request do
81
+ post storefront_api.saved_credit_cards_path,
82
+ headers: { 'HTTP_AUTHORIZATION' => encode_credentials(@auth.token) },
83
+ as: :json,
84
+ params: {
85
+ number: '4111111111111111',
86
+ first_name: 'Susan',
87
+ last_name: 'Baker',
88
+ month: '7',
89
+ year: (Time.now.year + 5).to_s,
90
+ cvv: '123'
91
+ }
92
+
93
+ assert_equal(200, response.status)
94
+ end
95
+ end
96
+
97
+ def test_and_document_updating_an_credit_card
98
+ description 'Updating a saved credit card'
99
+ route storefront_api.saved_credit_card_path(':id')
100
+
101
+ record_request do
102
+ patch storefront_api.saved_credit_card_path(@credit_card),
103
+ headers: { 'HTTP_AUTHORIZATION' => encode_credentials(@auth.token) },
104
+ as: :json,
105
+ params: {
106
+ month: '7',
107
+ year: (Time.now.year + 5).to_s,
108
+ cvv: '123'
109
+ }
110
+
111
+ assert_equal(200, response.status)
112
+ end
113
+ end
114
+
115
+ def test_and_document_deleting_an_credit_card
116
+ description 'Deleting a saved credit card'
117
+ route storefront_api.saved_credit_card_path(':id')
118
+
119
+ record_request do
120
+ delete storefront_api.saved_credit_card_path(@credit_card),
121
+ headers: { 'HTTP_AUTHORIZATION' => encode_credentials(@auth.token) }
122
+
123
+ assert_equal(204, response.status)
124
+ end
125
+ end
126
+ end
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,88 @@
1
+ require 'test_helper'
2
+ require 'workarea/api/documentation_test'
3
+
4
+ module Workarea
5
+ module Api
6
+ module Storefront
7
+ class SearchesDocumentationTest < DocumentationTest
8
+ resource 'Searches'
9
+
10
+ setup :set_content
11
+
12
+ def set_content
13
+ @content = Content.for('search')
14
+ @content.blocks.create!(
15
+ area: :results,
16
+ type: :text,
17
+ data: { text: 'Huzzah! Your search results are below!' }
18
+ )
19
+ @content.blocks.create!(
20
+ area: :no_results,
21
+ type: :text,
22
+ data: { text: 'Sorry, we can\'t find what you searched for!' }
23
+ )
24
+ end
25
+
26
+ def test_and_document_autocomplete
27
+ description 'Showing search autocomplete suggestions'
28
+ route storefront_api.searches_path
29
+ explanation <<-EOS
30
+ This list will be based on popular search terms and matching
31
+ products, categories, etc. Useful for showing a autocomplete
32
+ drop-down as a customer types in a search bar.
33
+ EOS
34
+
35
+ create_product(name: 'Red Product')
36
+ create_category(name: 'Red Category')
37
+ create_page(name: 'Page about Red Products')
38
+
39
+ Metrics::SearchByDay.save_search('red', 3)
40
+ travel_to 1.weeks.from_now
41
+ GenerateInsights.generate_all!
42
+ BulkIndexSearches.perform
43
+ travel_back
44
+
45
+ record_request do
46
+ get storefront_api.searches_path(q: 'red')
47
+ assert_equal(200, response.status)
48
+ end
49
+ end
50
+
51
+ def test_and_document_show
52
+ description 'Showing search results'
53
+ route storefront_api.search_path
54
+ parameter 'q', 'The search query string entered by the customer'
55
+ parameter 'sort', 'Sort by'
56
+ parameter 'page', 'Page number'
57
+ parameter ':facet_name', 'Each facet setup on search settings will have a corresponding parameter'
58
+ explanation <<-EOS
59
+ This endpoint returns everything you'll need to show search results
60
+ to customers. This includes products, filters, and any content
61
+ that's been setup by an administrator.
62
+ EOS
63
+
64
+ create_product(
65
+ id: 'PRODUCT1',
66
+ name: 'Pretty Nice Shirt',
67
+ filters: { 'Size' => %w[Small Medium Large], 'Color' => 'Blue' },
68
+ variants: [{ sku: 'SKU', regular: 35.to_m }],
69
+ images: [{ image: product_image_file, option: 'Blue' }]
70
+ )
71
+
72
+ create_product(
73
+ id: 'PRODUCT2',
74
+ name: 'Great Pants',
75
+ filters: { 'Size' => %w[Small Medium Large], 'Color' => 'Brown' },
76
+ variants: [{ sku: 'SKU', regular: 50.to_m }],
77
+ images: [{ image: product_image_file, option: 'Brown' }]
78
+ )
79
+
80
+ record_request do
81
+ get storefront_api.search_path(q: 'large', page: '1', sort: 'price_desc')
82
+ assert_equal(200, response.status)
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,66 @@
1
+ require 'test_helper'
2
+ require 'workarea/api/documentation_test'
3
+
4
+ module Workarea
5
+ module Api
6
+ module Storefront
7
+ class SystemContentDocumentationTest < DocumentationTest
8
+ resource 'System Content'
9
+
10
+ def test_and_document_show_home_page
11
+ description 'Showing the home page'
12
+ route storefront_api.system_content_path('home_page')
13
+ explanation <<-EOS
14
+ This endpoint returns everything you'll need to render the home
15
+ page.
16
+ EOS
17
+
18
+ content = Content.for('Home Page')
19
+ content.blocks.create!(
20
+ area: :default,
21
+ type: :text,
22
+ data: { text: 'Summer is here!' }
23
+ )
24
+ content.blocks.create!(
25
+ area: :default,
26
+ type: :text,
27
+ data: { text: 'Get 20% off all swimwear' }
28
+ )
29
+
30
+ record_request do
31
+ get storefront_api.system_content_path('home_page')
32
+ assert_equal(200, response.status)
33
+ end
34
+ end
35
+
36
+ def test_and_document_show
37
+ description 'Showing system content'
38
+ route storefront_api.system_content_path(':name')
39
+ explanation <<-EOS
40
+ System content is content for an area of site not configured by the
41
+ CMS. Examples would be content for the cart page, content for
42
+ checkout, site layout content, etc. The home page is also an example
43
+ of system content and shown in a separate example.
44
+ EOS
45
+
46
+ content = Content.for('Layout')
47
+ content.blocks.create!(
48
+ area: :header_promo,
49
+ type: :text,
50
+ data: { text: 'Don\'t miss our sizzling summer deals!' }
51
+ )
52
+ content.blocks.create!(
53
+ area: :footer_navigation,
54
+ type: :text,
55
+ data: { text: 'Be the first to received our exclusive discounts' }
56
+ )
57
+
58
+ record_request do
59
+ get storefront_api.system_content_path('layout')
60
+ assert_equal(200, response.status)
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,37 @@
1
+ require 'test_helper'
2
+ require 'workarea/api/documentation_test'
3
+
4
+ module Workarea
5
+ module Api
6
+ module Storefront
7
+ class TaxonsDocumentationTest < DocumentationTest
8
+ resource 'Taxons'
9
+
10
+ setup :set_taxons
11
+
12
+ def set_taxons
13
+ @taxon = create_taxon(
14
+ name: 'Mens',
15
+ url: 'http://example.com/pages/mens'
16
+ )
17
+
18
+ @taxon.children.create!(name: 'Sale')
19
+ end
20
+
21
+ def test_and_document_show
22
+ description 'Showing a taxon'
23
+ route storefront_api.taxon_path(':id')
24
+ explanation <<-EOS
25
+ This endpoint will show details on a particular node (or taxon) of
26
+ the site taxonomy, along with its children.
27
+ EOS
28
+
29
+ record_request do
30
+ get storefront_api.taxon_path(@taxon)
31
+ assert_equal(200, response.status)
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,81 @@
1
+ require 'test_helper'
2
+ require 'workarea/api/documentation_test'
3
+
4
+ module Workarea
5
+ module Api
6
+ module Storefront
7
+ class ValidationDocumentationTest < DocumentationTest
8
+ include OrdersTest
9
+
10
+ resource 'Validation Errors'
11
+
12
+ def test_showing_validation_errors
13
+ description 'General validation errors'
14
+ route storefront_api.account_path
15
+ explanation <<-EOS
16
+ This demonstrates API responses when invalid data is submitted.
17
+ EOS
18
+
19
+ record_request do
20
+ post storefront_api.account_path,
21
+ as: :json,
22
+ params: { email: 'bob@', password: '' }
23
+
24
+ assert_equal(422, response.status)
25
+ end
26
+ end
27
+
28
+ def test_checkout_validation_errors
29
+ description 'Checkout validation errors'
30
+ route storefront_api.checkout_path(':id')
31
+ explanation <<-EOS
32
+ Due to the more complex nature of checkout updates and data,
33
+ checkout validation errors are returned inline with the resource
34
+ they are coming from as shown below. Note the response status can be
35
+ 200 OK, due to some data being persisted properly.
36
+ EOS
37
+
38
+ product = create_product(
39
+ id: 'VINTEE',
40
+ name: 'Vintage Tee',
41
+ variants: [
42
+ { sku: 'VT001', regular: 5.to_m },
43
+ { sku: 'VT002', regular: 6.to_m }
44
+ ]
45
+ )
46
+
47
+ order = create_order(email: 'sbaker@workarea.com')
48
+ add_item(order, product_id: product.id, sku: 'VT001', quantity: 2)
49
+
50
+ record_request do
51
+ patch storefront_api.checkout_path(order),
52
+ as: :json,
53
+ params: {
54
+ email: 'susanb@',
55
+ shipping_address: {
56
+ first_name: '',
57
+ last_name: 'Baker',
58
+ street: '350 Fifth Avenue',
59
+ city: 'New York',
60
+ region: 'NY',
61
+ country: 'US',
62
+ postal_code: '10118'
63
+ },
64
+ billing_address: {
65
+ first_name: 'Susan',
66
+ last_name: 'Baker',
67
+ street: '',
68
+ city: 'New York',
69
+ region: 'NY',
70
+ country: 'US',
71
+ postal_code: '10118'
72
+ }
73
+ }
74
+
75
+ assert_equal(200, response.status)
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env rake
2
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
3
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
4
+
5
+ require File.expand_path('../config/application', __FILE__)
6
+
7
+ Rails.application.load_tasks
@@ -0,0 +1,4 @@
1
+
2
+ //= link_tree ../images
3
+ //= link_directory ../javascripts .js
4
+ //= link_directory ../stylesheets .css
File without changes
@@ -0,0 +1,13 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // compiled file.
9
+ //
10
+ // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
11
+ // about supported directives.
12
+ //
13
+ //= require_tree .
@@ -0,0 +1,15 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
+ * compiled file so the styles you add here take precedence over styles defined in any styles
10
+ * defined in the other CSS/SCSS files in this directory. It is generally better to create a new
11
+ * file per style scope.
12
+ *
13
+ *= require_tree .
14
+ *= require_self
15
+ */
@@ -0,0 +1,3 @@
1
+ class ApplicationController < ActionController::Base
2
+ protect_from_forgery with: :exception
3
+ end
File without changes
@@ -0,0 +1,2 @@
1
+ module ApplicationHelper
2
+ end
@@ -0,0 +1,2 @@
1
+ class ApplicationJob < ActiveJob::Base
2
+ end
File without changes
@@ -0,0 +1,4 @@
1
+ class ApplicationMailer < ActionMailer::Base
2
+ default from: 'from@example.com'
3
+ layout 'mailer'
4
+ end
File without changes
File without changes
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Dummy</title>
5
+ <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
6
+ <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+ <body>
10
+
11
+ <%= yield %>
12
+
13
+ </body>
14
+ </html>
@@ -0,0 +1,13 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
+ <style>
6
+ /* Email styles need to be inline */
7
+ </style>
8
+ </head>
9
+
10
+ <body>
11
+ <%= yield %>
12
+ </body>
13
+ </html>
@@ -0,0 +1 @@
1
+ <%= yield %>
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
3
+ load Gem.bin_path('bundler', 'bundle')
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ APP_PATH = File.expand_path('../config/application', __dir__)
3
+ require_relative '../config/boot'
4
+ require 'rails/commands'
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require_relative '../config/boot'
3
+ require 'rake'
4
+ Rake.application.run