pact_broker 2.79.1 → 2.80.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (880) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +37 -11
  3. data/.rubocop.yml +37 -879
  4. data/.ruby-version +1 -1
  5. data/CHANGELOG.md +68 -4
  6. data/DEVELOPER_SETUP.md +6 -0
  7. data/Dockerfile +1 -1
  8. data/Gemfile +30 -28
  9. data/Rakefile +8 -6
  10. data/config.ru +11 -11
  11. data/config/boot.rb +6 -6
  12. data/db/ddl_statements/latest_pact_consumer_version_orders.rb +1 -1
  13. data/db/ddl_statements/latest_pact_publications_by_consumer_versions.rb +2 -2
  14. data/db/migrations/000001_create_pacticipant_table.rb +1 -1
  15. data/db/migrations/000002_create_versions_table.rb +1 -1
  16. data/db/migrations/000003_create_pacts_table.rb +1 -1
  17. data/db/migrations/000004_create_tags_table.rb +1 -1
  18. data/db/migrations/000007_increase_json_content_length.rb +1 -1
  19. data/db/migrations/000012_create_webhooks_table.rb +6 -6
  20. data/db/migrations/000015_create_pact_version_content.rb +4 -4
  21. data/db/migrations/000016_add_pact_content_foreign_key_to_pacts.rb +3 -3
  22. data/db/migrations/000017_migrate_json_content_to_pact_version_content_table.rb +2 -2
  23. data/db/migrations/000018_drop_json_content_column_from_pacts.rb +2 -2
  24. data/db/migrations/000019_make_pact_version_content_sha_not_nullable.rb +2 -2
  25. data/db/migrations/000020_add_pact_version_content_sha_to_all_pacts_view.rb +2 -2
  26. data/db/migrations/000021_recreate_latest_pacts_view.rb +2 -2
  27. data/db/migrations/000023_create_pact_versions_table.rb +3 -3
  28. data/db/migrations/000026_create_pact_publications.rb +3 -3
  29. data/db/migrations/000031_create_verifications.rb +1 -1
  30. data/db/migrations/000033_create_config_table.rb +3 -3
  31. data/db/migrations/000034_create_index_on_consumer_version_order.rb +3 -3
  32. data/db/migrations/000035_create_index_on_names.rb +2 -2
  33. data/db/migrations/000036_create_webhook_execution.rb +2 -2
  34. data/db/migrations/000037_create_labels_table.rb +1 -1
  35. data/db/migrations/000038_create_triggered_webhooks_table.rb +3 -3
  36. data/db/migrations/000041_migrate_execution_data.rb +3 -3
  37. data/db/migrations/000043_add_provider_version_to_verification.rb +1 -1
  38. data/db/migrations/000044_populate_verifications_provider_version_id.rb +9 -9
  39. data/db/migrations/20171112_add_test_results.rb +1 -1
  40. data/db/migrations/20171117_create_webhook_events.rb +3 -3
  41. data/db/migrations/20171118_create_webhook_events.rb +2 -2
  42. data/db/migrations/20180108_create_certificates_table.rb +3 -3
  43. data/db/migrations/20180109_migrate_trigger_type.rb +2 -2
  44. data/db/migrations/20180119_update_latest_triggered_webhooks.rb +1 -1
  45. data/db/migrations/20180123_create_tags_with_latest_flag.rb +1 -1
  46. data/db/migrations/20180130_create_materialized_matrix.rb +4 -4
  47. data/db/migrations/20180131_create_materialized_latest_matrix.rb +4 -4
  48. data/db/migrations/20180202_create_materialized_head_matrix.rb +4 -4
  49. data/db/migrations/20180205_drop_materialized_latest_matrix.rb +4 -4
  50. data/db/migrations/20180210_fix_latest_matrix_for_cv_and_pv_again.rb +2 -2
  51. data/db/migrations/20180311_optimise_head_matrix.rb +2 -3
  52. data/db/migrations/20180523_create_latest_verifications_for_consumer_version_tags.rb +1 -1
  53. data/db/migrations/20180524_create_latest_verifications_for_consumer_and_provider.rb +1 -1
  54. data/db/migrations/20180613_migrate_pacticipant_ids_for_verifications.rb +1 -1
  55. data/db/migrations/20180614_update_latest_verification_ids_for_consumer_and_provider.rb +1 -1
  56. data/db/migrations/20180616_migrate_consumer_ids_for_pact_publications.rb +1 -1
  57. data/db/migrations/20180720_create_latest_pact_publication_ids.rb +1 -1
  58. data/db/migrations/20180722_recreate_views.rb +1 -1
  59. data/db/migrations/20180723_create_latest_verification_ids.rb +6 -6
  60. data/db/migrations/20180729_create_latest_verification_ids_for_provider_versions.rb +1 -1
  61. data/db/migrations/20190509_create_version_sequence.rb +1 -1
  62. data/db/migrations/20190510_set_version_sequence.rb +1 -1
  63. data/db/migrations/20190524_set_webhooks_enabled.rb +1 -1
  64. data/db/migrations/20190603_migrate_webhook_headers.rb +1 -1
  65. data/db/migrations/20191025_optimise_latest_verification_ids_for_cv_tags.rb +1 -1
  66. data/db/migrations/20191028_optimise_latest_tagged_pact_cv_orders.rb +1 -1
  67. data/db/migrations/20191030_optimise_latest_pact_publications_by_consumer_versions_.rb +1 -1
  68. data/db/migrations/20191031_optimise_latest_verification_ids_for_consumer_version_tags.rb +1 -1
  69. data/db/migrations/20191101_create_head_pact_tags.rb +1 -1
  70. data/db/migrations/20200930_update_latest_triggered_webhooks.rb +2 -2
  71. data/db/migrations/20201023_create_verification_number_sequence.rb +1 -1
  72. data/db/migrations/20201024_create_version_order_sequence.rb +1 -1
  73. data/db/migrations/20201026_update_latest_verification_ids_for_consumer_and_provider.rb +2 -2
  74. data/db/migrations/20210115_add_webhook_foreign_key_indexes.rb +1 -1
  75. data/db/migrations/20210116_add_context_to_triggered_webhook.rb +1 -1
  76. data/db/migrations/20210202_add_created_at_to_head_pact_tags.rb +2 -2
  77. data/db/migrations/20210205_add_pacticipant_id_to_tag.rb +1 -1
  78. data/db/migrations/20210206_add_index_to_tags_and_versions.rb +1 -1
  79. data/db/migrations/20210207_optimise_latest_verification_ids_for_consumer_version_tags.rb +1 -1
  80. data/db/migrations/20210208_optimise_latest_tagged_pact_cv_orders.rb +1 -1
  81. data/db/migrations/20210210_create_environments_table.rb +6 -6
  82. data/db/migrations/20210216_create_deployed_versions_table.rb +18 -0
  83. data/db/migrations/20210226_set_deployment_columns_not_null.rb +31 -0
  84. data/db/migrations/20210301_add_pacticipant_columns.rb +10 -0
  85. data/db/migrations/20210413_create_currently_deployed_version_ids_table.rb +13 -0
  86. data/db/migrations/20210415_add_target_column_to_deployed_version.rb +21 -0
  87. data/db/migrations/20210419_create_released_versions_table.rb +17 -0
  88. data/db/migrations/20210529_add_main_branch_to_pacticipant.rb +18 -0
  89. data/db/migrations/20210608_add_uuid_to_webhook.rb +14 -0
  90. data/db/migrations/20210609_set_webhook_uuid.rb +11 -0
  91. data/db/migrations/20210702_drop_unused_columns_from_deployed_versions.rb +15 -0
  92. data/db/migrations/migration_helper.rb +3 -3
  93. data/db/test/backwards_compatibility/Gemfile +11 -11
  94. data/db/test/backwards_compatibility/Rakefile +17 -17
  95. data/db/test/backwards_compatibility/config.ru +6 -6
  96. data/db/test/backwards_compatibility/spec/publish_pact_spec.rb +13 -13
  97. data/db/test/backwards_compatibility/spec/spec_helper.rb +3 -3
  98. data/db/test/backwards_compatibility/spec/support/fixture_helpers.rb +2 -2
  99. data/db/test/backwards_compatibility/spec/support/request_helpers.rb +3 -4
  100. data/db/test/change_migration_strategy/Rakefile +6 -6
  101. data/db/test/change_migration_strategy/before/Gemfile +1 -1
  102. data/example/Gemfile +4 -4
  103. data/example/basic_auth/Gemfile +1 -1
  104. data/example/basic_auth/config.ru +7 -7
  105. data/example/config.ru +7 -7
  106. data/issue-reproduction/Dockerfile-pact-broker +1 -1
  107. data/lib/db.rb +18 -12
  108. data/lib/pact/doc/generator.rb +3 -3
  109. data/lib/pact/doc/interaction_view_model.rb +13 -13
  110. data/lib/pact/doc/markdown/consumer_contract_renderer.rb +4 -4
  111. data/lib/pact/doc/markdown/generator.rb +6 -6
  112. data/lib/pact/doc/markdown/interaction_renderer.rb +4 -4
  113. data/lib/pact/doc/sort_interactions.rb +0 -1
  114. data/lib/pact_broker.rb +4 -4
  115. data/lib/pact_broker/api.rb +97 -78
  116. data/lib/pact_broker/api/contracts/base_contract.rb +2 -2
  117. data/lib/pact_broker/api/contracts/dry_validation_predicates.rb +10 -1
  118. data/lib/pact_broker/api/contracts/dry_validation_workarounds.rb +3 -2
  119. data/lib/pact_broker/api/contracts/environment_schema.rb +6 -6
  120. data/lib/pact_broker/api/contracts/pacticipant_name_contract.rb +1 -1
  121. data/lib/pact_broker/api/contracts/pacticipant_name_validation.rb +2 -2
  122. data/lib/pact_broker/api/contracts/pacticipant_schema.rb +34 -0
  123. data/lib/pact_broker/api/contracts/publish_contracts_schema.rb +104 -0
  124. data/lib/pact_broker/api/contracts/put_pact_params_contract.rb +1 -1
  125. data/lib/pact_broker/api/contracts/request_validations.rb +2 -2
  126. data/lib/pact_broker/api/contracts/verifiable_pacts_json_query_schema.rb +70 -15
  127. data/lib/pact_broker/api/contracts/verifiable_pacts_query_schema.rb +3 -3
  128. data/lib/pact_broker/api/contracts/verification_contract.rb +2 -2
  129. data/lib/pact_broker/api/contracts/webhook_contract.rb +10 -7
  130. data/lib/pact_broker/api/decorators/base_decorator.rb +11 -7
  131. data/lib/pact_broker/api/decorators/basic_pacticipant_decorator.rb +1 -1
  132. data/lib/pact_broker/api/decorators/configuration.rb +2 -2
  133. data/lib/pact_broker/api/decorators/dashboard_decorator.rb +8 -8
  134. data/lib/pact_broker/api/decorators/dashboard_text_decorator.rb +3 -3
  135. data/lib/pact_broker/api/decorators/decorator_context.rb +1 -1
  136. data/lib/pact_broker/api/decorators/decorator_context_creator.rb +1 -1
  137. data/lib/pact_broker/api/decorators/deployed_version_decorator.rb +26 -0
  138. data/lib/pact_broker/api/decorators/deployed_versions_decorator.rb +20 -0
  139. data/lib/pact_broker/api/decorators/embedded_label_decorator.rb +2 -2
  140. data/lib/pact_broker/api/decorators/embedded_pacticipant_decorator.rb +17 -0
  141. data/lib/pact_broker/api/decorators/embedded_tag_decorator.rb +4 -4
  142. data/lib/pact_broker/api/decorators/embedded_version_decorator.rb +7 -2
  143. data/lib/pact_broker/api/decorators/environment_decorator.rb +26 -5
  144. data/lib/pact_broker/api/decorators/environments_decorator.rb +14 -4
  145. data/lib/pact_broker/api/decorators/extended_pact_decorator.rb +2 -2
  146. data/lib/pact_broker/api/decorators/extended_verification_decorator.rb +2 -2
  147. data/lib/pact_broker/api/decorators/integration_decorator.rb +2 -2
  148. data/lib/pact_broker/api/decorators/integrations_decorator.rb +2 -2
  149. data/lib/pact_broker/api/decorators/label_decorator.rb +5 -5
  150. data/lib/pact_broker/api/decorators/latest_pact_decorator.rb +2 -2
  151. data/lib/pact_broker/api/decorators/matrix_decorator.rb +26 -11
  152. data/lib/pact_broker/api/decorators/matrix_text_decorator.rb +5 -5
  153. data/lib/pact_broker/api/decorators/pact_collection_decorator.rb +6 -6
  154. data/lib/pact_broker/api/decorators/pact_decorator.rb +5 -5
  155. data/lib/pact_broker/api/decorators/pact_details_decorator.rb +2 -2
  156. data/lib/pact_broker/api/decorators/pact_pacticipant_decorator.rb +3 -3
  157. data/lib/pact_broker/api/decorators/pact_version_decorator.rb +3 -3
  158. data/lib/pact_broker/api/decorators/pact_versions_decorator.rb +2 -2
  159. data/lib/pact_broker/api/decorators/pact_webhooks_status_decorator.rb +6 -6
  160. data/lib/pact_broker/api/decorators/pacticipant_collection_decorator.rb +8 -8
  161. data/lib/pact_broker/api/decorators/pacticipant_decorator.rb +29 -13
  162. data/lib/pact_broker/api/decorators/pagination_links.rb +2 -2
  163. data/lib/pact_broker/api/decorators/provider_pacts_decorator.rb +2 -3
  164. data/lib/pact_broker/api/decorators/publish_contract_decorator.rb +19 -0
  165. data/lib/pact_broker/api/decorators/publish_contracts_decorator.rb +21 -0
  166. data/lib/pact_broker/api/decorators/publish_contracts_results_decorator.rb +55 -0
  167. data/lib/pact_broker/api/decorators/reason_decorator.rb +30 -14
  168. data/lib/pact_broker/api/decorators/relationships_csv_decorator.rb +3 -1
  169. data/lib/pact_broker/api/decorators/released_version_decorator.rb +25 -0
  170. data/lib/pact_broker/api/decorators/released_versions_decorator.rb +20 -0
  171. data/lib/pact_broker/api/decorators/representable_pact.rb +1 -1
  172. data/lib/pact_broker/api/decorators/tag_decorator.rb +6 -6
  173. data/lib/pact_broker/api/decorators/tagged_pact_versions_decorator.rb +2 -2
  174. data/lib/pact_broker/api/decorators/timestamps.rb +2 -2
  175. data/lib/pact_broker/api/decorators/triggered_webhook_decorator.rb +8 -6
  176. data/lib/pact_broker/api/decorators/triggered_webhooks_decorator.rb +2 -2
  177. data/lib/pact_broker/api/decorators/verifiable_pact_decorator.rb +4 -4
  178. data/lib/pact_broker/api/decorators/verifiable_pacts_decorator.rb +3 -3
  179. data/lib/pact_broker/api/decorators/verifiable_pacts_query_decorator.rb +16 -9
  180. data/lib/pact_broker/api/decorators/verification_decorator.rb +6 -6
  181. data/lib/pact_broker/api/decorators/verification_summary_decorator.rb +4 -4
  182. data/lib/pact_broker/api/decorators/version_decorator.rb +26 -6
  183. data/lib/pact_broker/api/decorators/versions_decorator.rb +5 -5
  184. data/lib/pact_broker/api/decorators/webhook_decorator.rb +10 -8
  185. data/lib/pact_broker/api/decorators/webhook_execution_result_decorator.rb +7 -7
  186. data/lib/pact_broker/api/decorators/webhook_request_template_decorator.rb +1 -1
  187. data/lib/pact_broker/api/decorators/webhooks_decorator.rb +3 -3
  188. data/lib/pact_broker/api/pact_broker_urls.rb +119 -71
  189. data/lib/pact_broker/api/paths.rb +2 -2
  190. data/lib/pact_broker/api/renderers/html_pact_renderer.rb +16 -17
  191. data/lib/pact_broker/api/resources.rb +1 -1
  192. data/lib/pact_broker/api/resources/all_webhooks.rb +14 -6
  193. data/lib/pact_broker/api/resources/authentication.rb +1 -1
  194. data/lib/pact_broker/api/resources/authorization.rb +37 -0
  195. data/lib/pact_broker/api/resources/badge.rb +8 -8
  196. data/lib/pact_broker/api/resources/base_resource.rb +1 -1
  197. data/lib/pact_broker/api/resources/can_i_deploy.rb +13 -13
  198. data/lib/pact_broker/api/resources/can_i_deploy_badge.rb +7 -7
  199. data/lib/pact_broker/api/resources/can_i_deploy_pacticipant_version.rb +23 -18
  200. data/lib/pact_broker/api/resources/clean.rb +3 -3
  201. data/lib/pact_broker/api/resources/currently_deployed_versions_for_environment.rb +75 -0
  202. data/lib/pact_broker/api/resources/currently_supported_versions_for_environment.rb +70 -0
  203. data/lib/pact_broker/api/resources/dashboard.rb +3 -3
  204. data/lib/pact_broker/api/resources/default_base_resource.rb +35 -22
  205. data/lib/pact_broker/api/resources/deployed_version.rb +94 -0
  206. data/lib/pact_broker/api/resources/deployed_versions_for_version_and_environment.rb +89 -0
  207. data/lib/pact_broker/api/resources/environment.rb +2 -2
  208. data/lib/pact_broker/api/resources/environments.rb +9 -5
  209. data/lib/pact_broker/api/resources/error_handler.rb +4 -4
  210. data/lib/pact_broker/api/resources/error_response_body_generator.rb +3 -3
  211. data/lib/pact_broker/api/resources/error_test.rb +2 -2
  212. data/lib/pact_broker/api/resources/group.rb +2 -2
  213. data/lib/pact_broker/api/resources/index.rb +79 -72
  214. data/lib/pact_broker/api/resources/integration.rb +1 -1
  215. data/lib/pact_broker/api/resources/integrations.rb +3 -3
  216. data/lib/pact_broker/api/resources/label.rb +2 -2
  217. data/lib/pact_broker/api/resources/latest_pact.rb +5 -5
  218. data/lib/pact_broker/api/resources/latest_pacts.rb +1 -1
  219. data/lib/pact_broker/api/resources/latest_provider_pacts.rb +3 -3
  220. data/lib/pact_broker/api/resources/latest_verification_for_latest_pact.rb +5 -1
  221. data/lib/pact_broker/api/resources/latest_verification_for_pact.rb +5 -1
  222. data/lib/pact_broker/api/resources/latest_verifications_for_consumer_version.rb +5 -5
  223. data/lib/pact_broker/api/resources/latest_version.rb +1 -1
  224. data/lib/pact_broker/api/resources/matrix.rb +18 -13
  225. data/lib/pact_broker/api/resources/matrix_badge.rb +1 -1
  226. data/lib/pact_broker/api/resources/matrix_for_consumer_and_provider.rb +2 -2
  227. data/lib/pact_broker/api/resources/metadata_resource_methods.rb +2 -2
  228. data/lib/pact_broker/api/resources/metrics.rb +1 -1
  229. data/lib/pact_broker/api/resources/pact.rb +17 -27
  230. data/lib/pact_broker/api/resources/pact_content_diff.rb +3 -3
  231. data/lib/pact_broker/api/resources/pact_triggered_webhooks.rb +7 -3
  232. data/lib/pact_broker/api/resources/pact_version.rb +2 -2
  233. data/lib/pact_broker/api/resources/pact_versions.rb +3 -3
  234. data/lib/pact_broker/api/resources/pact_webhooks.rb +7 -8
  235. data/lib/pact_broker/api/resources/pact_webhooks_status.rb +2 -2
  236. data/lib/pact_broker/api/resources/pacticipant.rb +51 -15
  237. data/lib/pact_broker/api/resources/pacticipant_resource_methods.rb +1 -1
  238. data/lib/pact_broker/api/resources/{webhooks.rb → pacticipant_webhooks.rb} +12 -8
  239. data/lib/pact_broker/api/resources/pacticipants.rb +13 -8
  240. data/lib/pact_broker/api/resources/pacticipants_for_label.rb +2 -2
  241. data/lib/pact_broker/api/resources/previous_distinct_pact_version.rb +4 -4
  242. data/lib/pact_broker/api/resources/provider_pacts.rb +3 -3
  243. data/lib/pact_broker/api/resources/provider_pacts_for_verification.rb +10 -6
  244. data/lib/pact_broker/api/resources/publish_contracts.rb +81 -0
  245. data/lib/pact_broker/api/resources/relationships.rb +2 -2
  246. data/lib/pact_broker/api/resources/released_version.rb +84 -0
  247. data/lib/pact_broker/api/resources/released_versions_for_version_and_environment.rb +94 -0
  248. data/lib/pact_broker/api/resources/tag.rb +1 -1
  249. data/lib/pact_broker/api/resources/tagged_pact_versions.rb +4 -4
  250. data/lib/pact_broker/api/resources/triggered_webhook_logs.rb +16 -8
  251. data/lib/pact_broker/api/resources/verification.rb +17 -7
  252. data/lib/pact_broker/api/resources/verification_triggered_webhooks.rb +7 -3
  253. data/lib/pact_broker/api/resources/verifications.rb +13 -18
  254. data/lib/pact_broker/api/resources/version.rb +49 -11
  255. data/lib/pact_broker/api/resources/versions.rb +6 -6
  256. data/lib/pact_broker/api/resources/webhook.rb +17 -9
  257. data/lib/pact_broker/api/resources/webhook_execution.rb +18 -14
  258. data/lib/pact_broker/api/resources/webhook_execution_methods.rb +31 -0
  259. data/lib/pact_broker/app.rb +36 -34
  260. data/lib/pact_broker/application_context.rb +5 -5
  261. data/lib/pact_broker/badges/service.rb +22 -22
  262. data/lib/pact_broker/build_http_options.rb +2 -2
  263. data/lib/pact_broker/certificates/service.rb +4 -4
  264. data/lib/pact_broker/config/load.rb +4 -4
  265. data/lib/pact_broker/config/repository.rb +1 -1
  266. data/lib/pact_broker/config/save.rb +4 -4
  267. data/lib/pact_broker/config/setting.rb +28 -24
  268. data/lib/pact_broker/config/space_delimited_integer_list.rb +3 -3
  269. data/lib/pact_broker/config/space_delimited_string_list.rb +3 -3
  270. data/lib/pact_broker/configuration.rb +22 -20
  271. data/lib/pact_broker/constants.rb +2 -2
  272. data/lib/pact_broker/contracts/contract_to_publish.rb +19 -0
  273. data/lib/pact_broker/contracts/contracts_publication_results.rb +14 -0
  274. data/lib/pact_broker/contracts/contracts_to_publish.rb +11 -0
  275. data/lib/pact_broker/contracts/notice.rb +21 -0
  276. data/lib/pact_broker/contracts/service.rb +264 -0
  277. data/lib/pact_broker/date_helper.rb +48 -46
  278. data/lib/pact_broker/db.rb +11 -7
  279. data/lib/pact_broker/db/clean.rb +4 -8
  280. data/lib/pact_broker/db/clean_incremental.rb +8 -6
  281. data/lib/pact_broker/db/data_migrations/delete_deprecated_webhook_executions.rb +1 -1
  282. data/lib/pact_broker/db/data_migrations/migrate_webhook_headers.rb +1 -1
  283. data/lib/pact_broker/db/data_migrations/set_consumer_ids_for_pact_publications.rb +1 -1
  284. data/lib/pact_broker/db/data_migrations/set_created_at_for_latest_pact_publications.rb +1 -1
  285. data/lib/pact_broker/db/data_migrations/set_created_at_for_latest_verifications.rb +1 -1
  286. data/lib/pact_broker/db/data_migrations/set_extra_columns_for_tags.rb +1 -1
  287. data/lib/pact_broker/db/data_migrations/set_latest_version_sequence_value.rb +1 -1
  288. data/lib/pact_broker/db/data_migrations/set_pacticipant_display_name.rb +23 -0
  289. data/lib/pact_broker/db/data_migrations/set_pacticipant_ids_for_verifications.rb +1 -1
  290. data/lib/pact_broker/db/data_migrations/set_pacticipant_main_branch.rb +53 -0
  291. data/lib/pact_broker/db/data_migrations/set_webhook_uuid.rb +24 -0
  292. data/lib/pact_broker/db/data_migrations/set_webhooks_enabled.rb +1 -1
  293. data/lib/pact_broker/db/delete_overwritten_data.rb +7 -7
  294. data/lib/pact_broker/db/log_quietener.rb +1 -1
  295. data/lib/pact_broker/db/migrate.rb +4 -4
  296. data/lib/pact_broker/db/migrate_data.rb +4 -1
  297. data/lib/pact_broker/db/models.rb +17 -12
  298. data/lib/pact_broker/db/seed_example_data.rb +9 -4
  299. data/lib/pact_broker/db/validate_encoding.rb +4 -4
  300. data/lib/pact_broker/db/version.rb +1 -1
  301. data/lib/pact_broker/deployments/currently_deployed_version_id.rb +30 -0
  302. data/lib/pact_broker/deployments/deployed_version.rb +115 -0
  303. data/lib/pact_broker/deployments/deployed_version_service.rb +85 -0
  304. data/lib/pact_broker/deployments/environment.rb +37 -3
  305. data/lib/pact_broker/deployments/environment_service.rb +15 -2
  306. data/lib/pact_broker/deployments/released_version.rb +83 -0
  307. data/lib/pact_broker/deployments/released_version_service.rb +47 -0
  308. data/lib/pact_broker/diagnostic/app.rb +8 -8
  309. data/lib/pact_broker/diagnostic/resources/base_resource.rb +2 -2
  310. data/lib/pact_broker/diagnostic/resources/dependencies.rb +3 -3
  311. data/lib/pact_broker/diagnostic/resources/heartbeat.rb +1 -1
  312. data/lib/pact_broker/doc/controllers/app.rb +10 -10
  313. data/lib/pact_broker/doc/views/can-i-deploy.markdown +4 -2
  314. data/lib/pact_broker/doc/views/index/pacticipants.markdown +25 -3
  315. data/lib/pact_broker/doc/views/index/publish-contracts.markdown +120 -0
  316. data/lib/pact_broker/doc/views/provider-pacts-for-verification.markdown +22 -11
  317. data/lib/pact_broker/doc/views/webhooks.markdown +5 -3
  318. data/lib/pact_broker/domain.rb +6 -6
  319. data/lib/pact_broker/domain/index_item.rb +27 -8
  320. data/lib/pact_broker/domain/label.rb +1 -2
  321. data/lib/pact_broker/domain/order_versions.rb +2 -2
  322. data/lib/pact_broker/domain/pact.rb +14 -7
  323. data/lib/pact_broker/domain/pacticipant.rb +27 -18
  324. data/lib/pact_broker/domain/tag.rb +5 -3
  325. data/lib/pact_broker/domain/verification.rb +8 -8
  326. data/lib/pact_broker/domain/version.rb +55 -10
  327. data/lib/pact_broker/domain/webhook.rb +14 -15
  328. data/lib/pact_broker/domain/webhook_request.rb +14 -18
  329. data/lib/pact_broker/errors.rb +7 -7
  330. data/lib/pact_broker/errors/error_logger.rb +3 -3
  331. data/lib/pact_broker/events/event.rb +5 -0
  332. data/lib/pact_broker/events/publisher.rb +9 -0
  333. data/lib/pact_broker/events/subscriber.rb +42 -0
  334. data/lib/pact_broker/feature_toggle.rb +2 -2
  335. data/lib/pact_broker/groups/service.rb +2 -2
  336. data/lib/pact_broker/hash_refinements.rb +12 -12
  337. data/lib/pact_broker/index/service.rb +69 -36
  338. data/lib/pact_broker/integrations/integration.rb +5 -5
  339. data/lib/pact_broker/integrations/service.rb +11 -7
  340. data/lib/pact_broker/labels/repository.rb +2 -2
  341. data/lib/pact_broker/labels/service.rb +1 -1
  342. data/lib/pact_broker/locale/en.yml +51 -13
  343. data/lib/pact_broker/logging.rb +3 -3
  344. data/lib/pact_broker/logging/default_formatter.rb +3 -3
  345. data/lib/pact_broker/matrix/aggregated_row.rb +4 -4
  346. data/lib/pact_broker/matrix/can_i_deploy_query_schema.rb +17 -2
  347. data/lib/pact_broker/matrix/deployment_status_summary.rb +78 -38
  348. data/lib/pact_broker/matrix/every_row.rb +2 -2
  349. data/lib/pact_broker/matrix/head_row.rb +2 -2
  350. data/lib/pact_broker/matrix/integration.rb +6 -6
  351. data/lib/pact_broker/matrix/parse_can_i_deploy_query.rb +19 -3
  352. data/lib/pact_broker/matrix/parse_query.rb +47 -24
  353. data/lib/pact_broker/matrix/query_builder.rb +10 -10
  354. data/lib/pact_broker/matrix/query_results.rb +9 -4
  355. data/lib/pact_broker/matrix/query_results_with_deployment_status_summary.rb +3 -3
  356. data/lib/pact_broker/matrix/quick_row.rb +32 -34
  357. data/lib/pact_broker/matrix/reason.rb +88 -1
  358. data/lib/pact_broker/matrix/repository.rb +137 -66
  359. data/lib/pact_broker/matrix/resolved_selector.rb +82 -7
  360. data/lib/pact_broker/matrix/row.rb +6 -6
  361. data/lib/pact_broker/matrix/service.rb +44 -14
  362. data/lib/pact_broker/matrix/unresolved_selector.rb +22 -2
  363. data/lib/pact_broker/messages.rb +17 -5
  364. data/lib/pact_broker/metrics/service.rb +16 -15
  365. data/lib/pact_broker/pacticipants/find_potential_duplicate_pacticipant_names.rb +5 -5
  366. data/lib/pact_broker/pacticipants/generate_display_name.rb +27 -0
  367. data/lib/pact_broker/pacticipants/repository.rb +34 -16
  368. data/lib/pact_broker/pacticipants/service.rb +19 -19
  369. data/lib/pact_broker/pacts/all_pact_publications.rb +6 -6
  370. data/lib/pact_broker/pacts/build_verifiable_pact_notices.rb +8 -8
  371. data/lib/pact_broker/pacts/content.rb +23 -21
  372. data/lib/pact_broker/pacts/create_formatted_diff.rb +3 -3
  373. data/lib/pact_broker/pacts/diff.rb +8 -8
  374. data/lib/pact_broker/pacts/eager_loaders.rb +1 -1
  375. data/lib/pact_broker/pacts/generate_interaction_sha.rb +2 -2
  376. data/lib/pact_broker/pacts/generate_sha.rb +10 -10
  377. data/lib/pact_broker/pacts/head_pact.rb +1 -1
  378. data/lib/pact_broker/pacts/latest_pact_publication_id_for_consumer_version.rb +2 -2
  379. data/lib/pact_broker/pacts/latest_pact_publications.rb +2 -2
  380. data/lib/pact_broker/pacts/latest_pact_publications_by_consumer_version.rb +1 -1
  381. data/lib/pact_broker/pacts/latest_tagged_pact_publications.rb +2 -2
  382. data/lib/pact_broker/pacts/lazy_loaders.rb +2 -2
  383. data/lib/pact_broker/pacts/merger.rb +2 -2
  384. data/lib/pact_broker/pacts/order_hash_keys.rb +1 -1
  385. data/lib/pact_broker/pacts/pact_params.rb +7 -7
  386. data/lib/pact_broker/pacts/pact_publication.rb +19 -13
  387. data/lib/pact_broker/pacts/pact_publication_dataset_module.rb +7 -49
  388. data/lib/pact_broker/pacts/pact_publication_selector_dataset_module.rb +70 -0
  389. data/lib/pact_broker/pacts/pact_publication_wip_dataset_module.rb +106 -0
  390. data/lib/pact_broker/pacts/pact_version.rb +46 -14
  391. data/lib/pact_broker/pacts/pacts_for_verification_repository.rb +51 -47
  392. data/lib/pact_broker/pacts/parse.rb +1 -1
  393. data/lib/pact_broker/pacts/placeholder_pact.rb +1 -1
  394. data/lib/pact_broker/pacts/repository.rb +27 -23
  395. data/lib/pact_broker/pacts/selected_pact.rb +5 -1
  396. data/lib/pact_broker/pacts/selector.rb +124 -6
  397. data/lib/pact_broker/pacts/selectors.rb +5 -1
  398. data/lib/pact_broker/pacts/service.rb +102 -32
  399. data/lib/pact_broker/pacts/sort_content.rb +14 -9
  400. data/lib/pact_broker/pacts/squash_pacts_for_verification.rb +0 -1
  401. data/lib/pact_broker/pacts/verifiable_pact.rb +5 -3
  402. data/lib/pact_broker/pacts/verifiable_pact_messages.rb +82 -37
  403. data/lib/pact_broker/policies.rb +1 -1
  404. data/lib/pact_broker/project_root.rb +2 -2
  405. data/lib/pact_broker/relationships/groupify.rb +1 -1
  406. data/lib/pact_broker/repositories.rb +9 -9
  407. data/lib/pact_broker/services.rb +45 -16
  408. data/lib/pact_broker/string_refinements.rb +10 -4
  409. data/lib/pact_broker/tags/eager_loaders.rb +2 -2
  410. data/lib/pact_broker/tags/head_pact_tags.rb +2 -2
  411. data/lib/pact_broker/tags/repository.rb +2 -2
  412. data/lib/pact_broker/tags/service.rb +1 -1
  413. data/lib/pact_broker/tags/tag_with_latest_flag.rb +2 -2
  414. data/lib/pact_broker/tasks.rb +5 -5
  415. data/lib/pact_broker/tasks/clean_task.rb +12 -12
  416. data/lib/pact_broker/tasks/data_migration_task.rb +4 -4
  417. data/lib/pact_broker/tasks/delete_overwritten_data_task.rb +8 -8
  418. data/lib/pact_broker/tasks/migration_task.rb +5 -5
  419. data/lib/pact_broker/tasks/version_task.rb +3 -3
  420. data/lib/pact_broker/test/http_test_data_builder.rb +72 -31
  421. data/lib/pact_broker/test/test_data_builder.rb +108 -55
  422. data/lib/pact_broker/ui.rb +3 -3
  423. data/lib/pact_broker/ui/app.rb +9 -9
  424. data/lib/pact_broker/ui/controllers/base_controller.rb +6 -6
  425. data/lib/pact_broker/ui/controllers/can_i_deploy.rb +9 -9
  426. data/lib/pact_broker/ui/controllers/clusters.rb +5 -5
  427. data/lib/pact_broker/ui/controllers/error_test.rb +3 -3
  428. data/lib/pact_broker/ui/controllers/groups.rb +4 -4
  429. data/lib/pact_broker/ui/controllers/index.rb +28 -15
  430. data/lib/pact_broker/ui/controllers/matrix.rb +11 -11
  431. data/lib/pact_broker/ui/controllers/pacts.rb +1 -1
  432. data/lib/pact_broker/ui/helpers/matrix_helper.rb +12 -8
  433. data/lib/pact_broker/ui/helpers/url_helper.rb +3 -3
  434. data/lib/pact_broker/ui/view_models/index_item.rb +19 -13
  435. data/lib/pact_broker/ui/view_models/index_items.rb +2 -2
  436. data/lib/pact_broker/ui/view_models/matrix_deployed_version.rb +37 -0
  437. data/lib/pact_broker/ui/view_models/matrix_line.rb +45 -11
  438. data/lib/pact_broker/ui/view_models/matrix_lines.rb +1 -1
  439. data/lib/pact_broker/ui/view_models/matrix_released_version.rb +37 -0
  440. data/lib/pact_broker/ui/view_models/matrix_tag.rb +3 -3
  441. data/lib/pact_broker/ui/views/index/show-with-tags.haml +54 -8
  442. data/lib/pact_broker/ui/views/index/show.haml +23 -2
  443. data/lib/pact_broker/ui/views/matrix/show.haml +31 -7
  444. data/lib/pact_broker/verifications/latest_verification_for_consumer_and_provider.rb +1 -1
  445. data/lib/pact_broker/verifications/latest_verification_for_consumer_version_tag.rb +1 -1
  446. data/lib/pact_broker/verifications/latest_verification_for_pact_version.rb +1 -1
  447. data/lib/pact_broker/verifications/latest_verification_id_for_pact_version_and_provider_version.rb +1 -1
  448. data/lib/pact_broker/verifications/repository.rb +9 -5
  449. data/lib/pact_broker/verifications/sequence.rb +2 -2
  450. data/lib/pact_broker/verifications/service.rb +33 -17
  451. data/lib/pact_broker/version.rb +1 -1
  452. data/lib/pact_broker/versions/eager_loaders.rb +6 -6
  453. data/lib/pact_broker/versions/latest_version.rb +1 -1
  454. data/lib/pact_broker/versions/parse_semantic_version.rb +2 -2
  455. data/lib/pact_broker/versions/repository.rb +37 -16
  456. data/lib/pact_broker/versions/sequence.rb +1 -1
  457. data/lib/pact_broker/versions/service.rb +25 -2
  458. data/lib/pact_broker/webhooks/check_host_whitelist.rb +1 -1
  459. data/lib/pact_broker/webhooks/event_listener.rb +86 -0
  460. data/lib/pact_broker/webhooks/execution.rb +3 -3
  461. data/lib/pact_broker/webhooks/execution_configuration.rb +1 -1
  462. data/lib/pact_broker/webhooks/execution_configuration_creator.rb +2 -2
  463. data/lib/pact_broker/webhooks/http_request_with_redacted_headers.rb +1 -1
  464. data/lib/pact_broker/webhooks/http_response_with_utf_8_safe_body.rb +1 -1
  465. data/lib/pact_broker/webhooks/job.rb +5 -5
  466. data/lib/pact_broker/webhooks/latest_triggered_webhook.rb +17 -2
  467. data/lib/pact_broker/webhooks/pact_and_verification_parameters.rb +57 -15
  468. data/lib/pact_broker/webhooks/redact_logs.rb +3 -3
  469. data/lib/pact_broker/webhooks/render.rb +4 -5
  470. data/lib/pact_broker/webhooks/repository.rb +69 -75
  471. data/lib/pact_broker/webhooks/service.rb +52 -134
  472. data/lib/pact_broker/webhooks/status.rb +3 -1
  473. data/lib/pact_broker/webhooks/trigger_service.rb +75 -70
  474. data/lib/pact_broker/webhooks/triggered_webhook.rb +15 -12
  475. data/lib/pact_broker/webhooks/webhook.rb +43 -6
  476. data/lib/pact_broker/webhooks/webhook_event.rb +7 -7
  477. data/lib/pact_broker/webhooks/webhook_execution_result.rb +2 -2
  478. data/lib/pact_broker/webhooks/webhook_request_logger.rb +6 -6
  479. data/lib/pact_broker/webhooks/webhook_request_template.rb +41 -6
  480. data/lib/rack/hal_browser.rb +1 -1
  481. data/lib/rack/hal_browser/redirect.rb +9 -9
  482. data/lib/rack/pact_broker/add_pact_broker_version_header.rb +2 -2
  483. data/lib/rack/pact_broker/convert_404_to_hal.rb +2 -2
  484. data/lib/rack/pact_broker/convert_file_extension_to_accept_header.rb +1 -1
  485. data/lib/rack/pact_broker/database_transaction.rb +3 -3
  486. data/lib/rack/pact_broker/invalid_uri_protection.rb +5 -5
  487. data/lib/rack/pact_broker/no_auth.rb +1 -1
  488. data/lib/rack/pact_broker/request_target.rb +8 -8
  489. data/lib/rack/pact_broker/reset_thread_data.rb +1 -1
  490. data/lib/rack/pact_broker/ui_authentication.rb +3 -3
  491. data/lib/rack/pact_broker/ui_request_filter.rb +1 -1
  492. data/lib/sequel/extensions/statement_timeout.rb +9 -9
  493. data/pact_broker.gemspec +26 -25
  494. data/public/javascripts/matrix.js +11 -6
  495. data/public/stylesheets/index.css +10 -0
  496. data/regression/can_i_deploy_spec.rb +1 -1
  497. data/regression/index_spec.rb +3 -3
  498. data/regression/regression_helper.rb +9 -9
  499. data/scaffolding/README.md +23 -0
  500. data/scaffolding/run.rb +242 -0
  501. data/scaffolding/templates/decorator.rb.erb +13 -0
  502. data/scaffolding/templates/decorator_spec.erb.rb +0 -0
  503. data/scaffolding/templates/migration.erb +12 -0
  504. data/scaffolding/templates/model.erb +14 -0
  505. data/scaffolding/templates/repository.rb.erb +18 -0
  506. data/scaffolding/templates/repository_spec.rb.erb +9 -0
  507. data/scaffolding/templates/resource.erb +46 -0
  508. data/scaffolding/templates/resource_spec.rb.erb +78 -0
  509. data/scaffolding/templates/service.rb.erb +22 -0
  510. data/scaffolding/templates/service_spec.rb.erb +9 -0
  511. data/script/data/environments.rb +45 -0
  512. data/script/demonstrate-version-branches.rb +2 -2
  513. data/script/docker-container/test.sh +1 -1
  514. data/script/generate-certificates-for-webooks-certificate-spec.rb +1 -1
  515. data/script/insert-self-signed-certificate-from-url.rb +5 -5
  516. data/script/pry.rb +18 -12
  517. data/script/query.rb +5 -5
  518. data/script/reproduce-issue-can-i-deploy-ignore.rb +48 -0
  519. data/script/reproduce-issue-expand-currently-deployed.rb +47 -0
  520. data/script/reproduce-issue-starting-up.rb +12 -7
  521. data/script/reproduce-issue.rb +7 -2
  522. data/script/run-with-ssl.rb +8 -8
  523. data/script/seed-example-matrix.rb +11 -11
  524. data/script/seed-for-webhook-test.rb +22 -22
  525. data/script/seed-matrix.rb +20 -20
  526. data/script/seed.rb +25 -25
  527. data/script/test/approval-all.sh +6 -0
  528. data/script/webhook-server.ru +3 -3
  529. data/spec/features/base_equality_only_on_content_that_affects_verification_results_spec.rb +3 -3
  530. data/spec/features/can_i_deploy_spec.rb +1 -1
  531. data/spec/features/create_environment_spec.rb +1 -1
  532. data/spec/features/create_pacticipant_spec.rb +13 -7
  533. data/spec/features/create_tag_spec.rb +2 -2
  534. data/spec/features/create_version_spec.rb +30 -42
  535. data/spec/features/create_webhook_spec.rb +10 -10
  536. data/spec/features/delete_environment_spec.rb +1 -1
  537. data/spec/features/delete_label_spec.rb +1 -1
  538. data/spec/features/delete_pact_spec.rb +1 -1
  539. data/spec/features/delete_verification_spec.rb +3 -3
  540. data/spec/features/delete_version_spec.rb +1 -1
  541. data/spec/features/delete_webhook_spec.rb +5 -1
  542. data/spec/features/edit_webhook_spec.rb +8 -8
  543. data/spec/features/end_support_spec.rb +67 -0
  544. data/spec/features/execute_unsaved_webhook_spec.rb +7 -10
  545. data/spec/features/execute_webhook_spec.rb +5 -5
  546. data/spec/features/get_can_i_deploy_badge_spec.rb +2 -2
  547. data/spec/features/get_currently_deployed_versions_for_environment_spec.rb +59 -0
  548. data/spec/features/get_currently_deployed_versions_for_version_spec.rb +27 -0
  549. data/spec/features/get_currently_supported_versions_for_environment_spec.rb +57 -0
  550. data/spec/features/get_dashboard_spec.rb +1 -1
  551. data/spec/features/get_deployed_versions_for_version_and_environment.rb +27 -0
  552. data/spec/features/get_diff_spec.rb +5 -5
  553. data/spec/features/get_environment_spec.rb +2 -2
  554. data/spec/features/get_environments_spec.rb +12 -2
  555. data/spec/features/get_integrations_dot_file_spec.rb +2 -2
  556. data/spec/features/get_integrations_spec.rb +1 -1
  557. data/spec/features/get_label_spec.rb +1 -1
  558. data/spec/features/get_latest_pact_badge_spec.rb +7 -7
  559. data/spec/features/get_latest_tagged_pact_badge_spec.rb +8 -8
  560. data/spec/features/get_latest_untagged_pact_badge_spec.rb +8 -8
  561. data/spec/features/get_latest_untagged_pact_spec.rb +1 -1
  562. data/spec/features/get_latest_verification_for_pact_spec.rb +2 -2
  563. data/spec/features/get_matrix_badge_spec.rb +10 -10
  564. data/spec/features/get_matrix_for_consumer_and_provider_spec.rb +3 -6
  565. data/spec/features/get_matrix_spec.rb +5 -5
  566. data/spec/features/get_pact_version.rb +2 -2
  567. data/spec/features/get_pact_versions_spec.rb +1 -1
  568. data/spec/features/get_previous_distinct_version.rb +5 -5
  569. data/spec/features/get_provider_pacts_for_verification_spec.rb +16 -5
  570. data/spec/features/get_released_versions_for_version_and_environment.rb +27 -0
  571. data/spec/features/get_tagged_pact_versions_spec.rb +1 -1
  572. data/spec/features/get_triggered_webhooks_for_pact_spec.rb +1 -1
  573. data/spec/features/get_triggered_webhooks_for_verification_spec.rb +1 -1
  574. data/spec/features/get_verifications_for_consumer_version_spec.rb +1 -1
  575. data/spec/features/get_version_spec.rb +2 -2
  576. data/spec/features/get_versions_spec.rb +2 -2
  577. data/spec/features/label_pacticipant_spec.rb +3 -3
  578. data/spec/features/merge_pact_spec.rb +8 -8
  579. data/spec/features/pending_pacts_with_tags_spec.rb +138 -0
  580. data/spec/features/publish_not_a_pact_spec.rb +5 -5
  581. data/spec/features/publish_pact_all_in_one_approval_spec.rb +72 -0
  582. data/spec/features/publish_pact_all_in_one_spec.rb +43 -0
  583. data/spec/features/publish_pact_spec.rb +41 -6
  584. data/spec/features/publish_verification_spec.rb +11 -11
  585. data/spec/features/record_deployment_spec.rb +77 -12
  586. data/spec/features/record_release_spec.rb +84 -0
  587. data/spec/features/record_undeployment_spec.rb +67 -0
  588. data/spec/features/tag_version_spec.rb +2 -2
  589. data/spec/features/update_environment_spec.rb +2 -2
  590. data/spec/features/update_matrix_spec.rb +5 -5
  591. data/spec/features/update_pacticipant_spec.rb +87 -12
  592. data/spec/features/update_version_spec.rb +155 -0
  593. data/spec/features/update_webhook_spec.rb +6 -6
  594. data/spec/features/wip_pacts_spec.rb +64 -43
  595. data/spec/fixtures/approvals/get_provider_pacts_for_verification.approved.json +57 -0
  596. data/spec/fixtures/approvals/modifiable_resources.approved.json +18 -3
  597. data/spec/fixtures/approvals/publish_contract_no_branch.approved.json +166 -0
  598. data/spec/fixtures/approvals/publish_contract_nothing_exists.approved.json +158 -0
  599. data/spec/fixtures/approvals/publish_contract_nothing_exists_with_webhook.approved.json +158 -0
  600. data/spec/fixtures/approvals/publish_contract_verification_already_exists.approved.json +149 -0
  601. data/spec/fixtures/approvals/publish_contract_with_validation_error.approved.json +42 -0
  602. data/spec/fixtures/approvals/publish_contracts_results_decorator.approved.json +61 -0
  603. data/spec/integration/app_spec.rb +41 -41
  604. data/spec/integration/ui/index_spec.rb +4 -4
  605. data/spec/integration/ui/matrix_spec.rb +3 -3
  606. data/spec/integration/webhooks/certificate_spec.rb +7 -7
  607. data/spec/lib/pact/doc/generator_spec.rb +7 -7
  608. data/spec/lib/pact/doc/interaction_view_model_spec.rb +16 -16
  609. data/spec/lib/pact/doc/markdown/consumer_contract_renderer_spec.rb +9 -9
  610. data/spec/lib/pact/doc/markdown/index_renderer_spec.rb +3 -3
  611. data/spec/lib/pact_broker/api/contracts/environment_schema_spec.rb +9 -1
  612. data/spec/lib/pact_broker/api/contracts/pacticipant_schema_spec.rb +46 -0
  613. data/spec/lib/pact_broker/api/contracts/publish_contracts_schema_spec.rb +114 -0
  614. data/spec/lib/pact_broker/api/contracts/put_pact_params_contract_spec.rb +6 -6
  615. data/spec/lib/pact_broker/api/contracts/verifiable_pacts_json_query_schema_combinations_spec.rb +76 -0
  616. data/spec/lib/pact_broker/api/contracts/verifiable_pacts_json_query_schema_spec.rb +158 -4
  617. data/spec/lib/pact_broker/api/contracts/verifiable_pacts_query_schema_spec.rb +1 -1
  618. data/spec/lib/pact_broker/api/contracts/verification_contract_spec.rb +4 -4
  619. data/spec/lib/pact_broker/api/contracts/webhook_contract_spec.rb +26 -26
  620. data/spec/lib/pact_broker/api/decorators/dashboard_decorator_spec.rb +30 -30
  621. data/spec/lib/pact_broker/api/decorators/embedded_label_decorator_spec.rb +2 -2
  622. data/spec/lib/pact_broker/api/decorators/embedded_tag_decorator_spec.rb +5 -5
  623. data/spec/lib/pact_broker/api/decorators/embedded_version_decorator_spec.rb +3 -3
  624. data/spec/lib/pact_broker/api/decorators/extended_pact_decorator_spec.rb +17 -17
  625. data/spec/lib/pact_broker/api/decorators/integration_decorator_spec.rb +3 -3
  626. data/spec/lib/pact_broker/api/decorators/integrations_decorator_spec.rb +3 -3
  627. data/spec/lib/pact_broker/api/decorators/label_decorator_spec.rb +2 -2
  628. data/spec/lib/pact_broker/api/decorators/latest_pact_decorator_spec.rb +4 -4
  629. data/spec/lib/pact_broker/api/decorators/matrix_decorator_spec.rb +50 -25
  630. data/spec/lib/pact_broker/api/decorators/pact_collection_decorator_spec.rb +6 -6
  631. data/spec/lib/pact_broker/api/decorators/pact_decorator_spec.rb +25 -25
  632. data/spec/lib/pact_broker/api/decorators/pact_version_decorator_spec.rb +22 -17
  633. data/spec/lib/pact_broker/api/decorators/pact_webhooks_status_decorator_spec.rb +17 -14
  634. data/spec/lib/pact_broker/api/decorators/pacticipant_collection_decorator_spec.rb +7 -7
  635. data/spec/lib/pact_broker/api/decorators/pacticipant_decorator_spec.rb +63 -50
  636. data/spec/lib/pact_broker/api/decorators/provider_pacts_decorator_spec.rb +7 -7
  637. data/spec/lib/pact_broker/api/decorators/publish_contracts_results_decorator_spec.rb +53 -0
  638. data/spec/lib/pact_broker/api/decorators/reason_decorator_spec.rb +27 -8
  639. data/spec/lib/pact_broker/api/decorators/relationships_csv_decorator_spec.rb +4 -4
  640. data/spec/lib/pact_broker/api/decorators/representable_pact_spec.rb +7 -7
  641. data/spec/lib/pact_broker/api/decorators/tag_decorator_spec.rb +4 -4
  642. data/spec/lib/pact_broker/api/decorators/tagged_pact_versions_decorator_spec.rb +4 -4
  643. data/spec/lib/pact_broker/api/decorators/triggered_webhook_decorator_spec.rb +18 -15
  644. data/spec/lib/pact_broker/api/decorators/triggered_webhooks_decorator_spec.rb +5 -5
  645. data/spec/lib/pact_broker/api/decorators/verifiable_pact_decorator_spec.rb +11 -11
  646. data/spec/lib/pact_broker/api/decorators/verifiable_pacts_decorator_spec.rb +3 -3
  647. data/spec/lib/pact_broker/api/decorators/verifiable_pacts_query_decorator_spec.rb +44 -1
  648. data/spec/lib/pact_broker/api/decorators/verification_decorator_spec.rb +15 -15
  649. data/spec/lib/pact_broker/api/decorators/verification_summary_decorator_spec.rb +9 -9
  650. data/spec/lib/pact_broker/api/decorators/version_decorator_spec.rb +77 -50
  651. data/spec/lib/pact_broker/api/decorators/versions_decorator_spec.rb +7 -7
  652. data/spec/lib/pact_broker/api/decorators/webhook_decorator_spec.rb +59 -59
  653. data/spec/lib/pact_broker/api/decorators/webhook_execution_result_decorator_spec.rb +15 -15
  654. data/spec/lib/pact_broker/api/decorators/webhook_request_template_decorator_spec.rb +13 -13
  655. data/spec/lib/pact_broker/api/decorators/webhooks_decorator_spec.rb +10 -10
  656. data/spec/lib/pact_broker/api/pact_broker_urls_spec.rb +36 -10
  657. data/spec/lib/pact_broker/api/renderers/html_pact_renderer_spec.rb +30 -30
  658. data/spec/lib/pact_broker/api/renderers/integrations_dot_renderer_spec.rb +4 -4
  659. data/spec/lib/pact_broker/api/resources/all_webhooks_spec.rb +32 -41
  660. data/spec/lib/pact_broker/api/resources/badge_spec.rb +17 -17
  661. data/spec/lib/pact_broker/api/resources/can_i_deploy_badge_spec.rb +6 -6
  662. data/spec/lib/pact_broker/api/resources/can_i_deploy_pacticipant_version_spec.rb +9 -9
  663. data/spec/lib/pact_broker/api/resources/can_i_deploy_spec.rb +7 -7
  664. data/spec/lib/pact_broker/api/resources/dashboard_spec.rb +1 -1
  665. data/spec/lib/pact_broker/api/resources/default_base_resource_approval_spec.rb +11 -10
  666. data/spec/lib/pact_broker/api/resources/default_base_resource_spec.rb +25 -24
  667. data/spec/lib/pact_broker/api/resources/error_response_body_generator_spec.rb +11 -11
  668. data/spec/lib/pact_broker/api/resources/group_spec.rb +11 -11
  669. data/spec/lib/pact_broker/api/resources/latest_pact_spec.rb +15 -15
  670. data/spec/lib/pact_broker/api/resources/latest_provider_pacts_spec.rb +6 -6
  671. data/spec/lib/pact_broker/api/resources/latest_verifications_for_consumer_version_spec.rb +8 -8
  672. data/spec/lib/pact_broker/api/resources/matrix_badge_spec.rb +1 -1
  673. data/spec/lib/pact_broker/api/resources/matrix_spec.rb +10 -10
  674. data/spec/lib/pact_broker/api/resources/pact_spec.rb +24 -24
  675. data/spec/lib/pact_broker/api/resources/pact_triggered_webhooks_spec.rb +4 -4
  676. data/spec/lib/pact_broker/api/resources/pacticipant_spec.rb +2 -5
  677. data/spec/lib/pact_broker/api/resources/{webhooks_spec.rb → pacticipant_webhooks_spec.rb} +19 -19
  678. data/spec/lib/pact_broker/api/resources/pacticipants_spec.rb +18 -22
  679. data/spec/lib/pact_broker/api/resources/provider_pacts_for_verification_spec.rb +17 -17
  680. data/spec/lib/pact_broker/api/resources/provider_pacts_spec.rb +8 -8
  681. data/spec/lib/pact_broker/api/resources/released_version_spec.rb +61 -0
  682. data/spec/lib/pact_broker/api/resources/tag_spec.rb +3 -3
  683. data/spec/lib/pact_broker/api/resources/tagged_pact_versions_spec.rb +7 -7
  684. data/spec/lib/pact_broker/api/resources/triggered_webhook_logs_spec.rb +9 -6
  685. data/spec/lib/pact_broker/api/resources/verification_spec.rb +76 -7
  686. data/spec/lib/pact_broker/api/resources/verification_triggered_webhooks_spec.rb +4 -4
  687. data/spec/lib/pact_broker/api/resources/verifications_spec.rb +22 -28
  688. data/spec/lib/pact_broker/api/resources/webhook_execution_result_spec.rb +4 -4
  689. data/spec/lib/pact_broker/api/resources/webhook_execution_spec.rb +10 -10
  690. data/spec/lib/pact_broker/api/resources/webhook_spec.rb +15 -15
  691. data/spec/lib/pact_broker/app_spec.rb +43 -43
  692. data/spec/lib/pact_broker/badges/service_spec.rb +6 -6
  693. data/spec/lib/pact_broker/build_http_options_spec.rb +5 -5
  694. data/spec/lib/pact_broker/certificates/service_spec.rb +7 -7
  695. data/spec/lib/pact_broker/config/load_spec.rb +11 -11
  696. data/spec/lib/pact_broker/config/save_and_load_spec.rb +2 -2
  697. data/spec/lib/pact_broker/config/save_spec.rb +29 -29
  698. data/spec/lib/pact_broker/config/space_delimited_integer_list_spec.rb +1 -1
  699. data/spec/lib/pact_broker/config/space_delimited_string_list_spec.rb +1 -1
  700. data/spec/lib/pact_broker/configuration_spec.rb +9 -9
  701. data/spec/lib/pact_broker/contracts/service_spec.rb +108 -0
  702. data/spec/lib/pact_broker/db/clean_incremental_spec.rb +12 -11
  703. data/spec/lib/pact_broker/db/clean_old_spec.rb +2 -4
  704. data/spec/lib/pact_broker/db/clean_spec.rb +5 -7
  705. data/spec/lib/pact_broker/db/data_migrations/migrate_webhook_headers_spec.rb +1 -1
  706. data/spec/lib/pact_broker/db/data_migrations/set_consumer_ids_for_pact_publications_spec.rb +6 -6
  707. data/spec/lib/pact_broker/db/data_migrations/set_latest_version_sequence_value_spec.rb +8 -8
  708. data/spec/lib/pact_broker/db/data_migrations/set_pacticipant_main_branch_spec.rb +41 -0
  709. data/spec/lib/pact_broker/db/delete_overwritten_data_spec.rb +1 -1
  710. data/spec/lib/pact_broker/db/log_quietener_spec.rb +1 -1
  711. data/spec/lib/pact_broker/db/validate_encoding_spec.rb +8 -8
  712. data/spec/lib/pact_broker/deployments/deployed_version_spec.rb +109 -0
  713. data/spec/lib/pact_broker/deployments/environment_service_spec.rb +37 -0
  714. data/spec/lib/pact_broker/deployments/environment_spec.rb +27 -0
  715. data/spec/lib/pact_broker/diagnostic/resources/dependencies_spec.rb +9 -9
  716. data/spec/lib/pact_broker/diagnostic/resources/heartbeat_spec.rb +5 -5
  717. data/spec/lib/pact_broker/doc/controllers/app_spec.rb +4 -4
  718. data/spec/lib/pact_broker/doc/coverage_spec.rb +5 -5
  719. data/spec/lib/pact_broker/domain/group_spec.rb +7 -7
  720. data/spec/lib/pact_broker/domain/index_item_spec.rb +3 -3
  721. data/spec/lib/pact_broker/domain/order_versions_spec.rb +26 -26
  722. data/spec/lib/pact_broker/domain/pact_spec.rb +3 -3
  723. data/spec/lib/pact_broker/domain/tag_spec.rb +1 -1
  724. data/spec/lib/pact_broker/domain/verification_spec.rb +3 -3
  725. data/spec/lib/pact_broker/domain/version_spec.rb +118 -7
  726. data/spec/lib/pact_broker/domain/webhook_request_spec.rb +36 -36
  727. data/spec/lib/pact_broker/domain/webhook_spec.rb +11 -11
  728. data/spec/lib/pact_broker/errors/error_logger_spec.rb +4 -4
  729. data/spec/lib/pact_broker/errors_spec.rb +7 -8
  730. data/spec/lib/pact_broker/events/subscriber_spec.rb +43 -0
  731. data/spec/lib/pact_broker/feature_toggle_spec.rb +9 -9
  732. data/spec/lib/pact_broker/groups/service_spec.rb +8 -8
  733. data/spec/lib/pact_broker/hash_refinements_spec.rb +1 -1
  734. data/spec/lib/pact_broker/index/service_spec.rb +13 -14
  735. data/spec/lib/pact_broker/integrations/integration_spec.rb +1 -1
  736. data/spec/lib/pact_broker/integrations/service_spec.rb +17 -6
  737. data/spec/lib/pact_broker/labels/repository_spec.rb +2 -2
  738. data/spec/lib/pact_broker/labels/service_spec.rb +1 -1
  739. data/spec/lib/pact_broker/matrix/aggregated_row_spec.rb +14 -14
  740. data/spec/lib/pact_broker/matrix/can_i_deploy_query_schema_spec.rb +72 -0
  741. data/spec/lib/pact_broker/matrix/deployment_status_summary_spec.rb +100 -20
  742. data/spec/lib/pact_broker/matrix/every_row_spec.rb +5 -5
  743. data/spec/lib/pact_broker/matrix/head_row_spec.rb +1 -1
  744. data/spec/lib/pact_broker/matrix/integration_environment_spec.rb +175 -0
  745. data/spec/lib/pact_broker/matrix/integration_ignore_spec.rb +226 -0
  746. data/spec/lib/pact_broker/matrix/integration_spec.rb +11 -13
  747. data/spec/lib/pact_broker/matrix/parse_can_i_deploy_query_spec.rb +49 -0
  748. data/spec/lib/pact_broker/matrix/parse_query_spec.rb +28 -6
  749. data/spec/lib/pact_broker/matrix/quick_row_spec.rb +7 -7
  750. data/spec/lib/pact_broker/matrix/repository_dependency_spec.rb +2 -2
  751. data/spec/lib/pact_broker/matrix/repository_query_limit_spec.rb +9 -9
  752. data/spec/lib/pact_broker/matrix/repository_spec.rb +44 -211
  753. data/spec/lib/pact_broker/matrix/row_spec.rb +7 -7
  754. data/spec/lib/pact_broker/matrix/service_spec.rb +83 -20
  755. data/spec/lib/pact_broker/messages_spec.rb +6 -6
  756. data/spec/lib/pact_broker/metrics/service_spec.rb +1 -1
  757. data/spec/lib/pact_broker/pacticipants/find_potential_duplicate_pacticipant_names_spec.rb +10 -10
  758. data/spec/lib/pact_broker/pacticipants/generate_display_name_spec.rb +39 -0
  759. data/spec/lib/pact_broker/pacticipants/repository_spec.rb +86 -15
  760. data/spec/lib/pact_broker/pacticipants/service_spec.rb +27 -73
  761. data/spec/lib/pact_broker/pacts/build_verifiable_pact_notices_spec.rb +10 -10
  762. data/spec/lib/pact_broker/pacts/content_spec.rb +55 -55
  763. data/spec/lib/pact_broker/pacts/create_formatted_diff_spec.rb +10 -10
  764. data/spec/lib/pact_broker/pacts/diff_spec.rb +23 -23
  765. data/spec/lib/pact_broker/pacts/generate_interaction_sha_spec.rb +1 -1
  766. data/spec/lib/pact_broker/pacts/generate_sha_spec.rb +7 -7
  767. data/spec/lib/pact_broker/pacts/latest_tagged_pact_publications_spec.rb +1 -1
  768. data/spec/lib/pact_broker/pacts/merger_spec.rb +7 -7
  769. data/spec/lib/pact_broker/pacts/metadata_spec.rb +3 -3
  770. data/spec/lib/pact_broker/pacts/pact_params_spec.rb +12 -12
  771. data/spec/lib/pact_broker/pacts/pact_publication_dataset_module_spec.rb +8 -8
  772. data/spec/lib/pact_broker/pacts/pact_publication_selector_dataset_module_spec.rb +120 -0
  773. data/spec/lib/pact_broker/pacts/pact_publication_spec.rb +9 -9
  774. data/spec/lib/pact_broker/pacts/pact_version_spec.rb +47 -3
  775. data/spec/lib/pact_broker/pacts/repository_find_for_currently_deployed_spec.rb +124 -0
  776. data/spec/lib/pact_broker/pacts/repository_find_for_currently_supported_releases_spec.rb +159 -0
  777. data/spec/lib/pact_broker/pacts/repository_find_for_verification_fallback_spec.rb +1 -1
  778. data/spec/lib/pact_broker/pacts/repository_find_for_verification_spec.rb +19 -19
  779. data/spec/lib/pact_broker/pacts/repository_find_wip_pact_versions_for_provider_branch_spec.rb +59 -1
  780. data/spec/lib/pact_broker/pacts/repository_find_wip_pact_versions_for_provider_spec.rb +81 -22
  781. data/spec/lib/pact_broker/pacts/repository_spec.rb +39 -39
  782. data/spec/lib/pact_broker/pacts/selected_pact_spec.rb +1 -1
  783. data/spec/lib/pact_broker/pacts/selector_spec.rb +14 -11
  784. data/spec/lib/pact_broker/pacts/selectors_spec.rb +3 -3
  785. data/spec/lib/pact_broker/pacts/service_find_for_verification_spec.rb +5 -5
  786. data/spec/lib/pact_broker/pacts/service_spec.rb +111 -39
  787. data/spec/lib/pact_broker/pacts/sort_content_spec.rb +21 -8
  788. data/spec/lib/pact_broker/pacts/squash_pacts_for_verification_spec.rb +3 -3
  789. data/spec/lib/pact_broker/pacts/verifiable_pact_messages_spec.rb +99 -35
  790. data/spec/lib/pact_broker/relationships/groupify_spec.rb +12 -12
  791. data/spec/lib/pact_broker/tags/repository_spec.rb +2 -2
  792. data/spec/lib/pact_broker/tags/service_spec.rb +2 -2
  793. data/spec/lib/pact_broker/ui/controllers/can_i_deploy_spec.rb +1 -1
  794. data/spec/lib/pact_broker/ui/controllers/clusters_spec.rb +3 -3
  795. data/spec/lib/pact_broker/ui/controllers/index_spec.rb +47 -8
  796. data/spec/lib/pact_broker/ui/view_models/index_item_spec.rb +9 -9
  797. data/spec/lib/pact_broker/ui/view_models/index_items_spec.rb +3 -3
  798. data/spec/lib/pact_broker/ui/view_models/matrix_deployed_version_spec.rb +29 -0
  799. data/spec/lib/pact_broker/verifications/pseudo_branch_status_spec.rb +5 -5
  800. data/spec/lib/pact_broker/verifications/repository_spec.rb +4 -4
  801. data/spec/lib/pact_broker/verifications/sequence_spec.rb +1 -1
  802. data/spec/lib/pact_broker/verifications/service_spec.rb +30 -25
  803. data/spec/lib/pact_broker/verifications/summary_for_consumer_version_spec.rb +6 -6
  804. data/spec/lib/pact_broker/versions/abbreviate_number_spec.rb +5 -5
  805. data/spec/lib/pact_broker/versions/parse_semantic_version_spec.rb +2 -2
  806. data/spec/lib/pact_broker/versions/repository_spec.rb +2 -2
  807. data/spec/lib/pact_broker/versions/service_spec.rb +1 -1
  808. data/spec/lib/pact_broker/webhooks/check_host_whitelist_spec.rb +1 -1
  809. data/spec/lib/pact_broker/webhooks/execution_configuration_spec.rb +1 -1
  810. data/spec/lib/pact_broker/webhooks/job_spec.rb +10 -10
  811. data/spec/lib/pact_broker/webhooks/pact_and_verification_parameters_spec.rb +16 -0
  812. data/spec/lib/pact_broker/webhooks/redact_logs_spec.rb +1 -1
  813. data/spec/lib/pact_broker/webhooks/render_spec.rb +19 -10
  814. data/spec/lib/pact_broker/webhooks/repository_spec.rb +203 -177
  815. data/spec/lib/pact_broker/webhooks/service_spec.rb +37 -243
  816. data/spec/lib/pact_broker/webhooks/status_spec.rb +5 -5
  817. data/spec/lib/pact_broker/webhooks/trigger_service_spec.rb +252 -127
  818. data/spec/lib/pact_broker/webhooks/triggered_webhook_spec.rb +2 -2
  819. data/spec/lib/pact_broker/webhooks/webhook_request_logger_spec.rb +11 -11
  820. data/spec/lib/pact_broker/webhooks/webhook_request_template_spec.rb +70 -28
  821. data/spec/lib/pact_broker/webhooks/webhook_spec.rb +2 -5
  822. data/spec/lib/rack/hal_browser/redirect_spec.rb +18 -18
  823. data/spec/lib/rack/pact_broker/add_pact_broker_version_header_spec.rb +3 -3
  824. data/spec/lib/rack/pact_broker/database_transaction_spec.rb +10 -15
  825. data/spec/lib/rack/pact_broker/invalid_uri_protection_spec.rb +2 -2
  826. data/spec/lib/rack/pact_broker/request_target_spec.rb +5 -5
  827. data/spec/lib/rack/pact_broker/set_base_url_spec.rb +2 -2
  828. data/spec/lib/rack/pact_broker/use_when_spec.rb +6 -6
  829. data/spec/lib/sequel/plugins/insert_ignore_spec.rb +2 -2
  830. data/spec/lib/sequel/plugins/upsert_spec.rb +3 -3
  831. data/spec/lib/webmachine/rack_adapter_monkey_patch_spec.rb +7 -8
  832. data/spec/migrations/23_pact_versions_spec.rb +11 -13
  833. data/spec/migrations/24_populate_pact_contents_spec.rb +7 -7
  834. data/spec/migrations/34_latest_tagged_pacts_spec.rb +23 -23
  835. data/spec/migrations/34_pact_revisions_spec.rb +10 -10
  836. data/spec/migrations/41_migrate_execution_data_spec.rb +11 -11
  837. data/spec/migrations/42_delete_ophan_webhook_data_spec.rb +17 -17
  838. data/spec/migrations/44_add_provider_version_to_verification_spec.rb +9 -9
  839. data/spec/migrations/50_create_latest_matrix_spec.rb +15 -15
  840. data/spec/migrations/change_migration_strategy_spec.rb +18 -18
  841. data/spec/migrations/rollback_spec.rb +2 -0
  842. data/spec/service_consumers/hal_relation_proxy_app.rb +30 -9
  843. data/spec/service_consumers/pact_helper.rb +24 -11
  844. data/spec/service_consumers/provider_states_for_pact_broker_client.rb +85 -18
  845. data/spec/service_consumers/provider_states_for_pact_broker_client_2.rb +36 -0
  846. data/spec/service_consumers/provider_states_for_pact_ruby.rb +64 -64
  847. data/spec/spec_helper.rb +13 -25
  848. data/spec/support/approvals.rb +9 -7
  849. data/spec/support/database.rb +8 -4
  850. data/spec/support/database_cleaner.rb +2 -2
  851. data/spec/support/fixture_helpers.rb +1 -1
  852. data/spec/support/logging.rb +2 -2
  853. data/spec/support/metadata_test_server.rb +7 -7
  854. data/spec/support/migration_helpers.rb +1 -1
  855. data/spec/support/rack_helpers.rb +20 -0
  856. data/spec/support/rspec_matchers.rb +1 -1
  857. data/spec/support/shared_context.rb +1 -1
  858. data/spec/support/shared_examples_for_responses.rb +5 -5
  859. data/spec/support/simplecov.rb +20 -7
  860. data/spec/support/ssl_pact_broker_server.rb +8 -8
  861. data/spec/support/ssl_webhook_server.rb +8 -8
  862. data/spec/support/test_data_builder.rb +1 -1
  863. data/spec/support/verification_job.rb +8 -8
  864. data/spec/support/webhook_endpoint_middleware.rb +4 -4
  865. data/tasks/audit.rake +1 -1
  866. data/tasks/database.rb +22 -22
  867. data/tasks/database/annotate.rb +2 -2
  868. data/tasks/database/table_dependency_calculator.rb +1 -1
  869. data/tasks/db.rake +34 -39
  870. data/tasks/development.rake +38 -6
  871. data/tasks/docker_database.rb +9 -9
  872. data/tasks/pact.rake +5 -5
  873. data/tasks/release.rake +2 -2
  874. data/tasks/rspec.rake +16 -16
  875. data/tasks/test_db.rake +11 -11
  876. metadata +175 -13
  877. data/.travis.yml +0 -31
  878. data/lib/pact_broker/domain/webhook_request_header.rb +0 -13
  879. data/lib/webmachine/rack_adapter_monkey_patch.rb +0 -38
  880. data/spec/lib/pact_broker/domain/pacticipant_spec.rb +0 -26
@@ -1,8 +1,8 @@
1
- require 'pact_broker/db'
2
- require 'pact_broker/verifications/pseudo_branch_status'
3
- require 'pact_broker/domain/verification'
4
- require 'pact_broker/webhooks/latest_triggered_webhook'
5
- require 'pact_broker/webhooks/webhook'
1
+ require "pact_broker/db"
2
+ require "pact_broker/verifications/pseudo_branch_status"
3
+ require "pact_broker/domain/verification"
4
+ require "pact_broker/webhooks/latest_triggered_webhook"
5
+ require "pact_broker/webhooks/webhook"
6
6
 
7
7
  module PactBroker
8
8
  module Integrations
@@ -1,9 +1,9 @@
1
- require 'pact_broker/services'
2
- require 'pact_broker/repositories'
3
- require 'pact_broker/logging'
4
- require 'pact_broker/integrations/integration'
5
- require 'pact_broker/db/models'
6
- require 'pact_broker/repositories/helpers'
1
+ require "pact_broker/services"
2
+ require "pact_broker/repositories"
3
+ require "pact_broker/logging"
4
+ require "pact_broker/integrations/integration"
5
+ require "pact_broker/db/models"
6
+ require "pact_broker/repositories/helpers"
7
7
 
8
8
  module PactBroker
9
9
  module Integrations
@@ -21,7 +21,7 @@ module PactBroker
21
21
  # so it would be better to create a Verification::PactStatus class
22
22
  # that doesn't have the 'stale' logic in it.
23
23
  # Then we can remove the eager loading of the pact_version
24
- PactBroker::Integrations::Integration
24
+ scope_for(PactBroker::Integrations::Integration)
25
25
  .eager(:consumer)
26
26
  .eager(:provider)
27
27
  .eager(latest_pact: [:latest_verification, :pact_version])
@@ -59,6 +59,10 @@ module PactBroker
59
59
  end
60
60
  end
61
61
  end
62
+
63
+ def self.scope_for(scope)
64
+ PactBroker.policy_scope!(scope)
65
+ end
62
66
  end
63
67
  end
64
68
  end
@@ -1,5 +1,5 @@
1
- require 'pact_broker/domain/label'
2
- require 'pact_broker/repositories/helpers'
1
+ require "pact_broker/domain/label"
2
+ require "pact_broker/repositories/helpers"
3
3
 
4
4
  module PactBroker
5
5
  module Labels
@@ -1,4 +1,4 @@
1
- require 'pact_broker/repositories'
1
+ require "pact_broker/repositories"
2
2
 
3
3
  module PactBroker
4
4
 
@@ -4,6 +4,7 @@ en:
4
4
  filled?: "can't be blank"
5
5
  valid_method?: "is not a recognised HTTP method"
6
6
  valid_url?: "is not a valid URL eg. http://example.org"
7
+ base64?: "is not valid Base64"
7
8
  valid_version_number?: "Version number '%{value}' cannot be parsed to a version number. The expected format (unless this configuration has been overridden) is a semantic version. eg. 1.3.0 or 2.0.4.rc1"
8
9
  name_in_path_matches_name_in_pact?: "does not match %{left} name in path ('%{right}')."
9
10
  valid_consumer_version_number?: "Consumer version number '%{value}' cannot be parsed to a version number. The expected format (unless this configuration has been overridden) is a semantic version. eg. 1.3.0 or 2.0.4.rc1"
@@ -11,28 +12,55 @@ en:
11
12
  pacticipant_exists?: "does not match an existing pacticipant"
12
13
  single_line?: "cannot contain multiple lines"
13
14
  no_spaces?: "cannot contain spaces"
15
+ environment_with_name_exists?: "with name '%{value}' does not exist"
14
16
 
15
17
  pact_broker:
16
18
  messages:
17
19
  response_body_hidden: For security purposes, the response details are not logged. To enable response logging, configure the webhook_host_whitelist property. See %{base_url}/doc/webhooks#whitelist for more information.
20
+ index:
21
+ title: Pacts
18
22
  matrix:
19
23
  pre_verified: This pact was "pre-verified" as it has identical content to a previously verified pact.
20
24
  webhooks:
21
25
  parameters:
22
26
  pactbroker:
23
- consumerName: the consumer name
24
- providerName: the provider name
25
- consumerVersionNumber: the version number of the most recent consumer version associated with the pact content.
26
- providerVersionNumber: the provider version number for the verification result
27
- consumerVersionTags: the list of tag names for the most recent consumer version associated with the pact content, separated by ", "
28
- providerVersionTags: the list of tag names for the provider version associated with the verification result, separated by ", ".
29
- consumerLabels: the list of labels for the consumer associated with the pact content, separated by ", ".
30
- providerLabels: the list of labels for the provider associated with the pact content, separated by ", ".
31
- pactUrl: the "permalink" URL to the newly published pact (the URL specifying the consumer version URL, rather than the "/latest" format.
32
- verificationResultUrl: the URL to the relevant verification result.
33
- githubVerificationStatus: the verification status using the correct keywords for posting to the Github commit status API. See https://developer.github.com/v3/repos/statuses.
34
- bitbucketVerificationStatus: the verification status using the correct keywords for posting to the Bitbucket commit status API. See https://developer.atlassian.com/server/bitbucket/how-tos/updating-build-status-for-commits/.
35
-
27
+ consumerName: The consumer name
28
+ providerName: The provider name
29
+ consumerVersionNumber: The version number of the most recent consumer version associated with the pact content.
30
+ providerVersionNumber: The provider version number for the verification result
31
+ consumerVersionTags: The list of tag names for the most recent consumer version associated with the pact content, separated by ", "
32
+ consumerVersionBranch: The repository branch associated with the consumer version
33
+ providerVersionTags: The list of tag names for the provider version associated with the verification result, separated by ", ".
34
+ providerVersionBranch: The repository branch associated with the provider version
35
+ consumerLabels: The list of labels for the consumer associated with the pact content, separated by ", ".
36
+ providerLabels: The list of labels for the provider associated with the pact content, separated by ", ".
37
+ pactUrl: The "permalink" URL to the newly published pact (the URL specifying the consumer version URL, rather than the "/latest" format.
38
+ verificationResultUrl: The URL to the relevant verification result.
39
+ githubVerificationStatus: The verification status using the correct keywords for posting to the Github commit status API. See https://developer.github.com/v3/repos/statuses
40
+ bitbucketVerificationStatus: The verification status using the correct keywords for posting to the Bitbucket commit status API. See https://developer.atlassian.com/server/bitbucket/how-tos/updating-build-status-for-commits/
41
+ azureDevOpsVerificationStatus: The verification status using the correct keywords for posting to the Azure DevOps GitStatusState API. See https://docs.microsoft.com/en-us/rest/api/azure/devops/git/statuses/create?view=azure-devops-rest-6.0
42
+ eventName: The name of the event that triggered the webhook
43
+ currentlyDeployedProviderVersionNumber: The version number of the currently deployed provider version (when used in a template, the webhook will be triggered once for each currently deployed provider version)
44
+ no_webhooks_enabled_for_event: No enabled webhooks found for the detected events
45
+ webhook_triggered_for_event: Webhook %{webhook_description} triggered for event %{event_name}.
46
+ triggered_webhook_see_logs: View logs at %{url}
47
+ version:
48
+ created: "%{action} %{pacticipant_name} version %{pacticipant_version_number}"
49
+ created_for_branch: "%{action} %{pacticipant_name} version %{pacticipant_version_number} with branch %{branch}"
50
+ created_for_branch_with_tags: "%{action} %{pacticipant_name} version %{pacticipant_version_number} with branch %{branch} and tags %{tags}"
51
+ created_with_tags: "%{action} %{pacticipant_name} version %{pacticipant_version_number} with tags %{tags}"
52
+ contract:
53
+ pact_published: Pact successfully published for %{consumer_name} version %{consumer_version_number} and provider %{provider_name}.
54
+ same_pact_content_published: Pact successfully republished for %{consumer_name} version %{consumer_version_number} and provider %{provider_name} with no content changes.
55
+ pact_modified_for_same_version: Pact with changed content published over existing content for %{consumer_name} version %{consumer_version_number} and provider %{provider_name}. This is not recommended in normal cicumstances and may indicate that you have not configured your Pact pipeline correctly. For more information see https://docs.pact.io/go/versioning
56
+ pact_merged: Pact content merged with existing content for %{consumer_name} version %{consumer_version_number} and provider %{provider_name}.
57
+ events:
58
+ pact_published_unchanged_with_single_tag: pact content is the same as previous version with tag %{tag_name} and no new tags were applied
59
+ pact_published_unchanged_with_multiple_tags: pact content is the same as previous versions with tags %{tag_names} and no new tags were applied
60
+ next_steps:
61
+ verifications: Add Pact verification tests to the %{provider_name} build. See https://docs.pact.io/go/provider_verification
62
+ webhooks: Configure separate %{provider_name} pact verification build and webhook to trigger it when the pact content changes. See https://docs.pact.io/go/webhooks
63
+ version_branch: Configure the version branch to be the value of your repository branch.
36
64
  errors:
37
65
  validation:
38
66
  blank: "cannot be blank."
@@ -44,10 +72,20 @@ en:
44
72
  consumer_version_number_header_invalid: "X-Pact-Consumer-Version '%{consumer_version_number}' cannot be parsed to a version number. The expected format (unless this configuration has been overridden) is a semantic version. eg. 1.3.0 or 2.0.4.rc1"
45
73
  consumer_version_number_invalid: "Consumer version number '%{consumer_version_number}' cannot be parsed to a version number. The expected format (unless this configuration has been overridden) is a semantic version. eg. 1.3.0 or 2.0.4.rc1"
46
74
  pacticipant_name_mismatch: "in pact ('%{name_in_pact}') does not match %{pacticipant} name in path ('%{name}')."
75
+ consumer_name_in_content_mismatch_pacticipant_name: "consumer name in contract content ('%{consumer_name_in_content}') must match pacticipantName ('%{pacticipant_name}')"
76
+ consumer_name_in_contract_mismatch_pacticipant_name: "consumerName ('%{consumer_name_in_contract}') must match pacticipantName ('%{pacticipant_name}')"
77
+ provider_name_in_content_mismatch: "provider name in contract content ('%{provider_name_in_content}') must match providerName ('%{provider_name}') in contracts"
47
78
  connection_encoding_not_utf8: "The Sequel connection encoding (%{encoding}) is strongly recommended to be \"utf8\". If you need to set it to %{encoding} for some particular reason, then disable this check by setting config.validate_database_connection_config = false"
48
79
  invalid_webhook_uuid: The UUID can only contain the characters A-Z, a-z, 0-9, _ and -, and must be 16 or more characters.
49
80
  pacticipant_not_found: No pacticipant with name '%{name}' found
50
81
  environment_name_must_be_unique: Another environment with name '%{name}' already exists.
82
+ cannot_specify_tag_and_environment: Cannot specify both a 'to' tag and an environment.
83
+ cannot_specify_latest_and_environment: Cannot specify both latest=true and an environment.
84
+ environment_with_name_not_found: "Environment with name '%{name}' does not exist"
85
+ cannot_modify_version_branch: "The branch for a pacticipant version cannot be changed once set (currently '%{old_branch}', proposed value '%{new_branch}'). Your pact publication/verification publication configurations may be in conflict with each other if you are seeing this error. If the current branch value is incorrect, you must delete the pacticipant version resource at %{version_url} and publish the pacts/verification results again with a consistent branch name."
86
+ invalid_content_for_content_type: "The content could not be parsed as %{content_type}"
87
+ cannot_set_currently_deployed_true: The currentlyDeployed property cannot be set back to true. Please record a new deployment.
88
+ cannot_set_currently_supported_true: The currentlySupported property cannot be set back to true. Please record a new deployment.
51
89
  duplicate_pacticipant: |
52
90
  This is the first time a pact has been published for "%{new_name}".
53
91
  The name "%{new_name}" is very similar to the following existing consumers/providers:
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- require 'semantic_logger'
2
+ require "semantic_logger"
3
3
 
4
4
  module PactBroker
5
5
  module Logging
@@ -10,7 +10,7 @@ module PactBroker
10
10
  base.class_eval do
11
11
  # Returns [SemanticLogger::Logger] class level logger
12
12
  def self.logger
13
- require 'pact_broker/configuration'
13
+ require "pact_broker/configuration"
14
14
  @logger ||= PactBroker.configuration.custom_logger || SemanticLogger[self]
15
15
  end
16
16
 
@@ -43,7 +43,7 @@ module PactBroker
43
43
  message = "#{description} - #{message}" if description
44
44
  logger.error message
45
45
  end
46
- if ENV['PACT_BROKER_HIDE_PACTFLOW_MESSAGES'] != 'true'
46
+ if ENV["PACT_BROKER_HIDE_PACTFLOW_MESSAGES"] != "true"
47
47
  logger.info "\n\n#{'*' * 80}\n\nPrefer it was someone else's job to deal with this error? Check out https://pactflow.io/oss for a hardened, fully supported SaaS version of the Pact Broker with an improved UI + more.\n\n#{'*' * 80}\n"
48
48
  end
49
49
  end
@@ -1,5 +1,5 @@
1
- require 'logger'
2
- require 'semantic_logger'
1
+ require "logger"
2
+ require "semantic_logger"
3
3
 
4
4
  module PactBroker
5
5
  module Logging
@@ -8,7 +8,7 @@ module PactBroker
8
8
  @formatter = ::Logger::Formatter.new
9
9
  end
10
10
 
11
- def call(log, output)
11
+ def call(log, _output)
12
12
  self.log = log
13
13
  self.logger = logger
14
14
  @formatter.call(log.level.upcase, log.time, nil, [tags, named_tags, duration, message, payload, exception].compact.join(" "))
@@ -1,5 +1,5 @@
1
- require 'forwardable'
2
- require 'pact_broker/verifications/repository'
1
+ require "forwardable"
2
+ require "pact_broker/verifications/repository"
3
3
 
4
4
  # A collection of matrix rows with the same pact publication id
5
5
  # It's basically a normalised view of a denormalised view :(
@@ -33,8 +33,8 @@ module PactBroker
33
33
  def latest_verification_for_pseudo_branch
34
34
  @latest_verification ||= begin
35
35
  verification = matrix_rows.collect do | row|
36
- row.verification || latest_verification_for_consumer_version_tag(row)
37
- end.compact.sort_by(&:id).last
36
+ row.verification || latest_verification_for_consumer_version_tag(row)
37
+ end.compact.sort_by(&:id).last
38
38
 
39
39
  if !verification && overall_latest?
40
40
  overall_latest_verification
@@ -1,17 +1,32 @@
1
- require 'dry-validation'
1
+ require "dry-validation"
2
+ require "pact_broker/messages"
3
+ require "pact_broker/api/contracts/dry_validation_predicates"
4
+ require "pact_broker/project_root"
2
5
 
3
6
  module PactBroker
4
7
  module Api
5
8
  module Contracts
6
9
  class CanIDeployQuerySchema
10
+ extend PactBroker::Messages
11
+
7
12
  SCHEMA = Dry::Validation.Schema do
13
+ configure do
14
+ predicates(DryValidationPredicates)
15
+ config.messages_file = PactBroker.project_root.join("lib", "pact_broker", "locale", "en.yml")
16
+ end
8
17
  required(:pacticipant).filled(:str?)
9
18
  required(:version).filled(:str?)
10
19
  optional(:to).filled(:str?)
20
+ optional(:environment).filled(:str?, :environment_with_name_exists?)
11
21
  end
12
22
 
13
23
  def self.call(params)
14
- select_first_message(SCHEMA.call(params).messages(full: true))
24
+ result = select_first_message(SCHEMA.call(params).messages(full: true))
25
+ if params[:to] && params[:environment]
26
+ result[:to] ||= []
27
+ result[:to] << message("errors.validation.cannot_specify_tag_and_environment")
28
+ end
29
+ result
15
30
  end
16
31
 
17
32
  def self.select_first_message(messages)
@@ -1,37 +1,40 @@
1
- require 'pact_broker/logging'
2
- require 'pact_broker/matrix/reason'
1
+ require "pact_broker/logging"
2
+ require "pact_broker/matrix/reason"
3
+ require "forwardable"
3
4
 
4
5
  module PactBroker
5
6
  module Matrix
6
7
  class DeploymentStatusSummary
7
8
  include PactBroker::Logging
9
+ extend Forwardable
8
10
 
9
- attr_reader :rows, :resolved_selectors, :integrations
11
+ attr_reader :query_results, :all_rows
12
+ delegate [:considered_rows, :ignored_rows, :resolved_selectors, :resolved_ignore_selectors, :integrations] => :query_results
10
13
 
11
- def initialize(rows, resolved_selectors, integrations)
12
- @rows = rows
13
- @resolved_selectors = resolved_selectors
14
- @integrations = integrations
14
+ def initialize(query_results)
15
+ @query_results = query_results
16
+ @all_rows = query_results.rows
15
17
  @dummy_selectors = create_dummy_selectors
16
18
  end
17
19
 
18
20
  def counts
19
21
  {
20
- success: rows.count(&:success),
21
- failed: rows.count { |row| row.success == false },
22
- unknown: required_integrations_without_a_row.count + rows.count { |row| row.success.nil? }
23
- }
22
+ success: considered_rows.count(&:success),
23
+ failed: considered_rows.count { |row| row.success == false },
24
+ unknown: required_integrations_without_a_row.count + considered_rows.count { |row| row.success.nil? },
25
+ ignored: resolved_ignore_selectors.any? ? ignored_rows.count : nil
26
+ }.compact
24
27
  end
25
28
 
26
29
  def deployable?
27
- return false if specified_selectors_that_do_not_exist.any?
28
- return nil if rows.any?{ |row| row.success.nil? }
30
+ return false if considered_specified_selectors_that_do_not_exist.any?
31
+ return nil if considered_rows.any?{ |row| row.success.nil? }
29
32
  return nil if required_integrations_without_a_row.any?
30
- rows.all?(&:success) # true if rows is empty
33
+ considered_rows.all?(&:success) # true if considered_rows is empty
31
34
  end
32
35
 
33
36
  def reasons
34
- error_messages.any? ? error_messages + warning_messages : success_messages + warning_messages
37
+ error_messages.any? ? warning_messages + error_messages : warning_messages + success_messages
35
38
  end
36
39
 
37
40
  private
@@ -52,7 +55,48 @@ module PactBroker
52
55
  end
53
56
 
54
57
  def warning_messages
55
- []
58
+ resolved_ignore_selectors.select(&:pacticipant_or_version_does_not_exist?).collect { | s | IgnoreSelectorDoesNotExist.new(s) } +
59
+ bad_practice_warnings
60
+ end
61
+
62
+ def bad_practice_warnings
63
+ warnings = []
64
+
65
+ if no_to_tag_or_environment_specified?
66
+ warnings << NoEnvironmentSpecified.new
67
+ end
68
+
69
+ if selector_without_pacticipant_version_number_specified?
70
+ warnings << SelectorWithoutPacticipantVersionNumberSpecified.new
71
+ end
72
+
73
+ warnings
74
+ end
75
+
76
+ def selector_without_pacticipant_version_number_specified?
77
+ # If only the pacticipant name is specified, it can't be a can-i-deploy query, must be a matrix UI query
78
+ resolved_selectors
79
+ .select(&:specified?)
80
+ .reject(&:only_pacticipant_name_specified?)
81
+ .reject(&:pacticipant_version_specified_in_original_selector?)
82
+ .any?
83
+ end
84
+
85
+
86
+ def more_than_one_selector_specified?
87
+ # If only the pacticipant name is specified, it can't be a can-i-deploy query, must be a matrix UI query
88
+ resolved_selectors
89
+ .select(&:specified?)
90
+ .reject(&:only_pacticipant_name_specified?)
91
+ .any?
92
+ end
93
+
94
+ def no_to_tag_or_environment_specified?
95
+ !(query_results.options[:tag] || query_results.options[:environment_name])
96
+ end
97
+
98
+ def considered_specified_selectors_that_do_not_exist
99
+ resolved_selectors.select(&:consider?).select(&:specified_version_that_does_not_exist?)
56
100
  end
57
101
 
58
102
  def specified_selectors_that_do_not_exist
@@ -60,24 +104,20 @@ module PactBroker
60
104
  end
61
105
 
62
106
  def specified_selectors_do_not_exist_messages
63
- specified_selectors_that_do_not_exist.collect do | selector |
64
- SpecifiedVersionDoesNotExist.new(selector)
65
- end
107
+ specified_selectors_that_do_not_exist.select(&:consider?).collect { | selector | SpecifiedVersionDoesNotExist.new(selector) }
66
108
  end
67
109
 
68
110
  def not_ever_verified_reasons
69
- rows.select{ | row | row.success.nil? }.collect{ |row | pact_not_ever_verified_by_provider(row) }
111
+ considered_rows.select{ | row | row.success.nil? }.collect{ |row | pact_not_ever_verified_by_provider(row) }
70
112
  end
71
113
 
72
114
  def failure_messages
73
- rows.select{ |row| row.success == false }.collect do | row |
74
- VerificationFailed.new(*selectors_for(row))
75
- end
115
+ considered_rows.select{ |row| row.success == false }.collect { | row | VerificationFailed.new(*selectors_for(row)) }
76
116
  end
77
117
 
78
118
  def success_messages
79
- if rows.all?(&:success) && required_integrations_without_a_row.empty?
80
- if rows.any?
119
+ if considered_rows.all?(&:success) && required_integrations_without_a_row.empty?
120
+ if considered_rows.any?
81
121
  [Successful.new]
82
122
  else
83
123
  [NoDependenciesMissing.new]
@@ -99,7 +139,7 @@ module PactBroker
99
139
  # Foo v2 -> Bar v1 (latest prod) [this line not included because CV doesn't match]
100
140
  # Foo v3 -> Bar v2 [this line not included because PV doesn't match]
101
141
  #
102
- # No matrix rows would be returned. This method identifies that we have no row for
142
+ # No matrix considered_rows would be returned. This method identifies that we have no row for
103
143
  # the Foo -> Bar integration, and therefore cannot deploy Foo.
104
144
  # However, if we were to try and deploy the provider, Bar, that would be ok
105
145
  # as Bar does not rely on Foo, so this method would not return that integration.
@@ -117,11 +157,11 @@ module PactBroker
117
157
  end
118
158
 
119
159
  def log_required_integrations_without_a_row_occurred integrations
120
- logger.info("required_integrations_without_a_row returned non empty", payload: { integrations: integrations, rows: rows })
160
+ logger.info("required_integrations_without_a_row returned non empty", payload: { integrations: integrations, considered_rows: considered_rows })
121
161
  end
122
162
 
123
163
  def row_exists_for_integration(integration)
124
- rows.find { | row | integration == row }
164
+ all_rows.find { | row | integration.matches_pacticipant_ids?(row) }
125
165
  end
126
166
 
127
167
  def missing_reasons
@@ -163,33 +203,33 @@ module PactBroker
163
203
 
164
204
  # When the user has not specified a version of the provider (eg no 'latest' and/or 'tag', which means 'all versions')
165
205
  # so the "add inferred selectors" code in the Matrix::Repository has not run,
166
- # we may end up with rows for which we do not have a selector.
206
+ # we may end up with considered_rows for which we do not have a selector.
167
207
  # To solve this, create dummy selectors from the row and integration data.
168
208
  def create_dummy_selectors
169
- (dummy_selectors_from_rows + dummy_selectors_from_integrations).uniq
209
+ (dummy_selectors_from_considered_rows + dummy_selectors_from_integrations).uniq
170
210
  end
171
211
 
172
212
  def dummy_selectors_from_integrations
173
213
  integrations.collect do | row |
174
- dummy_consumer_selector = ResolvedSelector.for_pacticipant(row.consumer, :inferred)
175
- dummy_provider_selector = ResolvedSelector.for_pacticipant(row.provider, :inferred)
214
+ dummy_consumer_selector = ResolvedSelector.for_pacticipant(row.consumer, {}, :inferred, false)
215
+ dummy_provider_selector = ResolvedSelector.for_pacticipant(row.provider, {}, :inferred, false)
176
216
  [dummy_consumer_selector, dummy_provider_selector]
177
217
  end.flatten
178
218
  end
179
219
 
180
- def dummy_selectors_from_rows
181
- rows.collect do | row |
182
- dummy_consumer_selector = ResolvedSelector.for_pacticipant_and_version(row.consumer, row.consumer_version, {}, :inferred)
220
+ def dummy_selectors_from_considered_rows
221
+ considered_rows.collect do | row |
222
+ dummy_consumer_selector = ResolvedSelector.for_pacticipant_and_version(row.consumer, row.consumer_version, {}, :inferred, false)
183
223
  dummy_provider_selector = row.provider_version ?
184
- ResolvedSelector.for_pacticipant_and_version(row.provider, row.provider_version, {}, :inferred) :
185
- ResolvedSelector.for_pacticipant(row.provider, :inferred)
224
+ ResolvedSelector.for_pacticipant_and_version(row.provider, row.provider_version, {}, :inferred, false) :
225
+ ResolvedSelector.for_pacticipant(row.provider, {}, :inferred, false)
186
226
  [dummy_consumer_selector, dummy_provider_selector]
187
227
  end.flatten
188
228
  end
189
229
 
190
230
  # experimental
191
231
  def warnings_for_missing_interactions
192
- rows.select(&:success).collect do | row |
232
+ considered_rows.select(&:success).collect do | row |
193
233
  begin
194
234
  if row.verification.interactions_missing_test_results.any? && !row.verification.all_interactions_missing_test_results?
195
235
  InteractionsMissingVerifications.new(selector_for(row.consumer_name), selector_for(row.provider_name), row.verification.interactions_missing_test_results)