workos 9.5.0 → 10.1.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 (208) hide show
  1. checksums.yaml +4 -4
  2. data/.claude/CLAUDE.md +38 -0
  3. data/.github/workflows/block-generated-edits.yml +13 -0
  4. data/.github/workflows/ci.yml +1 -1
  5. data/.github/workflows/docs.yml +1 -1
  6. data/.github/workflows/lint.yml +1 -1
  7. data/.github/workflows/release-please.yml +7 -1
  8. data/.github/workflows/release.yml +1 -1
  9. data/.last-synced-sha +1 -1
  10. data/.oagen-manifest.json +197 -75
  11. data/.release-please-manifest.json +1 -1
  12. data/AGENTS.md +1 -0
  13. data/CHANGELOG.md +118 -0
  14. data/Gemfile.lock +2 -2
  15. data/README.md +15 -14
  16. data/lib/workos/agents/agent_admin_link_claim_attempt_to_external_user_request.rb +28 -0
  17. data/lib/workos/agents/agent_admin_link_claim_attempt_to_external_user_request_user.rb +22 -0
  18. data/lib/workos/agents/agent_admin_validate_credential_request.rb +25 -0
  19. data/lib/workos/agents/agent_credential_validation.rb +25 -0
  20. data/lib/workos/agents/agent_registration.rb +40 -0
  21. data/lib/workos/agents/agent_registration_agent_identity.rb +28 -0
  22. data/lib/workos/agents/agent_registration_claim.rb +31 -0
  23. data/lib/workos/agents/agent_registration_claim_claim_completion.rb +31 -0
  24. data/lib/workos/agents/claim_view_response.rb +28 -0
  25. data/lib/workos/agents/claim_view_response_organization.rb +7 -0
  26. data/lib/workos/agents.rb +93 -0
  27. data/lib/workos/api_keys/api_key_validation_response.rb +6 -2
  28. data/lib/workos/api_keys.rb +3 -4
  29. data/lib/workos/authorization/permission_created_data.rb +1 -34
  30. data/lib/workos/authorization/permission_deleted_data.rb +1 -1
  31. data/lib/workos/authorization/permission_updated_data.rb +1 -1
  32. data/lib/workos/authorization.rb +24 -24
  33. data/lib/workos/base_client.rb +4 -4
  34. data/lib/workos/client.rb +4 -0
  35. data/lib/workos/connect.rb +23 -19
  36. data/lib/workos/directory_sync.rb +10 -2
  37. data/lib/workos/groups.rb +7 -7
  38. data/lib/workos/inflections.rb +0 -1
  39. data/lib/workos/organization_domains.rb +4 -4
  40. data/lib/workos/organizations/organization_authorized_connect_application_list_data.rb +34 -0
  41. data/lib/workos/organizations.rb +57 -10
  42. data/lib/workos/pipes/api_key_installation.rb +25 -0
  43. data/lib/workos/pipes/{connected_account_dto.rb → connected_account_input.rb} +1 -1
  44. data/lib/workos/pipes/create_data_integration.rb +10 -1
  45. data/lib/workos/pipes/data_integration.rb +9 -0
  46. data/lib/workos/pipes/{data_integration_credentials_dto.rb → data_integration_credentials_input.rb} +1 -1
  47. data/lib/workos/pipes/data_integration_installation.rb +28 -0
  48. data/lib/workos/pipes/data_integrations_get_data_integration_authorize_url_request.rb +5 -2
  49. data/lib/workos/pipes/data_integrations_upsert_api_key_request.rb +1 -19
  50. data/lib/workos/pipes/update_data_integration.rb +4 -1
  51. data/lib/workos/pipes.rb +32 -17
  52. data/lib/workos/pipes_provider/configure_data_integration_body.rb +5 -2
  53. data/lib/workos/pipes_provider/data_integration_configuration_response.rb +3 -0
  54. data/lib/workos/pipes_provider.rb +6 -3
  55. data/lib/workos/shared/access_token_agent_registration_credential_issued_data_detail.rb +25 -0
  56. data/lib/workos/shared/agent_registration_claim_attempt_created.rb +34 -0
  57. data/lib/workos/shared/agent_registration_claim_attempt_created_data.rb +40 -0
  58. data/lib/workos/shared/agent_registration_claim_completed.rb +34 -0
  59. data/lib/workos/shared/agent_registration_claim_completed_data.rb +40 -0
  60. data/lib/workos/shared/agent_registration_claim_completed_data_claimed_by.rb +22 -0
  61. data/lib/workos/shared/agent_registration_created.rb +34 -0
  62. data/lib/workos/{organization_domains/organization_domain_stand_alone.rb → shared/agent_registration_created_data.rb} +13 -16
  63. data/lib/workos/shared/agent_registration_created_data_agent_identity.rb +25 -0
  64. data/lib/workos/shared/agent_registration_credential_issued.rb +34 -0
  65. data/lib/workos/shared/agent_registration_credential_issued_data.rb +34 -0
  66. data/lib/workos/shared/agent_registration_credential_issued_data_detail.rb +22 -0
  67. data/lib/workos/shared/agent_registration_deleted.rb +34 -0
  68. data/lib/workos/shared/agent_registration_deleted_data.rb +18 -0
  69. data/lib/workos/shared/agent_registration_expired.rb +34 -0
  70. data/lib/workos/shared/agent_registration_expired_data.rb +7 -0
  71. data/lib/workos/shared/agent_registration_organization_switched.rb +34 -0
  72. data/lib/workos/shared/agent_registration_organization_switched_data.rb +25 -0
  73. data/lib/workos/shared/agent_registration_revoked.rb +34 -0
  74. data/lib/workos/shared/agent_registration_revoked_data.rb +7 -0
  75. data/lib/workos/shared/pipes_connected_account_connection_failed.rb +34 -0
  76. data/lib/workos/shared/pipes_connected_account_connection_failed_data.rb +46 -0
  77. data/lib/workos/shared/radar_challenge_created.rb +34 -0
  78. data/lib/workos/shared/radar_challenge_created_data.rb +28 -0
  79. data/lib/workos/sso/connection.rb +0 -3
  80. data/lib/workos/sso.rb +73 -26
  81. data/lib/workos/types/agent_admin_validate_credential_request_type.rb +13 -0
  82. data/lib/workos/types/agent_registration_created_data_kind.rb +14 -0
  83. data/lib/workos/types/agent_registration_created_data_method.rb +14 -0
  84. data/lib/workos/types/agent_registration_created_data_status.rb +15 -0
  85. data/lib/workos/types/{data_integration_credentials_type.rb → agent_registration_kind.rb} +1 -1
  86. data/lib/workos/types/{organization_domain_stand_alone_state.rb → agent_registration_status.rb} +1 -1
  87. data/lib/workos/types/applications_registration_types.rb +13 -0
  88. data/lib/workos/types/{organization_domain_stand_alone_verification_strategy.rb → claim_view_response_status.rb} +1 -1
  89. data/lib/workos/types/connected_account_auth_method.rb +2 -1
  90. data/lib/workos/types/connected_account_input_state.rb +13 -0
  91. data/lib/workos/types/connected_account_state.rb +2 -1
  92. data/lib/workos/types/create_data_integration_auth_methods.rb +13 -0
  93. data/lib/workos/types/create_user_password_hash_type.rb +2 -1
  94. data/lib/workos/types/create_webhook_endpoint_events.rb +5 -1
  95. data/lib/workos/types/data_integration_auth_methods.rb +9 -0
  96. data/lib/workos/types/data_integration_credentials_input_type.rb +9 -0
  97. data/lib/workos/types/data_integrations_list_response_data_connected_account_state.rb +1 -6
  98. data/lib/workos/types/pipe_connected_account_state.rb +1 -5
  99. data/lib/workos/types/vault_kek_deleted_data_actor_source.rb +9 -0
  100. data/lib/workos/user_management/authentication_reauthentication_succeeded.rb +34 -0
  101. data/lib/workos/user_management/authentication_reauthentication_succeeded_data.rb +34 -0
  102. data/lib/workos/user_management/radar_challenge.rb +43 -0
  103. data/lib/workos/user_management.rb +149 -67
  104. data/lib/workos/vault/vault_kek_deleted.rb +34 -0
  105. data/lib/workos/vault/vault_kek_deleted_data.rb +31 -0
  106. data/lib/workos/vault.rb +4 -4
  107. data/lib/workos/version.rb +1 -1
  108. data/lib/workos/widgets.rb +2 -2
  109. data/lib/workos.rb +11 -0
  110. data/rbi/workos/access_token_agent_registration_credential_issued_data_detail.rbi +36 -0
  111. data/rbi/workos/agent_admin_link_claim_attempt_to_external_user_request.rbi +42 -0
  112. data/rbi/workos/agent_admin_link_claim_attempt_to_external_user_request_user.rbi +30 -0
  113. data/rbi/workos/agent_admin_validate_credential_request.rbi +36 -0
  114. data/rbi/workos/{sso_intent_options.rbi → agent_credential_validation.rbi} +11 -5
  115. data/rbi/workos/agent_registration.rbi +66 -0
  116. data/rbi/workos/agent_registration_agent_identity.rbi +42 -0
  117. data/rbi/workos/agent_registration_claim.rbi +48 -0
  118. data/rbi/workos/agent_registration_claim_attempt_created.rbi +54 -0
  119. data/rbi/workos/agent_registration_claim_attempt_created_data.rbi +66 -0
  120. data/rbi/workos/agent_registration_claim_claim_completion.rbi +48 -0
  121. data/rbi/workos/agent_registration_claim_completed.rbi +54 -0
  122. data/rbi/workos/agent_registration_claim_completed_data.rbi +66 -0
  123. data/rbi/workos/agent_registration_claim_completed_data_claimed_by.rbi +30 -0
  124. data/rbi/workos/agent_registration_created.rbi +54 -0
  125. data/rbi/workos/agent_registration_created_data.rbi +72 -0
  126. data/rbi/workos/agent_registration_created_data_agent_identity.rbi +36 -0
  127. data/rbi/workos/agent_registration_credential_issued.rbi +54 -0
  128. data/rbi/workos/agent_registration_credential_issued_data.rbi +54 -0
  129. data/rbi/workos/agent_registration_credential_issued_data_detail.rbi +30 -0
  130. data/rbi/workos/agent_registration_deleted.rbi +54 -0
  131. data/rbi/workos/{connection_option.rbi → agent_registration_deleted_data.rbi} +5 -5
  132. data/rbi/workos/agent_registration_expired.rbi +54 -0
  133. data/rbi/workos/{domain_verification_intent_options.rbi → agent_registration_expired_data.rbi} +5 -5
  134. data/rbi/workos/agent_registration_organization_switched.rbi +54 -0
  135. data/rbi/workos/agent_registration_organization_switched_data.rbi +36 -0
  136. data/rbi/workos/agent_registration_revoked.rbi +54 -0
  137. data/rbi/workos/agent_registration_revoked_data.rbi +24 -0
  138. data/rbi/workos/agents.rbi +42 -0
  139. data/rbi/workos/api_key_installation.rbi +36 -0
  140. data/rbi/workos/api_key_validation_response.rbi +6 -0
  141. data/rbi/workos/authentication_reauthentication_succeeded.rbi +54 -0
  142. data/rbi/workos/authentication_reauthentication_succeeded_data.rbi +54 -0
  143. data/rbi/workos/claim_view_response.rbi +42 -0
  144. data/rbi/workos/claim_view_response_organization.rbi +30 -0
  145. data/rbi/workos/client.rbi +3 -0
  146. data/rbi/workos/configure_data_integration_body.rbi +6 -0
  147. data/rbi/workos/connect.rbi +2 -1
  148. data/rbi/workos/{connected_account_dto.rbi → connected_account_input.rbi} +1 -1
  149. data/rbi/workos/connection.rbi +0 -6
  150. data/rbi/workos/create_data_integration.rbi +20 -2
  151. data/rbi/workos/data_integration.rbi +18 -0
  152. data/rbi/workos/data_integration_configuration_response.rbi +6 -0
  153. data/rbi/workos/{data_integration_credentials_dto.rbi → data_integration_credentials_input.rbi} +1 -1
  154. data/rbi/workos/data_integration_installation.rbi +42 -0
  155. data/rbi/workos/data_integrations_get_data_integration_authorize_url_request.rbi +6 -0
  156. data/rbi/workos/directory_sync.rbi +3 -1
  157. data/rbi/workos/organization_authorized_connect_application_list_data.rbi +54 -0
  158. data/rbi/workos/organization_domains.rbi +2 -2
  159. data/rbi/workos/organizations.rbi +12 -0
  160. data/rbi/workos/permission_created_data.rbi +6 -0
  161. data/rbi/workos/permission_deleted_data.rbi +6 -0
  162. data/rbi/workos/permission_updated_data.rbi +6 -0
  163. data/rbi/workos/pipes.rbi +10 -5
  164. data/rbi/workos/pipes_connected_account_connection_failed.rbi +54 -0
  165. data/rbi/workos/{organization_domain_stand_alone.rbi → pipes_connected_account_connection_failed_data.rbi} +23 -23
  166. data/rbi/workos/pipes_provider.rbi +2 -1
  167. data/rbi/workos/radar_challenge.rbi +72 -0
  168. data/rbi/workos/radar_challenge_created.rbi +54 -0
  169. data/rbi/workos/radar_challenge_created_data.rbi +42 -0
  170. data/rbi/workos/sso.rbi +26 -0
  171. data/rbi/workos/update_data_integration.rbi +8 -2
  172. data/rbi/workos/user_management.rbi +46 -0
  173. data/rbi/workos/vault_kek_deleted.rbi +54 -0
  174. data/rbi/workos/vault_kek_deleted_data.rbi +48 -0
  175. data/rbi/workos/widget_session_token.rbi +2 -2
  176. data/rbi/workos/widgets.rbi +1 -1
  177. data/test/workos/test_agents.rb +49 -0
  178. data/test/workos/test_agents_model_round_trip.rb +165 -0
  179. data/test/workos/test_api_keys_model_round_trip.rb +307 -0
  180. data/test/workos/test_authkit_helpers.rb +22 -10
  181. data/test/workos/test_authorization_model_round_trip.rb +237 -0
  182. data/test/workos/test_base_client.rb +27 -0
  183. data/test/workos/test_client_api_model_round_trip.rb +31 -0
  184. data/test/workos/test_connect_model_round_trip.rb +175 -0
  185. data/test/workos/test_directory_sync_model_round_trip.rb +579 -0
  186. data/test/workos/test_feature_flags_model_round_trip.rb +580 -0
  187. data/test/workos/test_groups_model_round_trip.rb +56 -0
  188. data/test/workos/test_multi_factor_auth_model_round_trip.rb +192 -0
  189. data/test/workos/test_organization_domains_model_round_trip.rb +260 -0
  190. data/test/workos/test_organization_membership_model_round_trip.rb +89 -0
  191. data/test/workos/test_organizations.rb +9 -1
  192. data/test/workos/test_organizations_model_round_trip.rb +602 -0
  193. data/test/workos/test_pipes_model_round_trip.rb +44 -5
  194. data/test/workos/test_pipes_provider_model_round_trip.rb +77 -0
  195. data/test/workos/test_shared_model_round_trip.rb +725 -0
  196. data/test/workos/test_sso_model_round_trip.rb +421 -0
  197. data/test/workos/test_user_management.rb +16 -0
  198. data/test/workos/test_user_management_model_round_trip.rb +1501 -0
  199. data/test/workos/test_vault_model_round_trip.rb +571 -0
  200. data/test/workos/test_widgets.rb +2 -2
  201. data/test/workos/test_widgets_model_round_trip.rb +30 -0
  202. metadata +120 -19
  203. data/lib/workos/admin_portal/domain_verification_intent_options.rb +0 -18
  204. data/lib/workos/admin_portal/intent_options.rb +0 -22
  205. data/lib/workos/admin_portal/sso_intent_options.rb +0 -22
  206. data/lib/workos/sso/connection_option.rb +0 -18
  207. data/rbi/workos/intent_options.rbi +0 -30
  208. data/test/workos/test_model_round_trip.rb +0 -6
@@ -5,18 +5,32 @@
5
5
  require "test_helper"
6
6
 
7
7
  class PipesModelRoundTripTest < Minitest::Test
8
- def test_data_integration_credentials_dto_round_trip
8
+ def test_data_integration_credentials_input_round_trip
9
9
  fixture = {
10
10
  "type" => "stub",
11
11
  "client_id" => "stub",
12
12
  "client_secret" => "stub"
13
13
  }
14
- model = WorkOS::DataIntegrationCredentialsDto.new(fixture.to_json)
14
+ model = WorkOS::DataIntegrationCredentialsInput.new(fixture.to_json)
15
15
  json = model.to_h
16
16
  assert_kind_of Hash, json
17
17
  fixture.each_key { |k| assert json.key?(k.to_sym) || json.key?(k), "Expected to_h to include key #{k}" }
18
18
  end
19
19
 
20
+ def test_api_key_installation_round_trip
21
+ fixture = {
22
+ "secret" => "stub",
23
+ "user_id" => "stub",
24
+ "organization_id" => "stub"
25
+ }
26
+ model = WorkOS::ApiKeyInstallation.new(fixture.to_json)
27
+ json = model.to_h
28
+ assert_kind_of Hash, json
29
+ assert_equal fixture["secret"], json[:secret]
30
+ assert_equal fixture["user_id"], json[:user_id]
31
+ fixture.each_key { |k| assert json.key?(k.to_sym) || json.key?(k), "Expected to_h to include key #{k}" }
32
+ end
33
+
20
34
  def test_custom_provider_definition_round_trip
21
35
  fixture = {
22
36
  "name" => "stub",
@@ -46,7 +60,10 @@ class PipesModelRoundTripTest < Minitest::Test
46
60
  "description" => nil,
47
61
  "enabled" => true,
48
62
  "scopes" => nil,
63
+ "auth_methods" => [],
64
+ "config" => {},
49
65
  "credentials" => {},
66
+ "api_key" => {},
50
67
  "custom_provider" => {}
51
68
  }
52
69
  model = WorkOS::CreateDataIntegration.new(fixture.to_json)
@@ -82,6 +99,7 @@ class PipesModelRoundTripTest < Minitest::Test
82
99
  "enabled" => true,
83
100
  "scopes" => nil,
84
101
  "credentials" => {},
102
+ "api_key" => {},
85
103
  "custom_provider" => {}
86
104
  }
87
105
  model = WorkOS::UpdateDataIntegration.new(fixture.to_json)
@@ -90,7 +108,7 @@ class PipesModelRoundTripTest < Minitest::Test
90
108
  fixture.each_key { |k| assert json.key?(k.to_sym) || json.key?(k), "Expected to_h to include key #{k}" }
91
109
  end
92
110
 
93
- def test_connected_account_dto_round_trip
111
+ def test_connected_account_input_round_trip
94
112
  fixture = {
95
113
  "access_token" => "stub",
96
114
  "refresh_token" => "stub",
@@ -98,7 +116,7 @@ class PipesModelRoundTripTest < Minitest::Test
98
116
  "scopes" => [],
99
117
  "state" => "stub"
100
118
  }
101
- model = WorkOS::ConnectedAccountDto.new(fixture.to_json)
119
+ model = WorkOS::ConnectedAccountInput.new(fixture.to_json)
102
120
  json = model.to_h
103
121
  assert_kind_of Hash, json
104
122
  fixture.each_key { |k| assert json.key?(k.to_sym) || json.key?(k), "Expected to_h to include key #{k}" }
@@ -115,7 +133,10 @@ class PipesModelRoundTripTest < Minitest::Test
115
133
  "state" => "stub",
116
134
  "scopes" => nil,
117
135
  "redirect_uri" => "stub",
136
+ "auth_methods" => [],
118
137
  "credentials" => {},
138
+ "installation" => nil,
139
+ "config" => {},
119
140
  "custom_provider" => nil,
120
141
  "created_at" => "stub",
121
142
  "updated_at" => "stub"
@@ -281,6 +302,23 @@ class PipesModelRoundTripTest < Minitest::Test
281
302
  fixture.each_key { |k| assert json.key?(k.to_sym) || json.key?(k), "Expected to_h to include key #{k}" }
282
303
  end
283
304
 
305
+ def test_data_integration_installation_round_trip
306
+ fixture = {
307
+ "id" => "stub",
308
+ "user_id" => "stub",
309
+ "organization_id" => nil,
310
+ "api_key_last_4" => nil
311
+ }
312
+ model = WorkOS::DataIntegrationInstallation.new(fixture.to_json)
313
+ json = model.to_h
314
+ assert_kind_of Hash, json
315
+ assert_equal fixture["id"], json[:id]
316
+ assert_equal fixture["user_id"], json[:user_id]
317
+ assert_nil json[:organization_id]
318
+ assert_nil json[:api_key_last_4]
319
+ fixture.each_key { |k| assert json.key?(k.to_sym) || json.key?(k), "Expected to_h to include key #{k}" }
320
+ end
321
+
284
322
  def test_data_integration_custom_provider_round_trip
285
323
  fixture = {
286
324
  "name" => "stub",
@@ -328,7 +366,8 @@ class PipesModelRoundTripTest < Minitest::Test
328
366
  fixture = {
329
367
  "user_id" => "stub",
330
368
  "organization_id" => "stub",
331
- "return_to" => "stub"
369
+ "return_to" => "stub",
370
+ "config" => {}
332
371
  }
333
372
  model = WorkOS::DataIntegrationsGetDataIntegrationAuthorizeUrlRequest.new(fixture.to_json)
334
373
  json = model.to_h
@@ -0,0 +1,77 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is auto-generated by oagen. Do not edit.
4
+
5
+ require "test_helper"
6
+
7
+ class PipesProviderModelRoundTripTest < Minitest::Test
8
+ def test_data_integration_credentials_round_trip
9
+ fixture = {
10
+ "credentials_type" => "stub",
11
+ "has_credentials" => true,
12
+ "client_id" => nil,
13
+ "client_secret_last_four" => nil,
14
+ "redirect_uri" => "stub"
15
+ }
16
+ model = WorkOS::DataIntegrationCredentials.new(fixture.to_json)
17
+ json = model.to_h
18
+ assert_kind_of Hash, json
19
+ assert_equal fixture["has_credentials"], json[:has_credentials]
20
+ assert_nil json[:client_id]
21
+ assert_nil json[:client_secret_last_four]
22
+ assert_equal fixture["redirect_uri"], json[:redirect_uri]
23
+ fixture.each_key { |k| assert json.key?(k.to_sym) || json.key?(k), "Expected to_h to include key #{k}" }
24
+ end
25
+
26
+ def test_data_integration_configuration_response_round_trip
27
+ fixture = {
28
+ "object" => "data_integration_configuration",
29
+ "id" => "stub",
30
+ "organization_id" => "stub",
31
+ "slug" => "stub",
32
+ "name" => "stub",
33
+ "enabled" => true,
34
+ "scopes" => nil,
35
+ "config" => {},
36
+ "created_at" => "stub",
37
+ "updated_at" => "stub",
38
+ "credentials" => {}
39
+ }
40
+ model = WorkOS::DataIntegrationConfigurationResponse.new(fixture.to_json)
41
+ json = model.to_h
42
+ assert_kind_of Hash, json
43
+ assert_equal fixture["id"], json[:id]
44
+ assert_equal fixture["organization_id"], json[:organization_id]
45
+ assert_equal fixture["slug"], json[:slug]
46
+ assert_equal fixture["name"], json[:name]
47
+ assert_equal fixture["enabled"], json[:enabled]
48
+ assert_equal fixture["created_at"], json[:created_at]
49
+ assert_equal fixture["updated_at"], json[:updated_at]
50
+ fixture.each_key { |k| assert json.key?(k.to_sym) || json.key?(k), "Expected to_h to include key #{k}" }
51
+ end
52
+
53
+ def test_data_integration_configuration_list_response_round_trip
54
+ fixture = {
55
+ "object" => "list",
56
+ "data" => []
57
+ }
58
+ model = WorkOS::DataIntegrationConfigurationListResponse.new(fixture.to_json)
59
+ json = model.to_h
60
+ assert_kind_of Hash, json
61
+ fixture.each_key { |k| assert json.key?(k.to_sym) || json.key?(k), "Expected to_h to include key #{k}" }
62
+ end
63
+
64
+ def test_configure_data_integration_body_round_trip
65
+ fixture = {
66
+ "enabled" => true,
67
+ "scopes" => nil,
68
+ "client_id" => "stub",
69
+ "client_secret" => "stub",
70
+ "config" => {}
71
+ }
72
+ model = WorkOS::ConfigureDataIntegrationBody.new(fixture.to_json)
73
+ json = model.to_h
74
+ assert_kind_of Hash, json
75
+ fixture.each_key { |k| assert json.key?(k.to_sym) || json.key?(k), "Expected to_h to include key #{k}" }
76
+ end
77
+ end