haveapi 0.31.1 → 0.32.0

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 (122) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/benchmarks/documentation.rb +29 -6
  4. data/benchmarks/endpoints.rb +153 -24
  5. data/benchmarks/spec/client_examples_spec.rb +109 -37
  6. data/doc/client-examples.md +218 -45
  7. data/doc/documentation-oauth.md +157 -0
  8. data/doc/documentation-ui.md +192 -0
  9. data/doc/index.md +3 -6
  10. data/doc/performance.md +39 -12
  11. data/haveapi.gemspec +1 -1
  12. data/lib/haveapi/authentication/chain.rb +19 -0
  13. data/lib/haveapi/authentication/oauth2/provider.rb +7 -1
  14. data/lib/haveapi/client_example.rb +143 -15
  15. data/lib/haveapi/client_examples/curl.rb +30 -20
  16. data/lib/haveapi/client_examples/dynamic_helpers.rb +1 -1
  17. data/lib/haveapi/client_examples/go_client.rb +9 -2
  18. data/lib/haveapi/client_examples/http.rb +9 -4
  19. data/lib/haveapi/client_examples/js_async_client.rb +7 -0
  20. data/lib/haveapi/client_examples/js_client.rb +47 -36
  21. data/lib/haveapi/client_examples/php_client.rb +161 -75
  22. data/lib/haveapi/client_examples/python_async_client.rb +3 -0
  23. data/lib/haveapi/client_examples/python_client.rb +61 -47
  24. data/lib/haveapi/client_examples/ruby_cli.rb +27 -18
  25. data/lib/haveapi/client_examples/ruby_client.rb +80 -31
  26. data/lib/haveapi/client_examples/rust_client.rb +20 -9
  27. data/lib/haveapi/client_examples/ts_async_client.rb +7 -0
  28. data/lib/haveapi/client_examples/ts_client.rb +3 -0
  29. data/lib/haveapi/client_examples/ts_generated_client.rb +10 -2
  30. data/lib/haveapi/documentation_context.rb +7 -2
  31. data/lib/haveapi/documentation_helpers.rb +223 -0
  32. data/lib/haveapi/documentation_oauth.rb +399 -0
  33. data/lib/haveapi/documentation_search.rb +225 -0
  34. data/lib/haveapi/documentation_search_index.rb +79 -0
  35. data/lib/haveapi/documentation_validators.rb +179 -0
  36. data/lib/haveapi/public/css/documentation.css +343 -0
  37. data/lib/haveapi/public/js/documentation.js +992 -0
  38. data/lib/haveapi/server.rb +144 -86
  39. data/lib/haveapi/shared_documentation_helpers.rb +54 -0
  40. data/lib/haveapi/version.rb +1 -1
  41. data/lib/haveapi/views/doc_layout.erb +16 -0
  42. data/lib/haveapi/views/doc_sidebars/create-client.erb +3 -3
  43. data/lib/haveapi/views/doc_sidebars/json-schema.erb +1 -1
  44. data/lib/haveapi/views/doc_sidebars/protocol.erb +5 -5
  45. data/lib/haveapi/views/documentation/search_form.erb +10 -0
  46. data/lib/haveapi/views/documentation/search_index.erb +1 -0
  47. data/lib/haveapi/views/documentation/search_results.erb +20 -0
  48. data/lib/haveapi/views/index.erb +2 -4
  49. data/lib/haveapi/views/main_layout.erb +12 -6
  50. data/lib/haveapi/views/shared_documentation.erb +12 -0
  51. data/lib/haveapi/views/shared_sidebar.erb +25 -0
  52. data/lib/haveapi/views/version_page/auth_body.erb +12 -33
  53. data/lib/haveapi/views/version_page/client_overview.erb +40 -0
  54. data/lib/haveapi/views/version_page/example_panels.erb +18 -0
  55. data/lib/haveapi/views/version_page/resource_body.erb +91 -132
  56. data/lib/haveapi/views/version_page/resource_directory.erb +14 -0
  57. data/lib/haveapi/views/version_page/usage.erb +7 -0
  58. data/lib/haveapi/views/version_page.erb +36 -117
  59. data/lib/haveapi/views/version_sidebar/auth_nav.erb +12 -16
  60. data/lib/haveapi/views/version_sidebar/auth_resource_nav.erb +19 -0
  61. data/lib/haveapi/views/version_sidebar/authentication_control.erb +26 -0
  62. data/lib/haveapi/views/version_sidebar/authentication_status.erb +3 -0
  63. data/lib/haveapi/views/version_sidebar/brand.erb +31 -0
  64. data/lib/haveapi/views/version_sidebar/resource_nav.erb +11 -20
  65. data/lib/haveapi/views/version_sidebar.erb +59 -48
  66. data/spec/authentication/basic_spec.rb +10 -10
  67. data/spec/authentication/oauth2_chain_spec.rb +72 -0
  68. data/spec/authentication/oauth2_token_validation_spec.rb +38 -0
  69. data/spec/client_examples/assets/documentation_test.cjs +817 -0
  70. data/spec/client_examples/context_performance_spec.rb +5 -4
  71. data/spec/client_examples/context_spec.rb +23 -2
  72. data/spec/client_examples/detail_spec.rb +175 -0
  73. data/spec/client_examples/dynamic_acceptance.md +59 -26
  74. data/spec/client_examples/dynamic_acceptance.rb +164 -44
  75. data/spec/client_examples/dynamic_acceptance_spec.rb +140 -23
  76. data/spec/client_examples/dynamic_fixture.rb +4 -3
  77. data/spec/client_examples/dynamic_js_spec.rb +20 -11
  78. data/spec/client_examples/dynamic_metadata_spec.rb +69 -0
  79. data/spec/client_examples/dynamic_mounted_paths_spec.rb +9 -7
  80. data/spec/client_examples/dynamic_python_spec.rb +62 -11
  81. data/spec/client_examples/go_spec.rb +14 -1
  82. data/spec/client_examples/presentation_spec.rb +247 -0
  83. data/spec/client_examples/profile_mount_spec.rb +40 -13
  84. data/spec/client_examples/rust_client_spec.rb +35 -1
  85. data/spec/client_examples/shell_spec.rb +268 -0
  86. data/spec/client_examples/syntax_spec.rb +192 -0
  87. data/spec/client_examples/ts_generated_client_spec.rb +15 -2
  88. data/spec/client_examples/typescript_profiles_spec.rb +1 -1
  89. data/spec/documentation/auth_filtering_spec.rb +9 -4
  90. data/spec/documentation/canonical_routes_spec.rb +89 -0
  91. data/spec/documentation/client_examples_spec.rb +39 -5
  92. data/spec/documentation/client_overview_spec.rb +145 -0
  93. data/spec/documentation/current_user_html_escaping_spec.rb +7 -2
  94. data/spec/documentation/example_variants_spec.rb +93 -0
  95. data/spec/documentation/fixtures/search_index.json +476 -0
  96. data/spec/documentation/identity_and_guides_spec.rb +130 -0
  97. data/spec/documentation/identity_context_spec.rb +180 -0
  98. data/spec/documentation/navigation_spec.rb +296 -0
  99. data/spec/documentation/oauth_fixture_spec.rb +39 -0
  100. data/spec/documentation/oauth_spec.rb +912 -0
  101. data/spec/documentation/oauth_transport_spec.rb +45 -0
  102. data/spec/documentation/performance_spec.rb +47 -6
  103. data/spec/documentation/reference_headings_spec.rb +190 -0
  104. data/spec/documentation/search_index_routes_spec.rb +202 -0
  105. data/spec/documentation/search_index_spec.rb +85 -0
  106. data/spec/documentation/search_routes_spec.rb +199 -0
  107. data/spec/documentation/search_spec.rb +134 -0
  108. data/spec/documentation/shared_pages_spec.rb +240 -0
  109. data/spec/documentation/validators_spec.rb +123 -0
  110. data/spec/documentation_spec.rb +3 -3
  111. data/spec/packaging_spec.rb +21 -2
  112. data/spec/performance/documentation_identity_fixture_spec.rb +47 -0
  113. data/spec/performance/documentation_shapes_spec.rb +97 -0
  114. data/spec/performance/json_activation_spec.rb +78 -1
  115. data/spec/performance/release_lineage_spec.rb +4 -3
  116. data/spec/performance/runner_spec.rb +1 -0
  117. data/test_support/all_client_performance_fixture.rb +6 -10
  118. data/test_support/documentation_oauth_fixture.rb +54 -0
  119. data/test_support/documentation_performance_fixture.rb +19 -1
  120. data/test_support/dynamic_documentation_api.rb +35 -10
  121. data/test_support/dynamic_python_login_spec.rb +3 -11
  122. metadata +52 -3
@@ -7,6 +7,17 @@ module DynamicDocumentationAPI
7
7
  def self.receipts
8
8
  @receipts ||= []
9
9
  end
10
+
11
+ def self.events
12
+ @events ||= []
13
+ end
14
+
15
+ def self.record_authentication(request, provider, user)
16
+ request.env['dynamic_documentation.provider'] = provider if user
17
+ events << { type: 'authentication', provider:, authenticated: !user.nil? }
18
+ user
19
+ end
20
+
10
21
  User = Struct.new(:login)
11
22
 
12
23
  class RequestTrace
@@ -17,7 +28,12 @@ module DynamicDocumentationAPI
17
28
 
18
29
  def call(env)
19
30
  status, headers, body = @app.call(env)
20
- @output.puts("DYNAMIC_DOCUMENTATION_REQUEST #{JSON.generate({ method: env['REQUEST_METHOD'], path: env['PATH_INFO'], status: })}")
31
+ trace = { method: env['REQUEST_METHOD'], path: env['PATH_INFO'], status: }
32
+ if env['PATH_INFO'].start_with?('/mount/')
33
+ provider = env['dynamic_documentation.provider']
34
+ DynamicDocumentationAPI.events << trace.merge(type: 'request', provider:, authenticated: !provider.nil?)
35
+ end
36
+ @output.puts("DYNAMIC_DOCUMENTATION_REQUEST #{JSON.generate(trace)}")
21
37
  [status, headers, body]
22
38
  end
23
39
  end
@@ -25,21 +41,24 @@ module DynamicDocumentationAPI
25
41
  class BasicProvider < HaveAPI::Authentication::Basic::Provider
26
42
  protected
27
43
 
28
- def find_user(_request, username, password)
29
- User.new(username) if username == 'fixture-user' && password == 'fixture-password'
44
+ def find_user(request, username, password)
45
+ user = User.new(username) if username == 'user' && password == 'secret'
46
+ DynamicDocumentationAPI.record_authentication(request, 'basic', user)
30
47
  end
31
48
  end
32
49
 
33
50
  class TokenConfig < HaveAPI::Authentication::Token::Config
34
51
  request do
35
52
  handle do |request, result|
36
- if request.input[:user] == 'fixture-user' && request.input[:password] == 'fixture-password'
53
+ if request.input[:user] == 'user' && request.input[:password] == 'secret'
37
54
  result.token = 'fixture-challenge'
38
55
  result.next_action = 'verify'
39
56
  result.complete = false
40
57
  result.valid_to = Time.now + 3600
58
+ DynamicDocumentationAPI.events << { type: 'token_request', provider: 'token', authenticated: false }
41
59
  result.ok
42
60
  else
61
+ DynamicDocumentationAPI.events << { type: 'token_request_rejected', provider: 'token', authenticated: false }
43
62
  result.error = 'Invalid fixture credentials'
44
63
  result
45
64
  end
@@ -49,12 +68,14 @@ module DynamicDocumentationAPI
49
68
  action :verify do
50
69
  input { string :code, required: true }
51
70
  handle do |request, result|
52
- if request.token == 'fixture-challenge' && request.input[:code] == '123456'
53
- result.token = 'fixture-token'
71
+ if request.token == 'fixture-challenge' && request.input[:code] == 'code'
72
+ result.token = 'example-token'
54
73
  result.complete = true
55
74
  result.valid_to = Time.now + 3600
75
+ DynamicDocumentationAPI.events << { type: 'token_verification', provider: 'token', authenticated: true }
56
76
  result.ok
57
77
  else
78
+ DynamicDocumentationAPI.events << { type: 'token_verification_rejected', provider: 'token', authenticated: false }
58
79
  result.error = 'Invalid fixture challenge'
59
80
  result
60
81
  end
@@ -64,8 +85,9 @@ module DynamicDocumentationAPI
64
85
  renew { handle { |_request, result| result.ok } }
65
86
  revoke { handle { |_request, result| result.ok } }
66
87
 
67
- def find_user_by_token(_request, token)
68
- User.new('fixture-user') if token == 'fixture-token'
88
+ def find_user_by_token(request, token)
89
+ user = User.new('user') if token == 'example-token'
90
+ DynamicDocumentationAPI.record_authentication(request, 'token', user)
69
91
  end
70
92
  end
71
93
 
@@ -80,7 +102,8 @@ module DynamicDocumentationAPI
80
102
 
81
103
  def authenticate(request)
82
104
  value = request.env['HTTP_X_FIXTURE_OAUTH2'] || request.env['HTTP_AUTHORIZATION']&.delete_prefix('Bearer ')
83
- User.new('fixture-user') if value == 'fixture-access-token'
105
+ user = User.new('user') if value == 'example-access-token'
106
+ value ? DynamicDocumentationAPI.record_authentication(request, 'oauth2', user) : nil
84
107
  end
85
108
  end
86
109
 
@@ -137,6 +160,8 @@ module DynamicDocumentationAPI
137
160
  end
138
161
 
139
162
  def self.build
163
+ receipts.clear
164
+ events.clear
140
165
  HaveAPI.implicit_version = '2'
141
166
  api = HaveAPI::Server.new(Resources)
142
167
  api.use_version('2')
@@ -147,7 +172,7 @@ module DynamicDocumentationAPI
147
172
  api.connect_hook(:pre_mount) do |ret, _server, sinatra|
148
173
  sinatra.get '/__acceptance_receipts' do
149
174
  content_type 'application/json'
150
- JSON.generate(DynamicDocumentationAPI.receipts)
175
+ JSON.generate(actions: DynamicDocumentationAPI.receipts, events: DynamicDocumentationAPI.events)
151
176
  end
152
177
  ret
153
178
  end
@@ -13,6 +13,7 @@ RSpec.describe HaveAPI::ClientExamples::PythonClient do
13
13
  response = request.options('http://example.test/mount/v2/')
14
14
  expect(response.status).to eq(200), response.body
15
15
  envelope = JSON.parse(response.body)
16
+ expect(envelope.fetch('status')).to be(true), envelope.inspect
16
17
  description = envelope.fetch('response')
17
18
  context = dynamic_context(description:)
18
19
  rendered = renderer.render(:auth, context:, auth_method: :token, auth_description: description.fetch('authentication').fetch('token'))
@@ -21,7 +22,6 @@ RSpec.describe HaveAPI::ClientExamples::PythonClient do
21
22
  import ast
22
23
  import json
23
24
  import sys
24
- from types import SimpleNamespace
25
25
  from haveapi_client._protocol import CallContext, build_request, parse_description, parse_resources
26
26
  from haveapi_client.exceptions import ValidationError
27
27
 
@@ -30,15 +30,7 @@ RSpec.describe HaveAPI::ClientExamples::PythonClient do
30
30
  calls = [node for node in ast.walk(tree) if isinstance(node, ast.Call)
31
31
  and isinstance(node.func, ast.Attribute) and node.func.attr == "begin_token_login"]
32
32
  assert len(calls) == 1
33
- environment = {
34
- "HAVEAPI_AUTH_user": json.dumps("fixture-user"),
35
- "HAVEAPI_AUTH_password": json.dumps("fixture-password"),
36
- "HAVEAPI_AUTH_scope": json.dumps("all"),
37
- "HAVEAPI_AUTH_lifetime": json.dumps("fixed"),
38
- }
39
- expression = ast.Expression(body=calls[0].args[0])
40
- params = eval(compile(expression, "<rendered-login-input>", "eval"),
41
- {"json": json, "os": SimpleNamespace(environ=environment)})
33
+ params = ast.literal_eval(calls[0].args[0])
42
34
  description = parse_description(fixture["envelope"])
43
35
  action = parse_resources(description.authentication["token"]["resources"])["token"].actions["request"]
44
36
  assert action.input.parameters["lifetime"].required
@@ -65,7 +57,7 @@ RSpec.describe HaveAPI::ClientExamples::PythonClient do
65
57
  )
66
58
  expect(status).to be_success, output
67
59
  actual = JSON.parse(output)
68
- expected = { 'user' => 'fixture-user', 'password' => 'fixture-password', 'scope' => 'all', 'lifetime' => 'fixed' }
60
+ expected = { 'user' => 'user', 'password' => 'secret', 'scope' => 'scope', 'lifetime' => 'fixed' }
69
61
  expect(actual.fetch('params')).to eq(expected)
70
62
  expect(actual.fetch('body')).to eq('token' => expected)
71
63
  expect(actual.fetch('url')).to eq('https://api.example.test/mount/_auth/token/tokens')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: haveapi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.31.1
4
+ version: 0.32.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jakub Skokan
@@ -29,14 +29,14 @@ dependencies:
29
29
  requirements:
30
30
  - - "~>"
31
31
  - !ruby/object:Gem::Version
32
- version: 0.31.1
32
+ version: 0.32.0
33
33
  type: :runtime
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: 0.31.1
39
+ version: 0.32.0
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: i18n
42
42
  requirement: !ruby/object:Gem::Requirement
@@ -220,6 +220,8 @@ files:
220
220
  - benchmarks/spec/client_examples_spec.rb
221
221
  - doc/client-examples.md
222
222
  - doc/create-client.md
223
+ - doc/documentation-oauth.md
224
+ - doc/documentation-ui.md
223
225
  - doc/hooks.erb
224
226
  - doc/index.md
225
227
  - doc/json-schema.html
@@ -268,7 +270,12 @@ files:
268
270
  - lib/haveapi/context.rb
269
271
  - lib/haveapi/documentation_clients.rb
270
272
  - lib/haveapi/documentation_context.rb
273
+ - lib/haveapi/documentation_helpers.rb
274
+ - lib/haveapi/documentation_oauth.rb
271
275
  - lib/haveapi/documentation_schema.rb
276
+ - lib/haveapi/documentation_search.rb
277
+ - lib/haveapi/documentation_search_index.rb
278
+ - lib/haveapi/documentation_validators.rb
272
279
  - lib/haveapi/example.rb
273
280
  - lib/haveapi/example_list.rb
274
281
  - lib/haveapi/exceptions.rb
@@ -292,9 +299,11 @@ files:
292
299
  - lib/haveapi/params.rb
293
300
  - lib/haveapi/public/css/bootstrap-theme.min.css
294
301
  - lib/haveapi/public/css/bootstrap.min.css
302
+ - lib/haveapi/public/css/documentation.css
295
303
  - lib/haveapi/public/css/highlight.css
296
304
  - lib/haveapi/public/doc/protocol.png
297
305
  - lib/haveapi/public/js/bootstrap.min.js
306
+ - lib/haveapi/public/js/documentation.js
298
307
  - lib/haveapi/public/js/highlight-LICENSE
299
308
  - lib/haveapi/public/js/highlight.pack.js
300
309
  - lib/haveapi/public/js/highlighter.js
@@ -305,6 +314,7 @@ files:
305
314
  - lib/haveapi/resources/action_state.rb
306
315
  - lib/haveapi/route.rb
307
316
  - lib/haveapi/server.rb
317
+ - lib/haveapi/shared_documentation_helpers.rb
308
318
  - lib/haveapi/spec/api_builder.rb
309
319
  - lib/haveapi/spec/api_response.rb
310
320
  - lib/haveapi/spec/helpers.rb
@@ -330,17 +340,30 @@ files:
330
340
  - lib/haveapi/views/doc_sidebars/create-client.erb
331
341
  - lib/haveapi/views/doc_sidebars/json-schema.erb
332
342
  - lib/haveapi/views/doc_sidebars/protocol.erb
343
+ - lib/haveapi/views/documentation/search_form.erb
344
+ - lib/haveapi/views/documentation/search_index.erb
345
+ - lib/haveapi/views/documentation/search_results.erb
333
346
  - lib/haveapi/views/index.erb
334
347
  - lib/haveapi/views/main_layout.erb
348
+ - lib/haveapi/views/shared_documentation.erb
349
+ - lib/haveapi/views/shared_sidebar.erb
335
350
  - lib/haveapi/views/version_page.erb
336
351
  - lib/haveapi/views/version_page/auth_body.erb
337
352
  - lib/haveapi/views/version_page/client_auth.erb
338
353
  - lib/haveapi/views/version_page/client_example.erb
339
354
  - lib/haveapi/views/version_page/client_init.erb
355
+ - lib/haveapi/views/version_page/client_overview.erb
340
356
  - lib/haveapi/views/version_page/client_result.erb
357
+ - lib/haveapi/views/version_page/example_panels.erb
341
358
  - lib/haveapi/views/version_page/resource_body.erb
359
+ - lib/haveapi/views/version_page/resource_directory.erb
360
+ - lib/haveapi/views/version_page/usage.erb
342
361
  - lib/haveapi/views/version_sidebar.erb
343
362
  - lib/haveapi/views/version_sidebar/auth_nav.erb
363
+ - lib/haveapi/views/version_sidebar/auth_resource_nav.erb
364
+ - lib/haveapi/views/version_sidebar/authentication_control.erb
365
+ - lib/haveapi/views/version_sidebar/authentication_status.erb
366
+ - lib/haveapi/views/version_sidebar/brand.erb
344
367
  - lib/haveapi/views/version_sidebar/resource_nav.erb
345
368
  - spec/.rubocop.yml
346
369
  - spec/action/authorize_spec.rb
@@ -349,14 +372,18 @@ files:
349
372
  - spec/action/validation_http_status_spec.rb
350
373
  - spec/action_state_spec.rb
351
374
  - spec/authentication/basic_spec.rb
375
+ - spec/authentication/oauth2_chain_spec.rb
352
376
  - spec/authentication/oauth2_spec.rb
377
+ - spec/authentication/oauth2_token_validation_spec.rb
353
378
  - spec/authentication/token_spec.rb
354
379
  - spec/authentication/token_version_routes_spec.rb
355
380
  - spec/authorization_spec.rb
381
+ - spec/client_examples/assets/documentation_test.cjs
356
382
  - spec/client_examples/assets/highlighter_test.cjs
357
383
  - spec/client_examples/assets/tabs_test.cjs
358
384
  - spec/client_examples/context_performance_spec.rb
359
385
  - spec/client_examples/context_spec.rb
386
+ - spec/client_examples/detail_spec.rb
360
387
  - spec/client_examples/dynamic_acceptance.md
361
388
  - spec/client_examples/dynamic_acceptance.rb
362
389
  - spec/client_examples/dynamic_acceptance_spec.rb
@@ -366,20 +393,39 @@ files:
366
393
  - spec/client_examples/dynamic_mounted_paths_spec.rb
367
394
  - spec/client_examples/dynamic_python_spec.rb
368
395
  - spec/client_examples/go_spec.rb
396
+ - spec/client_examples/presentation_spec.rb
369
397
  - spec/client_examples/profile_mount_spec.rb
370
398
  - spec/client_examples/profiles_spec.rb
371
399
  - spec/client_examples/rust_client_spec.rb
400
+ - spec/client_examples/shell_spec.rb
372
401
  - spec/client_examples/structural_schema_spec.rb
373
402
  - spec/client_examples/syntax_spec.rb
374
403
  - spec/client_examples/ts_generated_client_spec.rb
375
404
  - spec/client_examples/typescript_profiles_spec.rb
376
405
  - spec/common_spec.rb
377
406
  - spec/documentation/auth_filtering_spec.rb
407
+ - spec/documentation/canonical_routes_spec.rb
378
408
  - spec/documentation/client_examples_spec.rb
409
+ - spec/documentation/client_overview_spec.rb
379
410
  - spec/documentation/current_user_html_escaping_spec.rb
411
+ - spec/documentation/example_variants_spec.rb
380
412
  - spec/documentation/examples_spec.rb
413
+ - spec/documentation/fixtures/search_index.json
381
414
  - spec/documentation/host_html_escaping_spec.rb
415
+ - spec/documentation/identity_and_guides_spec.rb
416
+ - spec/documentation/identity_context_spec.rb
417
+ - spec/documentation/navigation_spec.rb
418
+ - spec/documentation/oauth_fixture_spec.rb
419
+ - spec/documentation/oauth_spec.rb
420
+ - spec/documentation/oauth_transport_spec.rb
382
421
  - spec/documentation/performance_spec.rb
422
+ - spec/documentation/reference_headings_spec.rb
423
+ - spec/documentation/search_index_routes_spec.rb
424
+ - spec/documentation/search_index_spec.rb
425
+ - spec/documentation/search_routes_spec.rb
426
+ - spec/documentation/search_spec.rb
427
+ - spec/documentation/shared_pages_spec.rb
428
+ - spec/documentation/validators_spec.rb
383
429
  - spec/documentation_spec.rb
384
430
  - spec/envelope_spec.rb
385
431
  - spec/extensions/action_exceptions_spec.rb
@@ -391,6 +437,8 @@ files:
391
437
  - spec/parameters/typed_spec.rb
392
438
  - spec/params_spec.rb
393
439
  - spec/performance/comparator_spec.rb
440
+ - spec/performance/documentation_identity_fixture_spec.rb
441
+ - spec/performance/documentation_shapes_spec.rb
394
442
  - spec/performance/endpoint_contract_spec.rb
395
443
  - spec/performance/endpoint_scaling_spec.rb
396
444
  - spec/performance/event_baseline_spec.rb
@@ -417,6 +465,7 @@ files:
417
465
  - test_support/all_client_performance_fixture.rb
418
466
  - test_support/client_test_api.rb
419
467
  - test_support/client_test_server.rb
468
+ - test_support/documentation_oauth_fixture.rb
420
469
  - test_support/documentation_performance_fixture.rb
421
470
  - test_support/dynamic_documentation_api.rb
422
471
  - test_support/dynamic_protocol_spec.rb