pact_broker 2.40.0 → 2.41.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +36 -0
- data/DEVELOPER_DOCUMENTATION.md +11 -0
- data/db/ddl_statements/head_pact_tags.rb +10 -0
- data/db/ddl_statements/latest_pact_consumer_version_orders.rb +16 -0
- data/db/ddl_statements/latest_pact_publications_by_consumer_versions.rb +16 -0
- data/db/ddl_statements/latest_tagged_pact_consumer_version_orders.rb +23 -0
- data/db/ddl_statements/latest_verification_ids_for_consumer_version_tags.rb +15 -0
- data/db/ddl_statements/{latest_verification_ids_for_pact_versions_v001.rb → latest_verification_ids_for_pact_versions.rb} +0 -0
- data/db/migrations/000028_create_all_pact_publications.rb +1 -0
- data/db/migrations/20180311_optimise_head_matrix.rb +1 -9
- data/db/migrations/20180722_recreate_views.rb +6 -19
- data/db/migrations/20191028_optimise_latest_tagged_pact_cv_orders.rb +13 -0
- data/db/migrations/20191030_optimise_latest_pact_publications_by_consumer_versions_.rb +13 -0
- data/db/migrations/20191031_optimise_latest_verification_ids_for_consumer_version_tags.rb +13 -0
- data/db/migrations/20191101_create_head_pact_tags.rb +11 -0
- data/lib/db.rb +1 -0
- data/lib/pact_broker/api/contracts/dry_validation_predicates.rb +15 -0
- data/lib/pact_broker/api/contracts/dry_validation_workarounds.rb +38 -0
- data/lib/pact_broker/api/contracts/verifiable_pacts_json_query_schema.rb +34 -0
- data/lib/pact_broker/api/contracts/verifiable_pacts_query_schema.rb +12 -20
- data/lib/pact_broker/api/decorators/matrix_decorator.rb +25 -6
- data/lib/pact_broker/api/decorators/relationships_csv_decorator.rb +4 -12
- data/lib/pact_broker/api/decorators/verifiable_pact_decorator.rb +5 -2
- data/lib/pact_broker/api/decorators/verifiable_pacts_query_decorator.rb +21 -9
- data/lib/pact_broker/api/renderers/integrations_dot_renderer.rb +1 -1
- data/lib/pact_broker/api/resources/base_resource.rb +1 -1
- data/lib/pact_broker/api/resources/can_i_deploy.rb +2 -9
- data/lib/pact_broker/api/resources/matrix.rb +2 -8
- data/lib/pact_broker/api/resources/matrix_for_consumer_and_provider.rb +1 -0
- data/lib/pact_broker/api/resources/provider_pacts_for_verification.rb +36 -7
- data/lib/pact_broker/app.rb +1 -0
- data/lib/pact_broker/db/data_migrations/migrate_webhook_headers.rb +1 -1
- data/lib/pact_broker/db/seed_example_data.rb +8 -5
- data/lib/pact_broker/diagnostic/resources/base_resource.rb +0 -8
- data/lib/pact_broker/domain/index_item.rb +47 -16
- data/lib/pact_broker/domain/pact.rb +12 -4
- data/lib/pact_broker/domain/version.rb +2 -0
- data/lib/pact_broker/hash_refinements.rb +48 -0
- data/lib/pact_broker/index/page.rb +12 -0
- data/lib/pact_broker/index/service.rb +156 -21
- data/lib/pact_broker/integrations/integration.rb +22 -0
- data/lib/pact_broker/locale/en.yml +2 -0
- data/lib/pact_broker/logging.rb +0 -1
- data/lib/pact_broker/matrix/aggregated_row.rb +3 -9
- data/lib/pact_broker/matrix/deployment_status_summary.rb +5 -5
- data/lib/pact_broker/matrix/head_row.rb +2 -0
- data/lib/pact_broker/matrix/quick_row.rb +7 -7
- data/lib/pact_broker/matrix/repository.rb +2 -4
- data/lib/pact_broker/pacticipants/repository.rb +1 -1
- data/lib/pact_broker/pacts/pact_publication.rb +27 -4
- data/lib/pact_broker/pacts/repository.rb +41 -18
- data/lib/pact_broker/pacts/service.rb +23 -3
- data/lib/pact_broker/pacts/verifiable_pact.rb +8 -2
- data/lib/pact_broker/pacts/verifiable_pact_messages.rb +14 -8
- data/lib/pact_broker/string_refinements.rb +36 -1
- data/lib/pact_broker/tags/head_pact_tags.rb +12 -0
- data/lib/pact_broker/tags/tag_with_latest_flag.rb +0 -1
- data/lib/pact_broker/test/test_data_builder.rb +1 -1
- data/lib/pact_broker/ui/controllers/index.rb +23 -2
- data/lib/pact_broker/ui/view_models/index_item.rb +7 -1
- data/lib/pact_broker/ui/view_models/index_items.rb +10 -8
- data/lib/pact_broker/ui/view_models/matrix_line.rb +14 -21
- data/lib/pact_broker/ui/view_models/matrix_tag.rb +6 -8
- data/lib/pact_broker/ui/views/index/_pagination.haml +31 -0
- data/lib/pact_broker/ui/views/index/show-with-tags.haml +6 -3
- data/lib/pact_broker/ui/views/index/show.haml +5 -2
- data/lib/pact_broker/ui/views/matrix/show.haml +6 -9
- data/lib/pact_broker/version.rb +1 -1
- data/lib/pact_broker/webhooks/webhook.rb +2 -2
- data/lib/pact_broker/webhooks/webhook_execution_result.rb +3 -18
- data/public/javascripts/matrix.js +26 -1
- data/public/javascripts/pagination.js +1127 -0
- data/public/stylesheets/index.css +13 -0
- data/public/stylesheets/matrix.css +10 -1
- data/spec/features/get_provider_pacts_for_verification_spec.rb +44 -9
- data/spec/features/pending_pacts_spec.rb +1 -1
- data/spec/features/wip_pacts_spec.rb +138 -0
- data/spec/integration/app_spec.rb +1 -1
- data/spec/lib/pact_broker/api/contracts/verifiable_pacts_json_query_schema_spec.rb +90 -0
- data/spec/lib/pact_broker/api/contracts/verifiable_pacts_query_schema_spec.rb +26 -4
- data/spec/lib/pact_broker/api/decorators/matrix_decorator_spec.rb +36 -2
- data/spec/lib/pact_broker/api/decorators/verifiable_pact_decorator_spec.rb +24 -1
- data/spec/lib/pact_broker/api/decorators/verifiable_pacts_query_decorator_spec.rb +62 -18
- data/spec/lib/pact_broker/api/resources/base_resource_spec.rb +10 -0
- data/spec/lib/pact_broker/api/resources/provider_pacts_for_verification_spec.rb +75 -6
- data/spec/lib/pact_broker/hash_refinements_spec.rb +24 -0
- data/spec/lib/pact_broker/index/service_spec.rb +38 -2
- data/spec/lib/pact_broker/integrations/integration_spec.rb +79 -41
- data/spec/lib/pact_broker/pacts/pact_publication_spec.rb +2 -0
- data/spec/lib/pact_broker/pacts/repository_find_wip_pact_versions_for_provider_spec.rb +17 -2
- data/spec/lib/pact_broker/pacts/service_spec.rb +56 -0
- data/spec/lib/pact_broker/pacts/verifiable_pact_messages_spec.rb +12 -1
- data/spec/lib/pact_broker/ui/controllers/index_spec.rb +28 -6
- data/spec/lib/pact_broker/ui/view_models/index_items_spec.rb +8 -29
- data/spec/lib/pact_broker/ui/view_models/matrix_line_spec.rb +41 -0
- metadata +24 -3
@@ -52,14 +52,15 @@ module PactBroker
|
|
52
52
|
provider = OpenStruct.new(name: line.provider_name)
|
53
53
|
consumer = OpenStruct.new(name: line.consumer_name)
|
54
54
|
consumer_version = OpenStruct.new(number: line.consumer_version_number, pacticipant: consumer)
|
55
|
-
|
55
|
+
provider_version = line.provider_version_number ? OpenStruct.new(number: line.provider_version_number, pacticipant: provider) : nil
|
56
|
+
line_hash(consumer, provider, consumer_version, provider_version, line, base_url)
|
56
57
|
end
|
57
58
|
end
|
58
59
|
|
59
|
-
def line_hash(consumer, provider, consumer_version, line, base_url)
|
60
|
+
def line_hash(consumer, provider, consumer_version, provider_version, line, base_url)
|
60
61
|
{
|
61
62
|
consumer: consumer_hash(line, consumer, consumer_version, base_url),
|
62
|
-
provider: provider_hash(line, provider, base_url),
|
63
|
+
provider: provider_hash(line, provider, provider_version, base_url),
|
63
64
|
pact: pact_hash(line, base_url),
|
64
65
|
verificationResult: verification_hash(line, base_url)
|
65
66
|
}
|
@@ -74,7 +75,8 @@ module PactBroker
|
|
74
75
|
self: {
|
75
76
|
href: version_url(base_url, consumer_version)
|
76
77
|
}
|
77
|
-
}
|
78
|
+
},
|
79
|
+
tags: tags(line.consumer_version_tags)
|
78
80
|
},
|
79
81
|
_links: {
|
80
82
|
self: {
|
@@ -84,7 +86,16 @@ module PactBroker
|
|
84
86
|
}
|
85
87
|
end
|
86
88
|
|
87
|
-
def
|
89
|
+
def tags(tags)
|
90
|
+
tags.collect do | tag |
|
91
|
+
{
|
92
|
+
name: tag.name,
|
93
|
+
latest: tag.latest?
|
94
|
+
}
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def provider_hash(line, provider, provider_version, base_url)
|
88
99
|
hash = {
|
89
100
|
name: line.provider_name,
|
90
101
|
version: nil,
|
@@ -96,7 +107,15 @@ module PactBroker
|
|
96
107
|
}
|
97
108
|
|
98
109
|
if !line.provider_version_number.nil?
|
99
|
-
hash[:version] = {
|
110
|
+
hash[:version] = {
|
111
|
+
number: line.provider_version_number,
|
112
|
+
_links: {
|
113
|
+
self: {
|
114
|
+
href: version_url(base_url, provider_version)
|
115
|
+
}
|
116
|
+
},
|
117
|
+
tags: tags(line.provider_version_tags)
|
118
|
+
}
|
100
119
|
end
|
101
120
|
|
102
121
|
hash
|
@@ -1,22 +1,16 @@
|
|
1
1
|
require 'csv'
|
2
|
-
require 'set'
|
3
2
|
|
4
3
|
module PactBroker
|
5
|
-
|
6
4
|
module Api
|
7
|
-
|
8
5
|
module Decorators
|
9
|
-
|
10
6
|
class RelationshipsCsvDecorator
|
11
|
-
|
12
7
|
def initialize pacts
|
13
8
|
@pacts = pacts
|
14
|
-
@index_items = pacts.collect{|pact| PactBroker::Domain::IndexItem.new(pact.consumer,pact.provider)}
|
9
|
+
@index_items = pacts.collect{|pact| PactBroker::Domain::IndexItem.new(pact.consumer, pact.provider)}
|
15
10
|
end
|
16
11
|
|
17
12
|
def to_csv
|
18
13
|
hash = {}
|
19
|
-
pacticipants = @index_items.collect{|r| r.pacticipants}.flatten.uniq
|
20
14
|
|
21
15
|
@index_items.each do | index_item |
|
22
16
|
hash[index_item.consumer.id] ||= pacticipant_array(index_item.consumer, hash.size + 1)
|
@@ -24,7 +18,7 @@ module PactBroker
|
|
24
18
|
hash[index_item.consumer.id] << index_item.provider.id
|
25
19
|
end
|
26
20
|
|
27
|
-
max_length = hash.values.collect
|
21
|
+
max_length = hash.values.collect(&:size).max
|
28
22
|
|
29
23
|
hash.values.each do | array |
|
30
24
|
while array.size < max_length
|
@@ -37,7 +31,6 @@ module PactBroker
|
|
37
31
|
csv << array
|
38
32
|
end
|
39
33
|
end
|
40
|
-
|
41
34
|
end
|
42
35
|
|
43
36
|
def pacticipant_array pacticipant, order
|
@@ -46,9 +39,8 @@ module PactBroker
|
|
46
39
|
|
47
40
|
private
|
48
41
|
|
49
|
-
|
50
|
-
|
42
|
+
attr_reader :pacts
|
51
43
|
end
|
52
44
|
end
|
53
45
|
end
|
54
|
-
end
|
46
|
+
end
|
@@ -21,9 +21,12 @@ module PactBroker
|
|
21
21
|
end
|
22
22
|
|
23
23
|
property :verification_properties, as: :verificationProperties do
|
24
|
-
property :pending
|
25
|
-
|
24
|
+
property :pending,
|
25
|
+
if: ->(context) { context[:options][:user_options][:include_pending_status] }
|
26
|
+
property :wip, if: -> (context) { context[:represented].wip }
|
26
27
|
property :inclusion_reason, as: :inclusionReason, exec_context: :decorator
|
28
|
+
property :pending_reason, as: :pendingReason, exec_context: :decorator,
|
29
|
+
if: ->(context) { context[:options][:user_options][:include_pending_status] }
|
27
30
|
|
28
31
|
def inclusion_reason
|
29
32
|
PactBroker::Pacts::VerifiablePactMessages.new(represented).inclusion_reason
|
@@ -1,25 +1,37 @@
|
|
1
1
|
require_relative 'base_decorator'
|
2
2
|
require_relative 'verifiable_pact_decorator'
|
3
3
|
require 'pact_broker/api/pact_broker_urls'
|
4
|
+
require 'pact_broker/hash_refinements'
|
4
5
|
|
5
6
|
module PactBroker
|
6
7
|
module Api
|
7
8
|
module Decorators
|
8
9
|
class VerifiablePactsQueryDecorator < BaseDecorator
|
9
|
-
|
10
|
+
using PactBroker::HashRefinements
|
10
11
|
|
11
|
-
collection :
|
12
|
+
collection :provider_version_tags, default: []
|
13
|
+
|
14
|
+
collection :consumer_version_selectors, default: [], class: OpenStruct do
|
12
15
|
property :tag
|
13
|
-
property :latest,
|
16
|
+
property :latest,
|
17
|
+
setter: ->(fragment:, represented:, **) {
|
18
|
+
represented.latest = (fragment == 'true' || fragment == true)
|
19
|
+
}
|
14
20
|
end
|
15
21
|
|
22
|
+
property :include_pending_status, default: true,
|
23
|
+
setter: ->(fragment:, represented:, **) {
|
24
|
+
represented.include_pending_status = (fragment == 'true' || fragment == true)
|
25
|
+
}
|
26
|
+
|
27
|
+
property :include_wip_pacts_since, default: nil,
|
28
|
+
setter: ->(fragment:, represented:, **) {
|
29
|
+
represented.include_wip_pacts_since = fragment ? DateTime.parse(fragment) : nil
|
30
|
+
}
|
16
31
|
|
17
|
-
def from_hash(
|
18
|
-
#
|
19
|
-
|
20
|
-
result.consumer_version_selectors = [] if result.consumer_version_selectors.nil?
|
21
|
-
result.provider_version_tags = [] if result.provider_version_tags.nil?
|
22
|
-
result
|
32
|
+
def from_hash(hash)
|
33
|
+
# This handles both the snakecase keys from the GET query and the camelcase JSON POST body
|
34
|
+
super(hash&.snakecase_keys)
|
23
35
|
end
|
24
36
|
end
|
25
37
|
end
|
@@ -88,7 +88,7 @@ module PactBroker
|
|
88
88
|
end
|
89
89
|
|
90
90
|
def params_with_string_keys
|
91
|
-
JSON.parse(request.body.to_s, {symbolize_names: false}.merge(PACT_PARSING_OPTIONS))
|
91
|
+
@params_with_string_keys ||= JSON.parse(request.body.to_s, {symbolize_names: false}.merge(PACT_PARSING_OPTIONS))
|
92
92
|
end
|
93
93
|
|
94
94
|
def pact_params
|
@@ -7,6 +7,7 @@ module PactBroker
|
|
7
7
|
module Resources
|
8
8
|
class CanIDeploy < Matrix
|
9
9
|
def initialize
|
10
|
+
super
|
10
11
|
@query_params = JSON.parse(Rack::Utils.parse_nested_query(request.uri.query).to_json, symbolize_names: true)
|
11
12
|
@selectors, @options = PactBroker::Matrix::ParseCanIDeployQuery.call(query_params)
|
12
13
|
end
|
@@ -22,19 +23,11 @@ module PactBroker
|
|
22
23
|
|
23
24
|
private
|
24
25
|
|
25
|
-
attr_reader :query_params
|
26
|
+
attr_reader :query_params, :selectors, :options
|
26
27
|
|
27
28
|
def query_schema
|
28
29
|
PactBroker::Api::Contracts::CanIDeployQuerySchema
|
29
30
|
end
|
30
|
-
|
31
|
-
def selectors
|
32
|
-
@selectors
|
33
|
-
end
|
34
|
-
|
35
|
-
def options
|
36
|
-
@options
|
37
|
-
end
|
38
31
|
end
|
39
32
|
end
|
40
33
|
end
|
@@ -7,8 +7,10 @@ module PactBroker
|
|
7
7
|
module Api
|
8
8
|
module Resources
|
9
9
|
class Matrix < BaseResource
|
10
|
+
attr_reader :selectors, :options
|
10
11
|
|
11
12
|
def initialize
|
13
|
+
super
|
12
14
|
@selectors, @options = PactBroker::Matrix::ParseQuery.call(request.uri.query)
|
13
15
|
end
|
14
16
|
|
@@ -44,14 +46,6 @@ module PactBroker
|
|
44
46
|
def lines
|
45
47
|
@lines ||= matrix_service.find(selectors, options)
|
46
48
|
end
|
47
|
-
|
48
|
-
def selectors
|
49
|
-
@selectors
|
50
|
-
end
|
51
|
-
|
52
|
-
def options
|
53
|
-
@options
|
54
|
-
end
|
55
49
|
end
|
56
50
|
end
|
57
51
|
end
|
@@ -2,13 +2,21 @@ require 'pact_broker/api/resources/provider_pacts'
|
|
2
2
|
require 'pact_broker/api/decorators/verifiable_pacts_decorator'
|
3
3
|
require 'pact_broker/api/contracts/verifiable_pacts_query_schema'
|
4
4
|
require 'pact_broker/api/decorators/verifiable_pacts_query_decorator'
|
5
|
+
require 'pact_broker/api/contracts/verifiable_pacts_json_query_schema'
|
6
|
+
require 'pact_broker/hash_refinements'
|
5
7
|
|
6
8
|
module PactBroker
|
7
9
|
module Api
|
8
10
|
module Resources
|
9
11
|
class ProviderPactsForVerification < ProviderPacts
|
10
|
-
|
11
|
-
|
12
|
+
using PactBroker::HashRefinements
|
13
|
+
|
14
|
+
def allowed_methods
|
15
|
+
["GET", "POST", "OPTIONS"]
|
16
|
+
end
|
17
|
+
|
18
|
+
def content_types_accepted
|
19
|
+
[["application/json"]]
|
12
20
|
end
|
13
21
|
|
14
22
|
def malformed_request?
|
@@ -20,15 +28,19 @@ module PactBroker
|
|
20
28
|
end
|
21
29
|
end
|
22
30
|
|
23
|
-
|
31
|
+
def process_post
|
32
|
+
response.body = to_json
|
33
|
+
true
|
34
|
+
end
|
24
35
|
|
25
|
-
|
36
|
+
private
|
26
37
|
|
27
38
|
def pacts
|
28
39
|
pact_service.find_for_verification(
|
29
40
|
provider_name,
|
30
41
|
parsed_query_params.provider_version_tags,
|
31
|
-
parsed_query_params.consumer_version_selectors
|
42
|
+
parsed_query_params.consumer_version_selectors,
|
43
|
+
{ include_wip_pacts_since: parsed_query_params.include_wip_pacts_since }
|
32
44
|
)
|
33
45
|
end
|
34
46
|
|
@@ -40,14 +52,31 @@ module PactBroker
|
|
40
52
|
PactBroker::Api::Decorators::VerifiablePactsDecorator.new(pacts).to_json(to_json_options)
|
41
53
|
end
|
42
54
|
|
43
|
-
|
44
55
|
def query_schema
|
45
|
-
|
56
|
+
if request.get?
|
57
|
+
PactBroker::Api::Contracts::VerifiablePactsQuerySchema
|
58
|
+
else
|
59
|
+
PactBroker::Api::Contracts::VerifiablePactsJSONQuerySchema
|
60
|
+
end
|
46
61
|
end
|
47
62
|
|
48
63
|
def parsed_query_params
|
49
64
|
@parsed_query_params ||= PactBroker::Api::Decorators::VerifiablePactsQueryDecorator.new(OpenStruct.new).from_hash(query)
|
50
65
|
end
|
66
|
+
|
67
|
+
def query
|
68
|
+
@query ||= begin
|
69
|
+
if request.get?
|
70
|
+
Rack::Utils.parse_nested_query(request.uri.query)
|
71
|
+
elsif request.post?
|
72
|
+
params_with_string_keys
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def to_json_options
|
78
|
+
super.deep_merge(user_options: { include_pending_status: parsed_query_params.include_pending_status })
|
79
|
+
end
|
51
80
|
end
|
52
81
|
end
|
53
82
|
end
|
data/lib/pact_broker/app.rb
CHANGED
@@ -110,6 +110,7 @@ module PactBroker
|
|
110
110
|
PactBroker::DB.connection.timezone = :utc
|
111
111
|
PactBroker::DB.validate_connection_config if configuration.validate_database_connection_config
|
112
112
|
PactBroker::DB.set_mysql_strict_mode_if_mysql
|
113
|
+
PactBroker::DB.connection.extension(:pagination)
|
113
114
|
Sequel.datetime_class = DateTime
|
114
115
|
Sequel.database_timezone = :utc # Store all dates in UTC, assume any date without a TZ is UTC
|
115
116
|
Sequel.application_timezone = :local # Convert dates to localtime when retrieving from database
|
@@ -11,7 +11,7 @@ module PactBroker
|
|
11
11
|
connection[:webhook_headers].for_update.each do | webhook_header |
|
12
12
|
webhook = connection[:webhooks].for_update.where(id: webhook_header[:webhook_id]).first
|
13
13
|
new_headers = webhook[:headers] ? JSON.parse(webhook[:headers]) : {}
|
14
|
-
new_headers
|
14
|
+
new_headers[webhook_header[:name]] = webhook_header[:value]
|
15
15
|
connection[:webhooks].where(id: webhook[:id]).update(headers: new_headers.to_json)
|
16
16
|
connection[:webhook_headers].where(webhook_header).delete
|
17
17
|
end
|
@@ -18,21 +18,24 @@ module PactBroker
|
|
18
18
|
.create_provider(provider_name, created_at: days_ago(16))
|
19
19
|
.create_consumer_version("e15da45d3943bf10793a6d04cfb9f5dabe430fe2", created_at: days_ago(16))
|
20
20
|
.create_consumer_version_tag("prod", created_at: days_ago(16))
|
21
|
-
.create_consumer_version_tag("
|
21
|
+
.create_consumer_version_tag("master", created_at: days_ago(16))
|
22
22
|
.create_pact(json_content: pact_1, created_at: days_ago(16))
|
23
23
|
.create_verification(provider_version: "1315e0b1924cb6f42751f977789be3559373033a", execution_date: days_ago(15))
|
24
|
-
.create_provider_version_tag("
|
24
|
+
.create_provider_version_tag("master", created_at: days_ago(14))
|
25
25
|
.create_provider_version_tag("prod", created_at: days_ago(14))
|
26
26
|
.create_verification(provider_version: "480e5aeb30467856ca995d0024d2c1800b0719e5", success: false, number: 2, execution_date: days_ago(14))
|
27
|
-
.create_provider_version_tag("
|
27
|
+
.create_provider_version_tag("master", created_at: days_ago(14))
|
28
28
|
.create_consumer_version("725c6ccb7cf7efc51b4394f9828585eea9c379d9", created_at: days_ago(7))
|
29
29
|
.create_consumer_version_tag("feat-new-thing", created_at: days_ago(7))
|
30
30
|
.create_pact(json_content: pact_2, created_at: days_ago(7))
|
31
31
|
.create_consumer_version("7bd4d9173522826dc3e8704fd62dde0424f4c827", created_at: days_ago(1))
|
32
|
-
.create_consumer_version_tag("
|
32
|
+
.create_consumer_version_tag("master", created_at: days_ago(1))
|
33
33
|
.create_pact(json_content: pact_3, created_at: days_ago(1))
|
34
34
|
.create_verification(provider_version: "4fdf20082263d4c5038355a3b734be1c0054d1e1", execution_date: days_ago(1))
|
35
|
-
.create_provider_version_tag("
|
35
|
+
.create_provider_version_tag("master", created_at: days_ago(1))
|
36
|
+
.create_consumer_version("5556b8149bf8bac76bc30f50a8a2dd4c22c85f30", created_at: days_ago(0.5))
|
37
|
+
.create_consumer_version_tag("master", created_at: days_ago(0.5))
|
38
|
+
.republish_same_pact(created_at: days_ago(0.5))
|
36
39
|
end
|
37
40
|
|
38
41
|
def database_empty?
|
@@ -16,14 +16,6 @@ module PactBroker
|
|
16
16
|
return false if PactBroker.configuration.authorize.nil?
|
17
17
|
!PactBroker.configuration.authorize.call(self, {})
|
18
18
|
end
|
19
|
-
|
20
|
-
def initialize
|
21
|
-
PactBroker.configuration.before_resource.call(self)
|
22
|
-
end
|
23
|
-
|
24
|
-
def finish_request
|
25
|
-
PactBroker.configuration.after_resource.call(self)
|
26
|
-
end
|
27
19
|
end
|
28
20
|
end
|
29
21
|
end
|
@@ -4,10 +4,22 @@ require 'pact_broker/webhooks/status'
|
|
4
4
|
module PactBroker
|
5
5
|
module Domain
|
6
6
|
class IndexItem
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
attr_reader :consumer,
|
8
|
+
:provider,
|
9
|
+
:latest_pact,
|
10
|
+
:latest_verification,
|
11
|
+
:webhooks,
|
12
|
+
:triggered_webhooks,
|
13
|
+
:latest_verification_latest_tags
|
14
|
+
|
15
|
+
# rubocop:disable Metrics/ParameterLists
|
16
|
+
def self.create(consumer, provider, latest_pact, latest, latest_verification, webhooks = [], triggered_webhooks = [], tags = [], latest_verification_latest_tags = [])
|
17
|
+
new(consumer, provider, latest_pact, latest, latest_verification, webhooks, triggered_webhooks, tags, latest_verification_latest_tags)
|
18
|
+
end
|
19
|
+
# rubocop:enable Metrics/ParameterLists
|
20
|
+
|
21
|
+
# rubocop:disable Metrics/ParameterLists
|
22
|
+
def initialize(consumer, provider, latest_pact = nil, latest = true, latest_verification = nil, webhooks = [], triggered_webhooks = [], tags = [], latest_verification_latest_tags = [])
|
11
23
|
@consumer = consumer
|
12
24
|
@provider = provider
|
13
25
|
@latest_pact = latest_pact
|
@@ -18,10 +30,7 @@ module PactBroker
|
|
18
30
|
@tags = tags
|
19
31
|
@latest_verification_latest_tags = latest_verification_latest_tags
|
20
32
|
end
|
21
|
-
|
22
|
-
def self.create consumer, provider, latest_pact, latest, latest_verification, webhooks = [], triggered_webhooks = [], tags = [], latest_verification_latest_tags = []
|
23
|
-
new consumer, provider, latest_pact, latest, latest_verification, webhooks, triggered_webhooks, tags, latest_verification_latest_tags
|
24
|
-
end
|
33
|
+
# rubocop:enable Metrics/ParameterLists
|
25
34
|
|
26
35
|
def eq? other
|
27
36
|
IndexItem === other && other.consumer == consumer && other.provider == provider &&
|
@@ -43,10 +52,6 @@ module PactBroker
|
|
43
52
|
provider.name
|
44
53
|
end
|
45
54
|
|
46
|
-
def latest_pact
|
47
|
-
@latest_pact
|
48
|
-
end
|
49
|
-
|
50
55
|
def latest?
|
51
56
|
@latest
|
52
57
|
end
|
@@ -55,6 +60,10 @@ module PactBroker
|
|
55
60
|
@latest_pact.consumer_version_number
|
56
61
|
end
|
57
62
|
|
63
|
+
def consumer_version_order
|
64
|
+
consumer_version.order
|
65
|
+
end
|
66
|
+
|
58
67
|
def consumer_version
|
59
68
|
@latest_pact.consumer_version
|
60
69
|
end
|
@@ -93,10 +102,6 @@ module PactBroker
|
|
93
102
|
!!latest_verification
|
94
103
|
end
|
95
104
|
|
96
|
-
def latest_verification
|
97
|
-
@latest_verification
|
98
|
-
end
|
99
|
-
|
100
105
|
def latest_verification_successful?
|
101
106
|
latest_verification.success
|
102
107
|
end
|
@@ -127,6 +132,32 @@ module PactBroker
|
|
127
132
|
provider_name <=> other.provider_name
|
128
133
|
end
|
129
134
|
|
135
|
+
# Add logic for ignoring case
|
136
|
+
def <=> other
|
137
|
+
comparisons = [
|
138
|
+
compare_name_asc(consumer_name, other.consumer_name),
|
139
|
+
compare_number_desc(consumer_version.order, other.consumer_version.order),
|
140
|
+
compare_number_desc(latest_pact.revision_number, other.latest_pact.revision_number),
|
141
|
+
compare_name_asc(provider_name, other.provider_name)
|
142
|
+
]
|
143
|
+
|
144
|
+
comparisons.find{|c| c != 0 } || 0
|
145
|
+
end
|
146
|
+
|
147
|
+
def compare_name_asc name1, name2
|
148
|
+
name1&.downcase <=> name2&.downcase
|
149
|
+
end
|
150
|
+
|
151
|
+
def compare_number_desc number1, number2
|
152
|
+
if number1 && number2
|
153
|
+
number2 <=> number1
|
154
|
+
elsif number1
|
155
|
+
1
|
156
|
+
else
|
157
|
+
-1
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
130
161
|
def to_s
|
131
162
|
"Pact between #{consumer_name} #{consumer_version_number} and #{provider_name} #{provider_version_number}"
|
132
163
|
end
|