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.
- checksums.yaml +7 -0
- data/.gitignore +12 -0
- data/README.md +58 -0
- data/Rakefile +10 -0
- data/app/controllers/workarea/api/storefront/accounts_controller.rb +31 -0
- data/app/controllers/workarea/api/storefront/analytics_controller.rb +41 -0
- data/app/controllers/workarea/api/storefront/application_controller.rb +65 -0
- data/app/controllers/workarea/api/storefront/assets_controller.rb +11 -0
- data/app/controllers/workarea/api/storefront/authentication.rb +30 -0
- data/app/controllers/workarea/api/storefront/authentication_tokens_controller.rb +50 -0
- data/app/controllers/workarea/api/storefront/cart_items_controller.rb +100 -0
- data/app/controllers/workarea/api/storefront/carts_controller.rb +47 -0
- data/app/controllers/workarea/api/storefront/categories_controller.rb +25 -0
- data/app/controllers/workarea/api/storefront/checkouts_controller.rb +117 -0
- data/app/controllers/workarea/api/storefront/contacts_controller.rb +20 -0
- data/app/controllers/workarea/api/storefront/current_checkout.rb +60 -0
- data/app/controllers/workarea/api/storefront/email_signups_controller.rb +15 -0
- data/app/controllers/workarea/api/storefront/menus_controller.rb +19 -0
- data/app/controllers/workarea/api/storefront/orders_controller.rb +32 -0
- data/app/controllers/workarea/api/storefront/pages_controller.rb +14 -0
- data/app/controllers/workarea/api/storefront/password_resets_controller.rb +17 -0
- data/app/controllers/workarea/api/storefront/products_controller.rb +17 -0
- data/app/controllers/workarea/api/storefront/recent_views_controller.rb +46 -0
- data/app/controllers/workarea/api/storefront/recommendations_controller.rb +22 -0
- data/app/controllers/workarea/api/storefront/saved_addresses_controller.rb +38 -0
- data/app/controllers/workarea/api/storefront/saved_credit_cards_controller.rb +54 -0
- data/app/controllers/workarea/api/storefront/searches_controller.rb +29 -0
- data/app/controllers/workarea/api/storefront/system_content_controller.rb +16 -0
- data/app/controllers/workarea/api/storefront/taxons_controller.rb +20 -0
- data/app/controllers/workarea/api/storefront/user_activity.rb +36 -0
- data/app/controllers/workarea/storefront/application_controller.decorator +12 -0
- data/app/helpers/workarea/api/storefront/application_helper.rb +15 -0
- data/app/helpers/workarea/api/storefront/checkouts_helper.rb +11 -0
- data/app/helpers/workarea/api/storefront/content_blocks_helper.rb +38 -0
- data/app/models/workarea/catalog/category.decorator +7 -0
- data/app/models/workarea/user/authentication_token.rb +33 -0
- data/app/models/workarea/user.decorator +8 -0
- data/app/view_models/workarea/api/storefront/search_suggestion_view_model.rb +21 -0
- data/app/views/workarea/api/storefront/accounts/_account.json.jbuilder +7 -0
- data/app/views/workarea/api/storefront/accounts/create.json.jbuilder +7 -0
- data/app/views/workarea/api/storefront/accounts/show.json.jbuilder +1 -0
- data/app/views/workarea/api/storefront/assets/show.json.jbuilder +4 -0
- data/app/views/workarea/api/storefront/authentication_tokens/_authentication_token.json.jbuilder +2 -0
- data/app/views/workarea/api/storefront/authentication_tokens/create.json.jbuilder +1 -0
- data/app/views/workarea/api/storefront/authentication_tokens/update.json.jbuilder +1 -0
- data/app/views/workarea/api/storefront/cart_items/item.json.jbuilder +9 -0
- data/app/views/workarea/api/storefront/carts/index.json.jbuilder +4 -0
- data/app/views/workarea/api/storefront/carts/show.json.jbuilder +1 -0
- data/app/views/workarea/api/storefront/categories/_category.json.jbuilder +4 -0
- data/app/views/workarea/api/storefront/categories/index.json.jbuilder +3 -0
- data/app/views/workarea/api/storefront/categories/show.json.jbuilder +30 -0
- data/app/views/workarea/api/storefront/checkouts/_shipping_options.json.jbuilder +4 -0
- data/app/views/workarea/api/storefront/checkouts/show.json.jbuilder +17 -0
- data/app/views/workarea/api/storefront/checkouts/steps/_addresses.json.jbuilder +19 -0
- data/app/views/workarea/api/storefront/checkouts/steps/_payment.json.jbuilder +9 -0
- data/app/views/workarea/api/storefront/checkouts/steps/_shipping.json.jbuilder +9 -0
- data/app/views/workarea/api/storefront/content_blocks/_block.json.jbuilder +7 -0
- data/app/views/workarea/api/storefront/email_signups/create.json.jbuilder +2 -0
- data/app/views/workarea/api/storefront/email_signups/show.json.jbuilder +4 -0
- data/app/views/workarea/api/storefront/facets/_range.json.jbuilder +8 -0
- data/app/views/workarea/api/storefront/facets/_terms.json.jbuilder +8 -0
- data/app/views/workarea/api/storefront/fulfillments/_fulfillment.json.jbuilder +18 -0
- data/app/views/workarea/api/storefront/menus/_menu.json.jbuilder +11 -0
- data/app/views/workarea/api/storefront/menus/index.json.jbuilder +3 -0
- data/app/views/workarea/api/storefront/menus/show.json.jbuilder +1 -0
- data/app/views/workarea/api/storefront/orders/_item.json.jbuilder +26 -0
- data/app/views/workarea/api/storefront/orders/_order.json.jbuilder +42 -0
- data/app/views/workarea/api/storefront/orders/index.json.jbuilder +4 -0
- data/app/views/workarea/api/storefront/orders/show.json.jbuilder +7 -0
- data/app/views/workarea/api/storefront/orders/tenders/_credit_card.json.jbuilder +6 -0
- data/app/views/workarea/api/storefront/orders/tenders/_store_credit.json.jbuilder +2 -0
- data/app/views/workarea/api/storefront/pages/show.json.jbuilder +16 -0
- data/app/views/workarea/api/storefront/products/_image_urls.json.jbuilder +5 -0
- data/app/views/workarea/api/storefront/products/_product.json.jbuilder +41 -0
- data/app/views/workarea/api/storefront/products/show.json.jbuilder +9 -0
- data/app/views/workarea/api/storefront/recent_views/show.json.jbuilder +8 -0
- data/app/views/workarea/api/storefront/recommendations/show.json.jbuilder +3 -0
- data/app/views/workarea/api/storefront/saved_addresses/_saved_address.json.jbuilder +2 -0
- data/app/views/workarea/api/storefront/saved_addresses/index.json.jbuilder +4 -0
- data/app/views/workarea/api/storefront/saved_addresses/show.json.jbuilder +2 -0
- data/app/views/workarea/api/storefront/saved_credit_cards/_card.json.jbuilder +9 -0
- data/app/views/workarea/api/storefront/saved_credit_cards/index.json.jbuilder +4 -0
- data/app/views/workarea/api/storefront/saved_credit_cards/show.json.jbuilder +2 -0
- data/app/views/workarea/api/storefront/searches/index.json.jbuilder +1 -0
- data/app/views/workarea/api/storefront/searches/show.json.jbuilder +19 -0
- data/app/views/workarea/api/storefront/shared/_address.json.jbuilder +12 -0
- data/app/views/workarea/api/storefront/shared/_pagination.json.jbuilder +11 -0
- data/app/views/workarea/api/storefront/system_content/show.json.jbuilder +12 -0
- data/app/views/workarea/api/storefront/taxons/_taxon.json.jbuilder +10 -0
- data/app/views/workarea/api/storefront/taxons/show.json.jbuilder +7 -0
- data/app/workers/workarea/remove_authentication_tokens_on_password_changes.rb +19 -0
- data/bin/rails +18 -0
- data/config/initializers/config.rb +2 -0
- data/config/locales/en.yml +13 -0
- data/config/routes.rb +41 -0
- data/lib/workarea/api/storefront/engine.rb +10 -0
- data/lib/workarea/api/storefront.rb +15 -0
- data/test/documentation/workarea/api/storefront/accounts_documentation_test.rb +70 -0
- data/test/documentation/workarea/api/storefront/analytics_documentation_test.rb +51 -0
- data/test/documentation/workarea/api/storefront/assets_documentation_test.rb +32 -0
- data/test/documentation/workarea/api/storefront/authentication_documentation_test.rb +84 -0
- data/test/documentation/workarea/api/storefront/cart_items_documentation_test.rb +104 -0
- data/test/documentation/workarea/api/storefront/carts_documentation_test.rb +121 -0
- data/test/documentation/workarea/api/storefront/categories_documentation_test.rb +90 -0
- data/test/documentation/workarea/api/storefront/checkouts_documentation_test.rb +142 -0
- data/test/documentation/workarea/api/storefront/contacts_documentation_test.rb +39 -0
- data/test/documentation/workarea/api/storefront/email_signups_documentation_test.rb +53 -0
- data/test/documentation/workarea/api/storefront/menus_documentation_test.rb +67 -0
- data/test/documentation/workarea/api/storefront/orders_documentation_test.rb +127 -0
- data/test/documentation/workarea/api/storefront/pages_documentation_test.rb +66 -0
- data/test/documentation/workarea/api/storefront/password_resets_documentation_test.rb +30 -0
- data/test/documentation/workarea/api/storefront/products_documentation_test.rb +64 -0
- data/test/documentation/workarea/api/storefront/recent_views_documentation_test.rb +116 -0
- data/test/documentation/workarea/api/storefront/recommendations_documentation_test.rb +68 -0
- data/test/documentation/workarea/api/storefront/saved_addresses_documentation_test.rb +129 -0
- data/test/documentation/workarea/api/storefront/saved_credit_cards_documentation_test.rb +129 -0
- data/test/documentation/workarea/api/storefront/searches_documentation_test.rb +88 -0
- data/test/documentation/workarea/api/storefront/system_content_documentation_test.rb +66 -0
- data/test/documentation/workarea/api/storefront/taxons_documentation_test.rb +37 -0
- data/test/documentation/workarea/api/storefront/validation_documentation_test.rb +81 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/config/manifest.js +4 -0
- data/test/dummy/app/assets/images/.keep +0 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/controllers/concerns/.keep +0 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/jobs/application_job.rb +2 -0
- data/test/dummy/app/mailers/.keep +0 -0
- data/test/dummy/app/mailers/application_mailer.rb +4 -0
- data/test/dummy/app/models/.keep +0 -0
- data/test/dummy/app/models/concerns/.keep +0 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/app/views/layouts/mailer.html.erb +13 -0
- data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/bin/setup +34 -0
- data/test/dummy/bin/update +29 -0
- data/test/dummy/config/application.rb +25 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/cable.yml +9 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +55 -0
- data/test/dummy/config/environments/production.rb +86 -0
- data/test/dummy/config/environments/test.rb +43 -0
- data/test/dummy/config/initializers/application_controller_renderer.rb +6 -0
- data/test/dummy/config/initializers/assets.rb +11 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/new_framework_defaults.rb +21 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/workarea.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/puma.rb +47 -0
- data/test/dummy/config/routes.rb +6 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/config/spring.rb +6 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/db/seeds.rb +2 -0
- data/test/dummy/log/.keep +0 -0
- data/test/dummy/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/apple-touch-icon-precomposed.png +0 -0
- data/test/dummy/public/apple-touch-icon.png +0 -0
- data/test/dummy/public/favicon.ico +1 -0
- data/test/integration/workarea/api/storefront/accounts_integration_test.rb +49 -0
- data/test/integration/workarea/api/storefront/analytics_integration_test.rb +36 -0
- data/test/integration/workarea/api/storefront/assets_integration_test.rb +24 -0
- data/test/integration/workarea/api/storefront/authentication_integration_test.rb +50 -0
- data/test/integration/workarea/api/storefront/authentication_tokens_integration_test.rb +87 -0
- data/test/integration/workarea/api/storefront/cart_items_integration_test.rb +149 -0
- data/test/integration/workarea/api/storefront/carts_integration_test.rb +114 -0
- data/test/integration/workarea/api/storefront/categories_integration_test.rb +84 -0
- data/test/integration/workarea/api/storefront/checkouts_integration_test.rb +203 -0
- data/test/integration/workarea/api/storefront/contacts_integration_test.rb +28 -0
- data/test/integration/workarea/api/storefront/email_signups_integration_test.rb +35 -0
- data/test/integration/workarea/api/storefront/menus_integration_test.rb +53 -0
- data/test/integration/workarea/api/storefront/orders_integration_test.rb +115 -0
- data/test/integration/workarea/api/storefront/pages_integration_test.rb +57 -0
- data/test/integration/workarea/api/storefront/password_resets_integration_test.rb +20 -0
- data/test/integration/workarea/api/storefront/products_integration_test.rb +50 -0
- data/test/integration/workarea/api/storefront/recent_views_integration_test.rb +118 -0
- data/test/integration/workarea/api/storefront/recommendations_integration_test.rb +51 -0
- data/test/integration/workarea/api/storefront/saved_addresses_integration_test.rb +100 -0
- data/test/integration/workarea/api/storefront/saved_credit_cards_integration_test.rb +107 -0
- data/test/integration/workarea/api/storefront/searches_integration_test.rb +128 -0
- data/test/integration/workarea/api/storefront/system_content_integration_test.rb +35 -0
- data/test/integration/workarea/api/storefront/taxons_integration_test.rb +44 -0
- data/test/integration/workarea/api/storefront/user_carts_integration_test.rb +55 -0
- data/test/models/workarea/user/authentication_token_test.rb +30 -0
- data/test/support/authentication_test.rb +25 -0
- data/test/support/orders_test.rb +18 -0
- data/test/test_helper.rb +10 -0
- data/workarea-api-storefront.gemspec +18 -0
- metadata +277 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
require 'workarea/api/documentation_test'
|
|
3
|
+
|
|
4
|
+
module Workarea
|
|
5
|
+
module Api
|
|
6
|
+
module Storefront
|
|
7
|
+
class EmailSignupsDocumentationTest < DocumentationTest
|
|
8
|
+
resource 'Email Signups'
|
|
9
|
+
|
|
10
|
+
setup :set_content
|
|
11
|
+
|
|
12
|
+
def set_content
|
|
13
|
+
page = Workarea::Storefront::EmailSignupsViewModel.new
|
|
14
|
+
page.content.blocks.create!(
|
|
15
|
+
type: :text,
|
|
16
|
+
data: { text: 'Here is some administrated content' }
|
|
17
|
+
)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_and_document_show
|
|
21
|
+
description 'Showing an email signup content'
|
|
22
|
+
route storefront_api.email_signups_path
|
|
23
|
+
explanation <<-EOS
|
|
24
|
+
This endpoint will return all relevant data for showing an email
|
|
25
|
+
sign up form.
|
|
26
|
+
EOS
|
|
27
|
+
|
|
28
|
+
record_request do
|
|
29
|
+
get storefront_api.email_signups_path
|
|
30
|
+
assert_equal(200, response.status)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def test_and_document_create
|
|
35
|
+
description 'Creating an email signup'
|
|
36
|
+
route storefront_api.email_signups_path
|
|
37
|
+
explanation <<-EOS
|
|
38
|
+
Use this endpoint to create an email signup. This will usually be
|
|
39
|
+
forwarded to an Email Service Provider, but Workarea will keep a
|
|
40
|
+
record of it just in case.
|
|
41
|
+
EOS
|
|
42
|
+
|
|
43
|
+
record_request do
|
|
44
|
+
post storefront_api.email_signups_path,
|
|
45
|
+
as: :json,
|
|
46
|
+
params: { email: 'email@example.com' }
|
|
47
|
+
assert_equal(200, response.status)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
require 'workarea/api/documentation_test'
|
|
3
|
+
|
|
4
|
+
module Workarea
|
|
5
|
+
module Api
|
|
6
|
+
module Storefront
|
|
7
|
+
class MenusDocumentationTest < DocumentationTest
|
|
8
|
+
resource 'Menus'
|
|
9
|
+
|
|
10
|
+
setup :set_navigation_menu
|
|
11
|
+
|
|
12
|
+
def set_navigation_menu
|
|
13
|
+
@menus = ['Men', 'Women', 'Children'].map do |name|
|
|
14
|
+
first_level = create_taxon(
|
|
15
|
+
name: name,
|
|
16
|
+
url: "http://example.com/#{name.downcase}"
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
second_level = first_level.children.create!(name: 'Sale')
|
|
20
|
+
|
|
21
|
+
menu = create_menu(taxon: first_level)
|
|
22
|
+
|
|
23
|
+
content = Content.for(menu)
|
|
24
|
+
content.blocks.create!(
|
|
25
|
+
type: 'taxonomy',
|
|
26
|
+
data: { 'start' => second_level.id }
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
menu
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def test_and_document_index
|
|
34
|
+
description 'Listing menus'
|
|
35
|
+
route storefront_api.menus_path
|
|
36
|
+
explanation <<-EOS
|
|
37
|
+
In the base HTML storefront, menus are used as the primary top-level
|
|
38
|
+
navigation entry points. Each menu has associated content (composed
|
|
39
|
+
of content blocks) that represent the navigation to be display when
|
|
40
|
+
that menu is selected (usually a hover or a click on a mobile
|
|
41
|
+
device). Each menu points at a particular spot in the taxonomy.
|
|
42
|
+
EOS
|
|
43
|
+
|
|
44
|
+
record_request do
|
|
45
|
+
get storefront_api.menus_path
|
|
46
|
+
assert_equal(200, response.status)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def test_and_document_show
|
|
51
|
+
description 'Showing a menu'
|
|
52
|
+
route storefront_api.menu_path(':id')
|
|
53
|
+
explanation <<-EOS
|
|
54
|
+
This endpoint will return all the data used to render a menu. This
|
|
55
|
+
includes the corresponding content, as well a link to where the
|
|
56
|
+
menu points at in the taxonomy.
|
|
57
|
+
EOS
|
|
58
|
+
|
|
59
|
+
record_request do
|
|
60
|
+
get storefront_api.menu_path(@menus.first)
|
|
61
|
+
assert_equal(200, response.status)
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
require 'workarea/api/documentation_test'
|
|
3
|
+
|
|
4
|
+
module Workarea
|
|
5
|
+
module Api
|
|
6
|
+
module Storefront
|
|
7
|
+
class OrdersDocumentationTest < DocumentationTest
|
|
8
|
+
include AuthenticationTest
|
|
9
|
+
|
|
10
|
+
resource 'Orders'
|
|
11
|
+
|
|
12
|
+
setup :set_user
|
|
13
|
+
setup :set_order
|
|
14
|
+
|
|
15
|
+
def set_user
|
|
16
|
+
@user = create_user(
|
|
17
|
+
email: 'sbaker@workarea.com',
|
|
18
|
+
first_name: 'Susan',
|
|
19
|
+
last_name: 'Baker'
|
|
20
|
+
)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def set_order
|
|
24
|
+
@order ||= begin
|
|
25
|
+
order = Order.new(user_id: @user.id, email: @user.email)
|
|
26
|
+
|
|
27
|
+
product = create_product(
|
|
28
|
+
name: 'Product One',
|
|
29
|
+
variants: [{ sku: 'PROD1', regular: 5.to_m }]
|
|
30
|
+
)
|
|
31
|
+
order.add_item(product_id: product.id, sku: 'PROD1', quantity: 2)
|
|
32
|
+
|
|
33
|
+
product = create_product(
|
|
34
|
+
name: 'Product Two',
|
|
35
|
+
variants: [{ sku: 'PROD2', regular: 10.to_m }]
|
|
36
|
+
)
|
|
37
|
+
order.add_item(product_id: product.id, sku: 'PROD2', quantity: 1)
|
|
38
|
+
|
|
39
|
+
product = create_product(
|
|
40
|
+
name: 'Product Three',
|
|
41
|
+
variants: [{ sku: 'PROD3', regular: 20.to_m }]
|
|
42
|
+
)
|
|
43
|
+
order.add_item(
|
|
44
|
+
product_id: product.id,
|
|
45
|
+
sku: 'PROD3',
|
|
46
|
+
quantity: 1,
|
|
47
|
+
customizations: { 'foo' => 'bar' }
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
address = {
|
|
51
|
+
first_name: 'Susan',
|
|
52
|
+
last_name: 'Baker',
|
|
53
|
+
street: '350 Fifth Avenue',
|
|
54
|
+
city: 'New York',
|
|
55
|
+
region: 'NY',
|
|
56
|
+
country: 'US',
|
|
57
|
+
postal_code: '10118',
|
|
58
|
+
phone_number: '6465552390'
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
complete_checkout(
|
|
62
|
+
order,
|
|
63
|
+
shipping_address: address,
|
|
64
|
+
billing_address: address,
|
|
65
|
+
shipping_service: create_shipping_service(name: 'Express').name,
|
|
66
|
+
credit_card: {
|
|
67
|
+
number: '4111111111111111',
|
|
68
|
+
month: '3',
|
|
69
|
+
year: Time.now.year + 2,
|
|
70
|
+
cvv: '123'
|
|
71
|
+
}
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
fulfillment = Fulfillment.find(order.id)
|
|
75
|
+
fulfillment.ship_items(
|
|
76
|
+
'1Z',
|
|
77
|
+
[{ 'id' => order.items.first.id, 'quantity' => 2 }]
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
fulfillment.cancel_items(
|
|
81
|
+
[{ 'id' => order.items.second.id, 'quantity' => 1 }]
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
order
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def test_and_show_index_of_orders
|
|
89
|
+
description "Listing the user's orders"
|
|
90
|
+
route storefront_api.orders_path
|
|
91
|
+
explanation <<-EOS
|
|
92
|
+
This endpoints returns recently placed orders for a customer. Use it
|
|
93
|
+
for showing an order history for the customer.
|
|
94
|
+
EOS
|
|
95
|
+
|
|
96
|
+
auth = @user.authentication_tokens.create!
|
|
97
|
+
|
|
98
|
+
record_request do
|
|
99
|
+
get storefront_api.orders_path,
|
|
100
|
+
headers: { 'HTTP_AUTHORIZATION' => encode_credentials(auth.token) }
|
|
101
|
+
|
|
102
|
+
assert_equal(200, response.status)
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def test_and_document_show_a_single_order
|
|
107
|
+
description 'Showing an order'
|
|
108
|
+
route storefront_api.order_path(':id')
|
|
109
|
+
explanation <<-EOS
|
|
110
|
+
This endpoint returns everything needed to render an order for a
|
|
111
|
+
customer's order history including order details and fulfillment
|
|
112
|
+
status.
|
|
113
|
+
EOS
|
|
114
|
+
|
|
115
|
+
auth = @user.authentication_tokens.create!
|
|
116
|
+
|
|
117
|
+
record_request do
|
|
118
|
+
get storefront_api.order_path(@order),
|
|
119
|
+
headers: { 'HTTP_AUTHORIZATION' => encode_credentials(auth.token) }
|
|
120
|
+
|
|
121
|
+
assert_equal(200, response.status)
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
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 PagesDocumentationTest < DocumentationTest
|
|
8
|
+
resource 'Pages'
|
|
9
|
+
|
|
10
|
+
setup :set_page
|
|
11
|
+
setup :set_taxonomy
|
|
12
|
+
setup :set_content
|
|
13
|
+
|
|
14
|
+
def set_page
|
|
15
|
+
@page = create_page(name: 'Summer Lookbook')
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def set_taxonomy
|
|
19
|
+
first_level = create_taxon(
|
|
20
|
+
name: 'Women',
|
|
21
|
+
url: "#{Workarea.config.host}/women"
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
@taxon = first_level.children.create!(navigable: @page)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def set_content
|
|
28
|
+
content = Content.for(@page)
|
|
29
|
+
content.blocks.create!(
|
|
30
|
+
area: :default,
|
|
31
|
+
type: :text,
|
|
32
|
+
data: { text: 'Great new looks for summer' }
|
|
33
|
+
)
|
|
34
|
+
content.blocks.create!(
|
|
35
|
+
area: :default,
|
|
36
|
+
type: :image,
|
|
37
|
+
data: { image: asset.id.to_s, alt: 'splash' }
|
|
38
|
+
)
|
|
39
|
+
content.blocks.create!(
|
|
40
|
+
area: :default,
|
|
41
|
+
type: :text,
|
|
42
|
+
data: { text: 'Pool party fashion' }
|
|
43
|
+
)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def asset
|
|
47
|
+
@asset ||= create_asset(name: 'Splash')
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def test_and_document_show
|
|
51
|
+
description 'Showing a page'
|
|
52
|
+
route storefront_api.page_path(':slug')
|
|
53
|
+
explanation <<-EOS
|
|
54
|
+
This endpoint will return all relevant data for showing a content
|
|
55
|
+
page.
|
|
56
|
+
EOS
|
|
57
|
+
|
|
58
|
+
record_request do
|
|
59
|
+
get storefront_api.page_path(@page)
|
|
60
|
+
assert_equal(200, response.status)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
require 'workarea/api/documentation_test'
|
|
3
|
+
|
|
4
|
+
module Workarea
|
|
5
|
+
module Api
|
|
6
|
+
module Storefront
|
|
7
|
+
class PasswordResetsDocumentationTest < DocumentationTest
|
|
8
|
+
resource 'Password Resets'
|
|
9
|
+
|
|
10
|
+
def test_and_document_create
|
|
11
|
+
description 'Sending a forgot password email'
|
|
12
|
+
route storefront_api.password_resets_path
|
|
13
|
+
explanation <<-EOS
|
|
14
|
+
This will send a password reset email to the email address if there
|
|
15
|
+
is an account. The email will contain a link to the site where the
|
|
16
|
+
password reset can be completed.
|
|
17
|
+
EOS
|
|
18
|
+
|
|
19
|
+
record_request do
|
|
20
|
+
post storefront_api.password_resets_path,
|
|
21
|
+
as: :json,
|
|
22
|
+
params: { email: create_user.email }
|
|
23
|
+
|
|
24
|
+
assert_equal(200, response.status)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
require 'workarea/api/documentation_test'
|
|
3
|
+
|
|
4
|
+
module Workarea
|
|
5
|
+
module Api
|
|
6
|
+
module Storefront
|
|
7
|
+
class ProductsDocumentationTest < DocumentationTest
|
|
8
|
+
resource 'Products'
|
|
9
|
+
|
|
10
|
+
setup :set_product
|
|
11
|
+
|
|
12
|
+
def set_product
|
|
13
|
+
@product = create_product(
|
|
14
|
+
name: 'Nice Shirt',
|
|
15
|
+
filters: { size: %w[Small Medium Large], color: 'Blue' },
|
|
16
|
+
variants: [{ sku: 'SKU1', details: { color: 'Blue' }, regular: 2.to_m },
|
|
17
|
+
{ sku: 'SKU2', details: { color: 'Red' }, regular: 3.to_m }],
|
|
18
|
+
details: { size: 'Small', color: 'Red' },
|
|
19
|
+
images: [{ image: product_image_file, option: 'Blue' }]
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
# for recommendations
|
|
23
|
+
create_product(
|
|
24
|
+
name: 'Fall Jacket',
|
|
25
|
+
filters: { size: %w[Small Medium Large], color: 'Blue' },
|
|
26
|
+
variants: [{ sku: 'SKU1', details: { color: 'Blue' }, regular: 2.to_m }],
|
|
27
|
+
details: { size: 'Small' },
|
|
28
|
+
images: [{ image: product_image_file, option: 'Blue' }]
|
|
29
|
+
)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def test_and_document_show
|
|
33
|
+
description 'Showing a product'
|
|
34
|
+
route storefront_api.product_path(':slug')
|
|
35
|
+
explanation <<-EOS
|
|
36
|
+
This endpoint includes everything you need to render a product
|
|
37
|
+
detail page including, variants, images, and recommendations.
|
|
38
|
+
EOS
|
|
39
|
+
|
|
40
|
+
record_request do
|
|
41
|
+
get storefront_api.product_path(@product)
|
|
42
|
+
assert_equal(200, response.status)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def test_and_document_show_with_sku_param
|
|
47
|
+
description 'Showing a product with a specific SKU selected'
|
|
48
|
+
route storefront_api.product_path(':slug')
|
|
49
|
+
parameter 'sku', 'View products details specifically for this SKU'
|
|
50
|
+
explanation <<-EOS
|
|
51
|
+
This demonstrates how to get product details for a specific SKU.
|
|
52
|
+
This will result in pricing, inventory, and images to match the
|
|
53
|
+
storefront logic for that SKU.
|
|
54
|
+
EOS
|
|
55
|
+
|
|
56
|
+
record_request do
|
|
57
|
+
get storefront_api.product_path(@product, sku: 'SKU2')
|
|
58
|
+
assert_equal(200, response.status)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
require 'workarea/api/documentation_test'
|
|
3
|
+
|
|
4
|
+
module Workarea
|
|
5
|
+
module Api
|
|
6
|
+
module Storefront
|
|
7
|
+
class RecentViewsDocumentationTest < DocumentationTest
|
|
8
|
+
include AuthenticationTest
|
|
9
|
+
|
|
10
|
+
resource 'Recent views'
|
|
11
|
+
|
|
12
|
+
def test_and_document_updating_with_authentication
|
|
13
|
+
description 'Updating recent views with authentication'
|
|
14
|
+
route storefront_api.recent_views_path
|
|
15
|
+
explanation <<-EOS
|
|
16
|
+
Use this endpoint like this to keep a accurate list of recent
|
|
17
|
+
activity by the authenticated customer. Each of the three resources
|
|
18
|
+
being tracked (products, categories, searches) are optional.
|
|
19
|
+
EOS
|
|
20
|
+
|
|
21
|
+
user = create_user
|
|
22
|
+
auth = user.authentication_tokens.create!
|
|
23
|
+
|
|
24
|
+
record_request do
|
|
25
|
+
patch storefront_api.recent_views_path,
|
|
26
|
+
headers: { 'HTTP_AUTHORIZATION' => encode_credentials(auth.token) },
|
|
27
|
+
as: :json,
|
|
28
|
+
params: {
|
|
29
|
+
product_id: '367A8BB9B5',
|
|
30
|
+
category_id: '596e739b021823358aabe9df',
|
|
31
|
+
search: 'shirts'
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
assert_equal(200, response.status)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_and_document_updating_by_session_id
|
|
39
|
+
description 'Updating recent views with a session_id'
|
|
40
|
+
route storefront_api.recent_views_path
|
|
41
|
+
parameter 'session_id', 'A unique session_id you keep for an anonymous browser'
|
|
42
|
+
explanation <<-EOS
|
|
43
|
+
You can also use this endpoint to maintain a recent activity for an
|
|
44
|
+
anonymous browser. Use a consistent session_id to maintain
|
|
45
|
+
continuity.
|
|
46
|
+
EOS
|
|
47
|
+
|
|
48
|
+
record_request do
|
|
49
|
+
patch storefront_api.recent_views_path,
|
|
50
|
+
as: :json,
|
|
51
|
+
params: {
|
|
52
|
+
session_id: ':session_id',
|
|
53
|
+
product_id: '367A8BB9B5',
|
|
54
|
+
category_id: '596e739b021823358aabe9df',
|
|
55
|
+
search: 'shirts'
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
assert_equal(200, response.status)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def test_and_document_showing_by_authentication
|
|
63
|
+
description 'Showing recent views from authentication'
|
|
64
|
+
route storefront_api.recent_views_path
|
|
65
|
+
explanation <<-EOS
|
|
66
|
+
Display recent views based on the currently authenticated customer.
|
|
67
|
+
EOS
|
|
68
|
+
|
|
69
|
+
user = create_user
|
|
70
|
+
auth = user.authentication_tokens.create!
|
|
71
|
+
|
|
72
|
+
product = create_product(name: 'Cool Shirt')
|
|
73
|
+
category = create_category(name: 'Shirts')
|
|
74
|
+
activity = create_user_activity(
|
|
75
|
+
product_ids: [product.id],
|
|
76
|
+
category_ids: [category.id],
|
|
77
|
+
searches: ['shirt']
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
record_request do
|
|
81
|
+
get storefront_api.recent_views_path,
|
|
82
|
+
headers: { 'HTTP_AUTHORIZATION' => encode_credentials(auth.token) }
|
|
83
|
+
|
|
84
|
+
assert_equal(200, response.status)
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def test_and_document_showing_by_session_id
|
|
89
|
+
description 'Showing recent views with a session_id'
|
|
90
|
+
route storefront_api.recent_views_path
|
|
91
|
+
parameter 'session_id', 'A unique session_id you keep for an anonymous browser'
|
|
92
|
+
explanation <<-EOS
|
|
93
|
+
Display recent views based on a session_id you've kept for an
|
|
94
|
+
anonymous browser (as opposed to displaying them based on
|
|
95
|
+
authentication).
|
|
96
|
+
EOS
|
|
97
|
+
|
|
98
|
+
product = create_product(name: 'Cool Shirt')
|
|
99
|
+
category = create_category(name: 'Shirts')
|
|
100
|
+
activity = create_user_activity(
|
|
101
|
+
product_ids: [product.id],
|
|
102
|
+
category_ids: [category.id],
|
|
103
|
+
searches: ['shirt']
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
record_request do
|
|
107
|
+
get storefront_api.recent_views_path,
|
|
108
|
+
params: { session_id: activity.id }
|
|
109
|
+
|
|
110
|
+
assert_equal(200, response.status)
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
require 'workarea/api/documentation_test'
|
|
3
|
+
|
|
4
|
+
module Workarea
|
|
5
|
+
module Api
|
|
6
|
+
module Storefront
|
|
7
|
+
class RecommendationsDocumentationTest < DocumentationTest
|
|
8
|
+
include AuthenticationTest
|
|
9
|
+
|
|
10
|
+
resource 'Personalized Recommendations'
|
|
11
|
+
|
|
12
|
+
setup :set_auth
|
|
13
|
+
setup :set_products
|
|
14
|
+
setup :set_user_activity
|
|
15
|
+
|
|
16
|
+
def set_auth
|
|
17
|
+
user = create_user
|
|
18
|
+
@auth = user.authentication_tokens.create!
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def set_products
|
|
22
|
+
10.times { create_product }
|
|
23
|
+
|
|
24
|
+
top_products = Catalog::Product.sample(10).map { |p| { 'product_id' => p.id } }
|
|
25
|
+
create_top_products(results: top_products)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def set_user_activity
|
|
29
|
+
@activity = create_user_activity
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def test_and_document_showing_by_authentication
|
|
33
|
+
description 'Showing recommendations with authentication'
|
|
34
|
+
route storefront_api.recommendations_path
|
|
35
|
+
explanation <<-EOS
|
|
36
|
+
Display personalized recommendations based on the currently
|
|
37
|
+
authenticated customer.
|
|
38
|
+
EOS
|
|
39
|
+
|
|
40
|
+
record_request do
|
|
41
|
+
get storefront_api.recommendations_path,
|
|
42
|
+
headers: { 'HTTP_AUTHORIZATION' => encode_credentials(@auth.token) }
|
|
43
|
+
|
|
44
|
+
assert_equal(200, response.status)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def test_and_document_showing_by_session_id
|
|
49
|
+
description 'Showing recommendations with a session ID'
|
|
50
|
+
route storefront_api.recommendations_path
|
|
51
|
+
parameter 'session_id', 'A unique session_id you keep for an anonymous browser'
|
|
52
|
+
explanation <<-EOS
|
|
53
|
+
Display personalized recommendations based on a session ID that
|
|
54
|
+
you've maintained for an anonymous browser (as opposed to
|
|
55
|
+
authentication).
|
|
56
|
+
EOS
|
|
57
|
+
|
|
58
|
+
record_request do
|
|
59
|
+
get storefront_api.recommendations_path,
|
|
60
|
+
params: { session_id: @activity.id }
|
|
61
|
+
|
|
62
|
+
assert_equal(200, response.status)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|