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,21 @@
1
+ require 'responders'
2
+ require 'raddocs'
3
+ require 'swagger/blocks'
4
+
5
+ require 'workarea'
6
+ require 'workarea/admin'
7
+
8
+ module Workarea
9
+ module Api
10
+ module Admin
11
+ def self.authenticate(email, password)
12
+ user = User.find_for_login(email, password)
13
+ user.try(:api_access?) || user.try(:super_admin?) ? user : nil
14
+ end
15
+ end
16
+ end
17
+ end
18
+
19
+ require 'workarea/api/version'
20
+ require 'workarea/api/admin/engine'
21
+ require 'workarea/api/admin/swagger'
@@ -0,0 +1,14 @@
1
+ module Workarea
2
+ module Api
3
+ module Admin
4
+ class Engine < ::Rails::Engine
5
+ include Workarea::Plugin
6
+ isolate_namespace Workarea::Api::Admin
7
+
8
+ config.after_initialize do
9
+ Workarea::Api::Admin::Swagger.generate!
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,106 @@
1
+ module Workarea
2
+ module Api
3
+ module Admin
4
+ module Swagger
5
+ extend self
6
+
7
+ def models
8
+ @models ||= begin
9
+ result = Mongoid.models.select { |k| k.name.starts_with?('Workarea') }
10
+
11
+ result.reject! do |klass|
12
+ Workarea.config.api_admin_ignore_definitions.any? { |d| klass.name =~ d }
13
+ end
14
+
15
+ result += result.flat_map(&:subclasses)
16
+ result += [Mongoid::DocumentPath::Node]
17
+ result
18
+ end
19
+ end
20
+
21
+ def klasses
22
+ models + Workarea::Api::Admin::ApplicationController.subclasses
23
+ end
24
+
25
+ def add_fields(klass, dsl)
26
+ klass.fields.each do |name, metadata|
27
+ next if name == '_type'
28
+ default_value = if metadata.default_val.is_a?(Proc)
29
+ nil
30
+ else
31
+ metadata.default_val
32
+ end
33
+
34
+ dsl.property name do
35
+ case metadata.type.to_s
36
+ when 'BSON::ObjectId'
37
+ key :type, :string
38
+ when 'Date'
39
+ key :type, :string
40
+ key :format, :date
41
+ key :default, default_value.as_json if default_value.present?
42
+ when 'Time'
43
+ key :type, :string
44
+ key :format, 'date-time'
45
+ key :default, default_value.as_json if default_value.present?
46
+ when 'Array'
47
+ key :type, :array
48
+ key :default, default_value.to_a if default_value.present?
49
+ items { key :type, :string }
50
+ when 'Hash'
51
+ key :type, :object
52
+ key :additionalProperties, true
53
+ key :default, default_value.to_h if default_value.present?
54
+ when 'Boolean', 'Mongoid::Boolean'
55
+ key :type, :boolean
56
+ key :default, !!default_value if default_value.present?
57
+ when 'Integer'
58
+ key :type, :integer
59
+ key :default, default_value.to_i if default_value.present?
60
+ else
61
+ key :type, :string
62
+ key :default, default_value.to_s if default_value.present?
63
+ end
64
+ end
65
+ end
66
+ end
67
+
68
+ def add_relations(klass, dsl)
69
+ klass.relations.values.select(&:embedded?).each do |metadata|
70
+ dsl.property metadata.name do
71
+ if metadata.many?
72
+ key :type, :array
73
+ items { key :'$ref', metadata.klass.name }
74
+ else
75
+ key :'$ref', metadata.klass.name
76
+ end
77
+ end
78
+ end
79
+ end
80
+
81
+ def add_validators(klass, dsl)
82
+ required_attributes = klass
83
+ .validators
84
+ .select { |v| v.is_a?(Mongoid::Validatable::PresenceValidator) }
85
+ .flat_map(&:attributes)
86
+ .select { |a| klass.fields.key?(a) }
87
+
88
+ dsl.key :required, required_attributes if required_attributes.any?
89
+ end
90
+
91
+ def generate!
92
+ models.each do |klass|
93
+ klass.include(::Swagger::Blocks)
94
+ klass.instance_eval do
95
+ swagger_schema klass.name do
96
+ Swagger.add_validators(klass, self)
97
+ Swagger.add_fields(klass, self)
98
+ Swagger.add_relations(klass, self)
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,106 @@
1
+ require 'test_helper'
2
+ require 'workarea/api/documentation_test'
3
+
4
+ module Workarea
5
+ module Api
6
+ module Admin
7
+ class CategoriesDocumentationTest < DocumentationTest
8
+ include Workarea::Admin::IntegrationTest
9
+
10
+ resource 'Categories'
11
+
12
+ def sample_attributes
13
+ create_category(
14
+ product_rules: [{ name: 'search', operator: 'equals', value: '*' }]
15
+ ).as_json.except('_id', 'slug')
16
+ end
17
+
18
+ def test_and_document_index
19
+ description 'Listing categories'
20
+ route admin_api.categories_path
21
+ parameter :page, 'Current page'
22
+ parameter :sort_by, 'Field on which to sort (see responses for possible values)'
23
+ parameter :sort_direction, 'Direction to sort (asc or desc)'
24
+
25
+ 2.times do
26
+ create_category(
27
+ product_rules: [{ name: 'search', operator: 'equals', value: '*' }]
28
+ )
29
+ end
30
+
31
+ record_request do
32
+ get admin_api.categories_path,
33
+ params: { page: 1, sort_by: 'created_at', sort_direction: 'desc' }
34
+ assert_equal(200, response.status)
35
+ end
36
+ end
37
+
38
+ def test_and_document_create
39
+ description 'Creating a category'
40
+ route admin_api.categories_path
41
+
42
+ record_request do
43
+ post admin_api.categories_path, params: sample_attributes, as: :json
44
+ assert_equal(201, response.status)
45
+ end
46
+ end
47
+
48
+ def test_and_document_show
49
+ description 'Showing a category'
50
+ route admin_api.category_path(':id')
51
+
52
+ category = create_category(
53
+ product_rules: [{ name: 'search', operator: 'equals', value: '*' }]
54
+ )
55
+
56
+ record_request do
57
+ get admin_api.category_path(category.id)
58
+ assert_equal(200, response.status)
59
+ end
60
+ end
61
+
62
+ def test_and_document_update
63
+ description 'Updating a category'
64
+ route admin_api.category_path(':id')
65
+
66
+ category = create_category(
67
+ product_rules: [{ name: 'search', operator: 'equals', value: '*' }]
68
+ )
69
+
70
+ record_request do
71
+ patch admin_api.category_path(category.id),
72
+ params: sample_attributes,
73
+ as: :json
74
+
75
+ assert_equal(204, response.status)
76
+ end
77
+ end
78
+
79
+ def test_and_document_bulk_upsert
80
+ description 'Bulk upserting categories'
81
+ route admin_api.bulk_categories_path
82
+
83
+ record_request do
84
+ patch admin_api.bulk_categories_path,
85
+ params: { categories: [sample_attributes] * 3 },
86
+ as: :json
87
+
88
+ assert_equal(204, response.status)
89
+ end
90
+ end
91
+
92
+ def test_and_document_destroy
93
+ description 'Removing a category'
94
+ route admin_api.category_path(':id')
95
+
96
+ category = create_category
97
+
98
+ record_request do
99
+ delete admin_api.category_path(category.id), as: :json
100
+ assert_equal(204, response.status)
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,78 @@
1
+ require 'test_helper'
2
+ require 'workarea/api/documentation_test'
3
+
4
+ module Workarea
5
+ module Api
6
+ module Admin
7
+ class CategoryProductRulesDocumentationTest < DocumentationTest
8
+ include Workarea::Admin::IntegrationTest
9
+
10
+ resource 'Category Product Rules'
11
+
12
+ def category
13
+ @category ||= create_category
14
+ end
15
+
16
+ def sample_attributes
17
+ { name: 'search', operator: 'equals', value: '*' }
18
+ end
19
+
20
+ def create_rule
21
+ category.product_rules.create!(sample_attributes)
22
+ end
23
+
24
+ def test_and_document_index
25
+ description 'Listing category product rules'
26
+ route admin_api.category_product_rules_path(':category_id')
27
+
28
+ 2.times { create_rule }
29
+
30
+ record_request do
31
+ get admin_api.category_product_rules_path(category.id)
32
+ assert_equal(200, response.status)
33
+ end
34
+ end
35
+
36
+ def test_and_document_create
37
+ description 'Creating a category product rule'
38
+ route admin_api.category_product_rules_path(':category_id')
39
+
40
+ record_request do
41
+ post admin_api.category_product_rules_path(category.id),
42
+ params: { product_rule: sample_attributes },
43
+ as: :json
44
+
45
+ assert_equal(201, response.status)
46
+ end
47
+ end
48
+
49
+ def test_and_document_update
50
+ description 'Updating a category product rule'
51
+ route admin_api.category_product_rule_path(':category_id', ':id')
52
+
53
+ rule = create_rule
54
+
55
+ record_request do
56
+ patch admin_api.category_product_rule_path(category.id, rule.id),
57
+ params: { product_rule: { value: 'foo' } },
58
+ as: :json
59
+
60
+ assert_equal(204, response.status)
61
+ end
62
+ end
63
+
64
+ def test_and_document_destroy
65
+ description 'Removing a category product rule'
66
+ route admin_api.category_product_rule_path(':category_id', ':id')
67
+
68
+ rule = create_rule
69
+
70
+ record_request do
71
+ delete admin_api.category_product_rule_path(category.id, rule.id)
72
+ assert_equal(204, response.status)
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,94 @@
1
+ require 'test_helper'
2
+ require 'workarea/api/documentation_test'
3
+
4
+ module Workarea
5
+ module Api
6
+ module Admin
7
+ class ContentAssetsDocumentationTest < DocumentationTest
8
+ include Workarea::Admin::IntegrationTest
9
+
10
+ resource 'Content Assets'
11
+
12
+ def sample_attributes
13
+ create_asset.as_json.except('_id')
14
+ end
15
+
16
+ def test_and_document_index
17
+ description 'Listing content assets'
18
+ route admin_api.content_assets_path
19
+ parameter :page, 'Current page'
20
+ parameter :sort_by, 'Field on which to sort (see responses for possible values)'
21
+ parameter :sort_direction, 'Direction to sort (asc or desc)'
22
+
23
+ 2.times { create_asset }
24
+
25
+ record_request do
26
+ get admin_api.content_assets_path,
27
+ params: { page: 1, sort_by: 'created_at', sort_direction: 'desc' }
28
+
29
+ assert_equal(200, response.status)
30
+ end
31
+ end
32
+
33
+ def test_and_document_create
34
+ description 'Creating a content asset'
35
+ route admin_api.content_assets_path
36
+
37
+ record_request do
38
+ post admin_api.content_assets_path,
39
+ params: { asset: sample_attributes },
40
+ as: :json
41
+
42
+ assert_equal(201, response.status)
43
+ end
44
+ end
45
+
46
+ def test_and_document_show
47
+ description 'Showing a content asset'
48
+ route admin_api.content_asset_path(':id')
49
+
50
+ record_request do
51
+ get admin_api.content_asset_path(create_asset.id)
52
+ assert_equal(200, response.status)
53
+ end
54
+ end
55
+
56
+ def test_and_document_update
57
+ description 'Updating a content asset'
58
+ route admin_api.content_asset_path(':id')
59
+
60
+ record_request do
61
+ patch admin_api.content_asset_path(create_asset.id),
62
+ params: { asset: sample_attributes },
63
+ as: :json
64
+
65
+ assert_equal(204, response.status)
66
+ end
67
+ end
68
+
69
+ def test_and_document_bulk_upsert
70
+ description 'Bulk upserting content assets'
71
+ route admin_api.bulk_content_assets_path
72
+
73
+ record_request do
74
+ patch admin_api.bulk_content_assets_path,
75
+ params: { assets: [sample_attributes] * 3 },
76
+ as: :json
77
+
78
+ assert_equal(204, response.status)
79
+ end
80
+ end
81
+
82
+ def test_and_document_destroy
83
+ description 'Removing a content asset'
84
+ route admin_api.content_asset_path(':id')
85
+
86
+ record_request do
87
+ delete admin_api.content_asset_path(create_asset.id)
88
+ assert_equal(204, response.status)
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,87 @@
1
+ require 'test_helper'
2
+ require 'workarea/api/documentation_test'
3
+
4
+ module Workarea
5
+ module Api
6
+ module Admin
7
+ class ContentDocumentationTest < DocumentationTest
8
+ include Workarea::Admin::IntegrationTest
9
+
10
+ resource 'Content'
11
+
12
+ def sample_attributes
13
+ create_content
14
+ .as_json
15
+ .except('_id', 'slug', 'last_indexed_at')
16
+ end
17
+
18
+ def test_and_document_index
19
+ description 'Listing content'
20
+ route admin_api.content_index_path
21
+ parameter :page, 'Current page'
22
+ parameter :sort_by, 'Field on which to sort (see responses for possible values)'
23
+ parameter :sort_direction, 'Direction to sort (asc or desc)'
24
+
25
+ 2.times { create_content }
26
+
27
+ record_request do
28
+ get admin_api.content_index_path,
29
+ params: { page: 1, sort_by: 'created_at', sort_direction: 'desc' },
30
+ as: :json
31
+
32
+ assert_equal(200, response.status)
33
+ end
34
+ end
35
+
36
+ def test_and_document_create
37
+ description 'Creating content'
38
+ route admin_api.content_index_path
39
+
40
+ record_request do
41
+ post admin_api.content_index_path,
42
+ params: { content: sample_attributes },
43
+ as: :json
44
+
45
+ assert_equal(201, response.status)
46
+ end
47
+ end
48
+
49
+ def test_and_document_show
50
+ description 'Showing content'
51
+ route admin_api.content_path(':id')
52
+
53
+ record_request do
54
+ get admin_api.content_path(create_content.id)
55
+ assert_equal(200, response.status)
56
+ end
57
+ end
58
+
59
+ def test_and_document_update
60
+ description 'Updating content'
61
+ route admin_api.content_path(':id')
62
+
63
+ record_request do
64
+ patch admin_api.content_path(create_content.id),
65
+ params: { content: { browser_title: 'foo' } },
66
+ as: :json
67
+
68
+ assert_equal(204, response.status)
69
+ end
70
+ end
71
+
72
+ def test_and_document_bulk_upsert
73
+ description 'Bulk upserting content'
74
+ route admin_api.bulk_content_index_path
75
+
76
+ record_request do
77
+ patch admin_api.bulk_content_index_path,
78
+ params: { content: [sample_attributes] * 3 },
79
+ as: :json
80
+
81
+ assert_equal(204, response.status)
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end