workarea-api-admin 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 (178) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/README.md +82 -0
  4. data/Rakefile +10 -0
  5. data/app/assets/images/workarea/api/admin/icons/api.svg +1 -0
  6. data/app/controllers/workarea/api/admin/application_controller.rb +73 -0
  7. data/app/controllers/workarea/api/admin/categories_controller.rb +305 -0
  8. data/app/controllers/workarea/api/admin/category_product_rules_controller.rb +232 -0
  9. data/app/controllers/workarea/api/admin/content_assets_controller.rb +299 -0
  10. data/app/controllers/workarea/api/admin/content_controller.rb +268 -0
  11. data/app/controllers/workarea/api/admin/discounts_controller.rb +271 -0
  12. data/app/controllers/workarea/api/admin/email_signups_controller.rb +108 -0
  13. data/app/controllers/workarea/api/admin/fulfillments_controller.rb +268 -0
  14. data/app/controllers/workarea/api/admin/inventory_skus_controller.rb +305 -0
  15. data/app/controllers/workarea/api/admin/navigation_menus_controller.rb +267 -0
  16. data/app/controllers/workarea/api/admin/navigation_taxons_controller.rb +305 -0
  17. data/app/controllers/workarea/api/admin/orders_controller.rb +160 -0
  18. data/app/controllers/workarea/api/admin/pages_controller.rb +305 -0
  19. data/app/controllers/workarea/api/admin/payment_profiles_controller.rb +305 -0
  20. data/app/controllers/workarea/api/admin/payment_transactions_controller.rb +108 -0
  21. data/app/controllers/workarea/api/admin/payments_controller.rb +115 -0
  22. data/app/controllers/workarea/api/admin/prices_controller.rb +232 -0
  23. data/app/controllers/workarea/api/admin/pricing_skus_controller.rb +305 -0
  24. data/app/controllers/workarea/api/admin/product_images_controller.rb +232 -0
  25. data/app/controllers/workarea/api/admin/products_controller.rb +305 -0
  26. data/app/controllers/workarea/api/admin/promo_code_lists_controller.rb +305 -0
  27. data/app/controllers/workarea/api/admin/recommendation_settings_controller.rb +122 -0
  28. data/app/controllers/workarea/api/admin/redirects_controller.rb +305 -0
  29. data/app/controllers/workarea/api/admin/releases_controller.rb +304 -0
  30. data/app/controllers/workarea/api/admin/saved_addresses_controller.rb +232 -0
  31. data/app/controllers/workarea/api/admin/saved_credit_cards_controller.rb +256 -0
  32. data/app/controllers/workarea/api/admin/shipping_rates_controller.rb +232 -0
  33. data/app/controllers/workarea/api/admin/shipping_services_controller.rb +299 -0
  34. data/app/controllers/workarea/api/admin/shippings_controller.rb +105 -0
  35. data/app/controllers/workarea/api/admin/swagger_controller.rb +41 -0
  36. data/app/controllers/workarea/api/admin/tax_categories_controller.rb +242 -0
  37. data/app/controllers/workarea/api/admin/tax_rates_controller.rb +292 -0
  38. data/app/controllers/workarea/api/admin/users_controller.rb +296 -0
  39. data/app/controllers/workarea/api/admin/variants_controller.rb +232 -0
  40. data/app/models/workarea/api/admin/bulk_upsert.rb +74 -0
  41. data/app/models/workarea/user.decorator +7 -0
  42. data/app/views/workarea/admin/users/_api_permissions.html.haml +6 -0
  43. data/app/workers/workarea/perform_api_bulk_upsert.rb +15 -0
  44. data/bin/rails +18 -0
  45. data/config/initializers/append_points.rb +4 -0
  46. data/config/initializers/config.rb +15 -0
  47. data/config/locales/en.yml +9 -0
  48. data/config/routes.rb +81 -0
  49. data/lib/workarea/api/admin.rb +21 -0
  50. data/lib/workarea/api/admin/engine.rb +14 -0
  51. data/lib/workarea/api/admin/swagger.rb +106 -0
  52. data/test/documentation/workarea/api/admin/categories_documentation_test.rb +106 -0
  53. data/test/documentation/workarea/api/admin/category_product_rules_documentation_test.rb +78 -0
  54. data/test/documentation/workarea/api/admin/content_assets_documentation_test.rb +94 -0
  55. data/test/documentation/workarea/api/admin/content_documentation_test.rb +87 -0
  56. data/test/documentation/workarea/api/admin/discounts_documentation_test.rb +85 -0
  57. data/test/documentation/workarea/api/admin/email_signups_documentation_test.rb +41 -0
  58. data/test/documentation/workarea/api/admin/fulfillment_documentation_test.rb +84 -0
  59. data/test/documentation/workarea/api/admin/inventory_skus_documentation_test.rb +95 -0
  60. data/test/documentation/workarea/api/admin/navigation_menus_documentation_test.rb +81 -0
  61. data/test/documentation/workarea/api/admin/navigation_taxons_documentation_test.rb +94 -0
  62. data/test/documentation/workarea/api/admin/orders_documentation_test.rb +65 -0
  63. data/test/documentation/workarea/api/admin/pages_documentation_test.rb +93 -0
  64. data/test/documentation/workarea/api/admin/payment_profiles_documentation_test.rb +98 -0
  65. data/test/documentation/workarea/api/admin/payment_transactions_documentation_test.rb +43 -0
  66. data/test/documentation/workarea/api/admin/payments_documentation_test.rb +41 -0
  67. data/test/documentation/workarea/api/admin/prices_documentation_test.rb +82 -0
  68. data/test/documentation/workarea/api/admin/pricing_skus_documentation_test.rb +95 -0
  69. data/test/documentation/workarea/api/admin/product_images_documentation_test.rb +101 -0
  70. data/test/documentation/workarea/api/admin/products_documentation_test.rb +96 -0
  71. data/test/documentation/workarea/api/admin/promo_code_lists_documentation_test.rb +94 -0
  72. data/test/documentation/workarea/api/admin/recommendation_settings_documentation_test.rb +37 -0
  73. data/test/documentation/workarea/api/admin/redirects_documentation_test.rb +96 -0
  74. data/test/documentation/workarea/api/admin/release_changes_documentation_test.rb +32 -0
  75. data/test/documentation/workarea/api/admin/releases_documentation_test.rb +93 -0
  76. data/test/documentation/workarea/api/admin/saved_addresses_documentation_test.rb +92 -0
  77. data/test/documentation/workarea/api/admin/saved_credit_cards_documentation_test.rb +86 -0
  78. data/test/documentation/workarea/api/admin/shipping_rates_documentation_test.rb +78 -0
  79. data/test/documentation/workarea/api/admin/shipping_services_documentation_test.rb +93 -0
  80. data/test/documentation/workarea/api/admin/shippings_documentation_test.rb +41 -0
  81. data/test/documentation/workarea/api/admin/tax_categories_documentation_test.rb +95 -0
  82. data/test/documentation/workarea/api/admin/tax_rates_documentation_test.rb +78 -0
  83. data/test/documentation/workarea/api/admin/users_documentation_test.rb +99 -0
  84. data/test/documentation/workarea/api/admin/variants_documentation_test.rb +80 -0
  85. data/test/dummy/Rakefile +7 -0
  86. data/test/dummy/app/assets/config/manifest.js +4 -0
  87. data/test/dummy/app/assets/images/.keep +0 -0
  88. data/test/dummy/app/assets/javascripts/application.js +13 -0
  89. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  90. data/test/dummy/app/controllers/application_controller.rb +3 -0
  91. data/test/dummy/app/controllers/concerns/.keep +0 -0
  92. data/test/dummy/app/helpers/application_helper.rb +2 -0
  93. data/test/dummy/app/jobs/application_job.rb +2 -0
  94. data/test/dummy/app/mailers/.keep +0 -0
  95. data/test/dummy/app/mailers/application_mailer.rb +4 -0
  96. data/test/dummy/app/models/.keep +0 -0
  97. data/test/dummy/app/models/concerns/.keep +0 -0
  98. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  99. data/test/dummy/app/views/layouts/mailer.html.erb +13 -0
  100. data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
  101. data/test/dummy/bin/bundle +3 -0
  102. data/test/dummy/bin/rails +4 -0
  103. data/test/dummy/bin/rake +4 -0
  104. data/test/dummy/bin/setup +34 -0
  105. data/test/dummy/bin/update +29 -0
  106. data/test/dummy/config.ru +4 -0
  107. data/test/dummy/config/application.rb +25 -0
  108. data/test/dummy/config/boot.rb +5 -0
  109. data/test/dummy/config/cable.yml +9 -0
  110. data/test/dummy/config/environment.rb +5 -0
  111. data/test/dummy/config/environments/development.rb +55 -0
  112. data/test/dummy/config/environments/production.rb +86 -0
  113. data/test/dummy/config/environments/test.rb +43 -0
  114. data/test/dummy/config/initializers/application_controller_renderer.rb +6 -0
  115. data/test/dummy/config/initializers/assets.rb +11 -0
  116. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  117. data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
  118. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  119. data/test/dummy/config/initializers/inflections.rb +16 -0
  120. data/test/dummy/config/initializers/mime_types.rb +4 -0
  121. data/test/dummy/config/initializers/new_framework_defaults.rb +21 -0
  122. data/test/dummy/config/initializers/session_store.rb +3 -0
  123. data/test/dummy/config/initializers/workarea.rb +8 -0
  124. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  125. data/test/dummy/config/locales/en.yml +23 -0
  126. data/test/dummy/config/puma.rb +47 -0
  127. data/test/dummy/config/routes.rb +6 -0
  128. data/test/dummy/config/secrets.yml +22 -0
  129. data/test/dummy/config/spring.rb +6 -0
  130. data/test/dummy/db/seeds.rb +2 -0
  131. data/test/dummy/log/.keep +0 -0
  132. data/test/dummy/public/404.html +67 -0
  133. data/test/dummy/public/422.html +67 -0
  134. data/test/dummy/public/500.html +66 -0
  135. data/test/dummy/public/apple-touch-icon-precomposed.png +0 -0
  136. data/test/dummy/public/apple-touch-icon.png +0 -0
  137. data/test/dummy/public/favicon.ico +1 -0
  138. data/test/integration/workarea/api/admin/audit_log_integration_test.rb +20 -0
  139. data/test/integration/workarea/api/admin/authentication_integration_test.rb +61 -0
  140. data/test/integration/workarea/api/admin/categories_integration_test.rb +64 -0
  141. data/test/integration/workarea/api/admin/category_product_rules_integration_test.rb +58 -0
  142. data/test/integration/workarea/api/admin/content_assets_integration_test.rb +65 -0
  143. data/test/integration/workarea/api/admin/content_integration_test.rb +59 -0
  144. data/test/integration/workarea/api/admin/discounts_integration_test.rb +64 -0
  145. data/test/integration/workarea/api/admin/email_signups_integration_test.rb +32 -0
  146. data/test/integration/workarea/api/admin/error_handling_integration_test.rb +16 -0
  147. data/test/integration/workarea/api/admin/fulfillments_integration_test.rb +62 -0
  148. data/test/integration/workarea/api/admin/inventory_skus_integration_test.rb +70 -0
  149. data/test/integration/workarea/api/admin/navigation_menus_integration_test.rb +54 -0
  150. data/test/integration/workarea/api/admin/navigation_taxons_integration_test.rb +63 -0
  151. data/test/integration/workarea/api/admin/orders_integration_test.rb +53 -0
  152. data/test/integration/workarea/api/admin/pages_integration_test.rb +64 -0
  153. data/test/integration/workarea/api/admin/payment_profiles_integration_test.rb +75 -0
  154. data/test/integration/workarea/api/admin/payment_transactions_integration_test.rb +45 -0
  155. data/test/integration/workarea/api/admin/payments_integration_test.rb +29 -0
  156. data/test/integration/workarea/api/admin/prices_integration_test.rb +55 -0
  157. data/test/integration/workarea/api/admin/pricing_skus_integration_test.rb +72 -0
  158. data/test/integration/workarea/api/admin/product_images_integration_test.rb +56 -0
  159. data/test/integration/workarea/api/admin/products_integration_test.rb +66 -0
  160. data/test/integration/workarea/api/admin/promo_code_lists_integration_test.rb +70 -0
  161. data/test/integration/workarea/api/admin/recommendation_settings_integration_test.rb +41 -0
  162. data/test/integration/workarea/api/admin/redirects_integration_test.rb +69 -0
  163. data/test/integration/workarea/api/admin/release_changes_integration_test.rb +32 -0
  164. data/test/integration/workarea/api/admin/releases_integration_test.rb +60 -0
  165. data/test/integration/workarea/api/admin/saved_addresses_integration_test.rb +70 -0
  166. data/test/integration/workarea/api/admin/saved_credit_cards_integration_test.rb +76 -0
  167. data/test/integration/workarea/api/admin/shipping_rates_integration_test.rb +54 -0
  168. data/test/integration/workarea/api/admin/shipping_services_integration_test.rb +64 -0
  169. data/test/integration/workarea/api/admin/shippings_integration_test.rb +34 -0
  170. data/test/integration/workarea/api/admin/tax_categories_integration_test.rb +64 -0
  171. data/test/integration/workarea/api/admin/tax_rates_integration_test.rb +66 -0
  172. data/test/integration/workarea/api/admin/users_integration_test.rb +67 -0
  173. data/test/integration/workarea/api/admin/variants_integration_test.rb +59 -0
  174. data/test/models/workarea/api/admin/bulk_upsert_test.rb +79 -0
  175. data/test/test_helper.rb +10 -0
  176. data/test/vcr_cassettes/product_image_from_url.yml +43 -0
  177. data/workarea-api-admin.gemspec +18 -0
  178. metadata +252 -0
@@ -0,0 +1,76 @@
1
+ require 'test_helper'
2
+
3
+ module Workarea
4
+ module Api
5
+ module Admin
6
+ class SavedCreditCardsIntegrationTest < IntegrationTest
7
+ include Workarea::Admin::IntegrationTest
8
+
9
+ setup :set_sample_attributes
10
+
11
+ def set_sample_attributes
12
+ @profile = create_payment_profile
13
+ @sample_attributes = create_saved_credit_card(profile_id: @profile.id)
14
+ .as_json
15
+ .except('_id')
16
+ end
17
+
18
+ def test_lists_credit_cards
19
+ credit_cards = [
20
+ create_saved_credit_card(profile: @profile),
21
+ create_saved_credit_card(profile: @profile)
22
+ ]
23
+
24
+ get admin_api.payment_profile_saved_credit_cards_path(@profile)
25
+ result = JSON.parse(response.body)['saved_credit_cards']
26
+
27
+ assert_equal(2, result.length)
28
+ assert_equal(
29
+ credit_cards.first,
30
+ Payment::SavedCreditCard.new(result.first)
31
+ )
32
+ assert_equal(
33
+ credit_cards.second,
34
+ Payment::SavedCreditCard.new(result.second)
35
+ )
36
+ end
37
+
38
+ def test_creates_credit_cards
39
+ assert_difference 'Payment::SavedCreditCard.count', 1 do
40
+ post admin_api.payment_profile_saved_credit_cards_path(@profile),
41
+ params: { saved_credit_card: @sample_attributes }
42
+ end
43
+ end
44
+
45
+ def test_shows_credit_cards
46
+ credit_card = create_saved_credit_card(profile: @profile)
47
+ get admin_api.payment_profile_saved_credit_card_path(@profile, credit_card)
48
+ result = JSON.parse(response.body)['saved_credit_card']
49
+ assert_equal(credit_card, Payment::SavedCreditCard.new(result))
50
+ end
51
+
52
+ def test_updates_credit_cards
53
+ credit_card = create_saved_credit_card(profile: @profile)
54
+ patch admin_api.payment_profile_saved_credit_card_path(@profile, credit_card),
55
+ params: { saved_credit_card: { first_name: 'Ben' } }
56
+
57
+ assert_equal('Ben', credit_card.reload.first_name)
58
+ end
59
+
60
+ def test_bulk_upserts_credit_cards
61
+ assert_difference 'Payment::SavedCreditCard.count', 10 do
62
+ patch admin_api.bulk_payment_profile_saved_credit_cards_path(@profile),
63
+ params: { saved_credit_cards: [@sample_attributes] * 10 }
64
+ end
65
+ end
66
+
67
+ def test_destroys_credit_cards
68
+ credit_card = create_saved_credit_card(profile: @profile)
69
+ assert_difference 'Payment::SavedCreditCard.count', -1 do
70
+ delete admin_api.payment_profile_saved_credit_card_path(@profile, credit_card)
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,54 @@
1
+ require 'test_helper'
2
+
3
+ module Workarea
4
+ module Api
5
+ module Admin
6
+ class ShippingRatesIntegrationTest < IntegrationTest
7
+ include Workarea::Admin::IntegrationTest
8
+
9
+ setup :set_sample_attributes
10
+
11
+ def set_sample_attributes
12
+ @shipping_service = create_shipping_service
13
+ @sample_attributes = @shipping_service.rates.first.as_json.except('_id')
14
+ end
15
+
16
+ def create_rate
17
+ @shipping_service.rates.create!(@sample_attributes)
18
+ end
19
+
20
+ def test_lists_rates
21
+ rates = [create_rate, create_rate]
22
+ get admin_api.shipping_service_rates_path(@shipping_service.id)
23
+ result = JSON.parse(response.body)['rates']
24
+
25
+ assert_equal(3, result.length) # one pre-existing rate
26
+ assert_equal(rates.first, Shipping::Rate.new(result.second))
27
+ assert_equal(rates.second, Shipping::Rate.new(result.third))
28
+ end
29
+
30
+ def test_creates_rates
31
+ assert_difference '@shipping_service.reload.rates.count', 1 do
32
+ post admin_api.shipping_service_rates_path(@shipping_service.id),
33
+ params: { rate: @sample_attributes }
34
+ end
35
+ end
36
+
37
+ def test_updates_rates
38
+ rate = create_rate
39
+ patch admin_api.shipping_service_rate_path(@shipping_service.id, rate.id),
40
+ params: { rate: { price: 21 } }
41
+
42
+ assert_equal(21.to_m, rate.reload.price)
43
+ end
44
+
45
+ def test_destroys_rates
46
+ rate = create_rate
47
+ assert_difference '@shipping_service.reload.rates.count', -1 do
48
+ delete admin_api.shipping_service_rate_path(@shipping_service.id, rate.id)
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,64 @@
1
+ require 'test_helper'
2
+
3
+ module Workarea
4
+ module Api
5
+ module Admin
6
+ class ShippingServicesIntegrationTest < IntegrationTest
7
+ include Workarea::Admin::IntegrationTest
8
+
9
+ setup :set_sample_attributes
10
+
11
+ def set_sample_attributes
12
+ @sample_attributes = create_shipping_service.as_json.except('_id')
13
+ end
14
+
15
+ def test_lists_shipping_services
16
+ shipping_services = [create_shipping_service, create_shipping_service]
17
+ get admin_api.shipping_services_path
18
+ result = JSON.parse(response.body)['shipping_services']
19
+
20
+ assert_equal(3, result.length)
21
+ assert_equal(shipping_services.second, Shipping::Service.new(result.first))
22
+ assert_equal(shipping_services.first, Shipping::Service.new(result.second))
23
+ end
24
+
25
+ def test_creates_shipping_services
26
+ assert_difference 'Shipping::Service.count', 1 do
27
+ post admin_api.shipping_services_path,
28
+ params: { shipping_service: @sample_attributes }
29
+ end
30
+ end
31
+
32
+ def test_shows_shipping_services
33
+ shipping_service = create_shipping_service
34
+ get admin_api.shipping_service_path(shipping_service.id)
35
+ result = JSON.parse(response.body)['shipping_service']
36
+ assert_equal(shipping_service, Shipping::Service.new(result))
37
+ end
38
+
39
+ def test_updates_shipping_services
40
+ shipping_service = create_shipping_service
41
+ patch admin_api.shipping_service_path(shipping_service.id),
42
+ params: { shipping_service: { name: 'foo' } }
43
+
44
+ assert_equal('foo', shipping_service.reload.name)
45
+ end
46
+
47
+ def test_bulk_upserts_shipping_services
48
+ assert_difference 'Shipping::Service.count', 10 do
49
+ patch admin_api.bulk_shipping_services_path,
50
+ params: { shipping_services: [@sample_attributes] * 10 }
51
+ end
52
+ end
53
+
54
+ def test_destroys_shipping_services
55
+ shipping_service = create_shipping_service
56
+
57
+ assert_difference 'Shipping::Service.count', -1 do
58
+ delete admin_api.shipping_service_path(shipping_service.id)
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,34 @@
1
+ require 'test_helper'
2
+
3
+ module Workarea
4
+ module Api
5
+ module Admin
6
+ class ShippingsIntegrationTest < IntegrationTest
7
+ include Workarea::Admin::IntegrationTest
8
+
9
+ setup :set_sample_attributes
10
+
11
+ def set_sample_attributes
12
+ @sample_attributes = create_shipping.as_json.except('_id')
13
+ end
14
+
15
+ def test_lists_shippings
16
+ shippings = [create_shipping, create_shipping]
17
+ get admin_api.shippings_path
18
+ result = JSON.parse(response.body)['shippings']
19
+
20
+ assert_equal(3, result.length)
21
+ assert_equal(shippings.second, Shipping.new(result.first))
22
+ assert_equal(shippings.first, Shipping.new(result.second))
23
+ end
24
+
25
+ def test_shows_shippings
26
+ shipping = create_shipping
27
+ get admin_api.shipping_path(shipping.id)
28
+ result = JSON.parse(response.body)['shipping']
29
+ assert_equal(shipping, Shipping.new(result))
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,64 @@
1
+ require 'test_helper'
2
+
3
+ module Workarea
4
+ module Api
5
+ module Admin
6
+ class TaxCategoriesIntegrationTest < IntegrationTest
7
+ include Workarea::Admin::IntegrationTest
8
+
9
+ def sample_attributes
10
+ @count ||= 0
11
+ @count += 1
12
+
13
+ create_tax_category.as_json.except('_id').merge('code' => "00#{@count}")
14
+ end
15
+
16
+ def test_lists_tax_categories
17
+ tax_categories = [create_tax_category, create_tax_category]
18
+ get admin_api.tax_categories_path
19
+ result = JSON.parse(response.body)['tax_categories']
20
+
21
+ assert_equal(2, result.length)
22
+ assert_equal(tax_categories.second, Tax::Category.new(result.first))
23
+ assert_equal(tax_categories.first, Tax::Category.new(result.second))
24
+ end
25
+
26
+ def test_creates_tax_categories
27
+ data = sample_attributes
28
+ assert_difference 'Tax::Category.count', 1 do
29
+ post admin_api.tax_categories_path, params: { tax_category: data }
30
+ end
31
+ end
32
+
33
+ def test_shows_tax_categories
34
+ tax_category = create_tax_category
35
+ get admin_api.tax_category_path(tax_category.id)
36
+ result = JSON.parse(response.body)['tax_category']
37
+ assert_equal(tax_category, Tax::Category.new(result))
38
+ end
39
+
40
+ def test_updates_tax_categories
41
+ tax_category = create_tax_category
42
+ patch admin_api.tax_category_path(tax_category.id),
43
+ params: { tax_category: { name: 'foo' } }
44
+
45
+ assert_equal('foo', tax_category.reload.name)
46
+ end
47
+
48
+ def test_bulk_upserts_tax_categories
49
+ data = Array.new(10) { sample_attributes }
50
+ assert_difference 'Tax::Category.count', 10 do
51
+ patch admin_api.bulk_tax_categories_path, params: { tax_categories: data }
52
+ end
53
+ end
54
+
55
+ def test_destroys_tax_categories
56
+ tax_category = create_tax_category
57
+ assert_difference 'Tax::Category.count', -1 do
58
+ delete admin_api.tax_category_path(tax_category.id)
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,66 @@
1
+ require 'test_helper'
2
+
3
+ module Workarea
4
+ module Api
5
+ module Admin
6
+ class TaxRatesIntegrationTest < IntegrationTest
7
+ include Workarea::Admin::IntegrationTest
8
+
9
+ setup :set_sample_attributes
10
+
11
+ def set_sample_attributes
12
+ @tax_category = create_tax_category(rates: [])
13
+ @sample_attributes = { percentage: 0.06, country: 'US', region: 'PA' }
14
+ end
15
+
16
+ def create_tax_rate
17
+ @tax_category.rates.create!(@sample_attributes)
18
+ end
19
+
20
+ def test_lists_tax_rates
21
+ 2.times { create_tax_rate }
22
+ get admin_api.tax_category_rates_path(@tax_category)
23
+ result = JSON.parse(response.body)['rates']
24
+ assert_equal(2, result.length)
25
+ end
26
+
27
+ def test_creates_tax_rates
28
+ assert_difference 'Tax::Rate.count', 1 do
29
+ post admin_api.tax_category_rates_path(@tax_category),
30
+ params: { rate: @sample_attributes }
31
+ end
32
+ end
33
+
34
+ def test_shows_tax_rates
35
+ tax_rate = create_tax_rate
36
+ get admin_api.tax_category_rate_path(@tax_category, tax_rate)
37
+ result = JSON.parse(response.body)['rate']
38
+ assert_equal(tax_rate, Tax::Rate.new(result))
39
+ end
40
+
41
+ def test_updates_tax_rates
42
+ tax_rate = create_tax_rate
43
+ patch admin_api.tax_category_rate_path(@tax_category, tax_rate),
44
+ params: { rate: { percentage: 0.08 } }
45
+
46
+ assert_equal(0.08, tax_rate.reload.percentage)
47
+ end
48
+
49
+ def test_bulk_upserts_tax_rates
50
+ assert_difference 'Tax::Rate.count', 10 do
51
+ patch admin_api.bulk_tax_category_rates_path(@tax_category),
52
+ params: { rates: [@sample_attributes] * 10 }
53
+ end
54
+ end
55
+
56
+ def test_destroys_tax_rates
57
+ tax_rate = create_tax_rate
58
+
59
+ assert_difference 'Tax::Rate.count', -1 do
60
+ delete admin_api.tax_category_rate_path(@tax_category, tax_rate)
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,67 @@
1
+ require 'test_helper'
2
+
3
+ module Workarea
4
+ module Api
5
+ module Admin
6
+ class UsersIntegrationTest < IntegrationTest
7
+ include Workarea::Admin::IntegrationTest
8
+
9
+ def sample_attributes
10
+ @count ||= 0
11
+ @count += 1
12
+
13
+ create_user
14
+ .as_json
15
+ .except('_id', 'token')
16
+ .merge('email' => "api#{@count}@workarea.com")
17
+ end
18
+
19
+ def test_lists_users
20
+ users = [create_user, create_user]
21
+ get admin_api.users_path
22
+ result = JSON.parse(response.body)['users']
23
+
24
+ assert_equal(3, result.length) # plus one for API auth
25
+ assert_equal(users.second, User.new(result.first))
26
+ assert_equal(users.first, User.new(result.second))
27
+ end
28
+
29
+ def test_creates_users
30
+ data = sample_attributes
31
+ assert_difference 'User.count', 1 do
32
+ post admin_api.users_path, params: { user: data }
33
+ end
34
+ end
35
+
36
+ def test_shows_users
37
+ user = create_user
38
+ get admin_api.user_path(user.id)
39
+ result = JSON.parse(response.body)['user']
40
+ assert(result['password_digest'].blank?)
41
+ assert_equal(user, User.new(result))
42
+ end
43
+
44
+ def test_updates_users
45
+ user = create_user
46
+ patch admin_api.user_path(user.id), params: { user: { first_name: 'Foo' } }
47
+ assert_equal('Foo', user.reload.first_name)
48
+ end
49
+
50
+ def test_bulk_upserts_users
51
+ data = Array.new(10) { sample_attributes }
52
+ assert_difference 'User.count', 10 do
53
+ patch admin_api.bulk_users_path, params: { users: data }
54
+ end
55
+ end
56
+
57
+ def test_destroys_users
58
+ user = create_user
59
+
60
+ assert_difference 'User.count', -1 do
61
+ delete admin_api.user_path(user.id)
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,59 @@
1
+ require 'test_helper'
2
+
3
+ module Workarea
4
+ module Api
5
+ module Admin
6
+ class VariantsIntegrationTest < IntegrationTest
7
+ include Workarea::Admin::IntegrationTest
8
+
9
+ setup :set_sample_attributes
10
+
11
+ def set_sample_attributes
12
+ @product = create_product
13
+ @sample_attributes = @product.variants.first.as_json.except('_id')
14
+ end
15
+
16
+ def create_variant
17
+ @product.variants.create!(@sample_attributes)
18
+ end
19
+
20
+ def test_lists_variants
21
+ variants = [create_variant, create_variant]
22
+ get admin_api.product_variants_path(@product.id)
23
+ result = JSON.parse(response.body)['variants']
24
+
25
+ assert_equal(3, result.length) # one pre-existing variant
26
+
27
+ attrs = result.detect { |attr| attr['_id'] == variants.first.id.to_s }
28
+ assert_equal(variants.first, Catalog::Variant.new(attrs))
29
+
30
+ attrs = result.detect { |attr| attr['_id'] == variants.second.id.to_s }
31
+ assert_equal(variants.second, Catalog::Variant.new(attrs))
32
+ end
33
+
34
+ def test_creates_variants
35
+ data = @sample_attributes
36
+ assert_difference '@product.reload.variants.count', 1 do
37
+ post admin_api.product_variants_path(@product.id), params: { variant: data }
38
+ end
39
+ end
40
+
41
+ def test_updates_variants
42
+ variant = create_variant
43
+ patch admin_api.product_variant_path(@product.id, variant.id),
44
+ params: { variant: { name: 'foo' } }
45
+
46
+ assert_equal('foo', variant.reload.name)
47
+ end
48
+
49
+ def test_destroys_variants
50
+ variant = create_variant
51
+
52
+ assert_difference '@product.reload.variants.count', -1 do
53
+ delete admin_api.product_variant_path(@product.id, variant.id)
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end