pact_broker 1.1.0 → 1.2.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 +18 -0
- data/README.md +8 -11
- data/lib/pact_broker/api.rb +2 -0
- data/lib/pact_broker/api/decorators/decorator_context.rb +8 -1
- data/lib/pact_broker/api/decorators/pact_decorator.rb +18 -3
- data/lib/pact_broker/api/decorators/pact_version_decorator.rb +39 -0
- data/lib/pact_broker/api/decorators/pact_versions_decorator.rb +48 -0
- data/lib/pact_broker/api/decorators/pacticipant_decorator.rb +3 -3
- data/lib/pact_broker/api/decorators/webhook_decorator.rb +1 -1
- data/lib/pact_broker/api/decorators/webhook_execution_result_decorator.rb +1 -1
- data/lib/pact_broker/api/decorators/webhooks_decorator.rb +1 -1
- data/lib/pact_broker/api/pact_broker_urls.rb +16 -6
- data/lib/pact_broker/api/renderers/html_pact_renderer.rb +35 -6
- data/lib/pact_broker/api/resources/base_resource.rb +80 -33
- data/lib/pact_broker/api/resources/group.rb +26 -24
- data/lib/pact_broker/api/resources/index.rb +52 -51
- data/lib/pact_broker/api/resources/latest_pact.rb +22 -22
- data/lib/pact_broker/api/resources/latest_pacts.rb +18 -17
- data/lib/pact_broker/api/resources/pact.rb +34 -39
- data/lib/pact_broker/api/resources/pact_versions.rb +35 -0
- data/lib/pact_broker/api/resources/pact_webhooks.rb +54 -61
- data/lib/pact_broker/api/resources/pacticipant.rb +40 -39
- data/lib/pact_broker/api/resources/pacticipant_resource_methods.rb +19 -0
- data/lib/pact_broker/api/resources/pacticipants.rb +52 -17
- data/lib/pact_broker/api/resources/relationships.rb +18 -17
- data/lib/pact_broker/api/resources/tag.rb +30 -29
- data/lib/pact_broker/api/resources/webhook.rb +29 -28
- data/lib/pact_broker/api/resources/webhook_execution.rb +0 -1
- data/lib/pact_broker/api/resources/webhook_resource_methods.rb +24 -0
- data/lib/pact_broker/api/resources/webhooks.rb +18 -17
- data/lib/pact_broker/app.rb +1 -0
- data/lib/pact_broker/configuration.rb +2 -2
- data/lib/pact_broker/doc/views/webhooks.markdown +1 -1
- data/lib/pact_broker/functions/find_potential_duplicate_pacticipant_names.rb +43 -0
- data/lib/pact_broker/locale/en.yml +7 -0
- data/lib/pact_broker/messages.rb +20 -1
- data/lib/pact_broker/models/pact.rb +8 -0
- data/lib/pact_broker/models/pacticipant.rb +9 -0
- data/lib/pact_broker/models/version.rb +1 -0
- data/lib/pact_broker/repositories/pact_repository.rb +6 -0
- data/lib/pact_broker/repositories/pacticipant_repository.rb +4 -0
- data/lib/pact_broker/repositories/webhook_repository.rb +2 -3
- data/lib/pact_broker/services/pact_service.rb +20 -0
- data/lib/pact_broker/services/pacticipant_service.rb +28 -0
- data/lib/pact_broker/services/webhook_service.rb +7 -2
- data/lib/pact_broker/version.rb +1 -1
- data/pact_broker.gemspec +1 -1
- data/public/stylesheets/github.css +1 -1
- data/public/stylesheets/pact.css +12 -0
- data/spec/lib/pact_broker/api/decorators/pact_decorator_spec.rb +10 -0
- data/spec/lib/pact_broker/api/decorators/pact_version_decorator_spec.rb +49 -0
- data/spec/lib/pact_broker/api/renderers/html_pact_renderer_spec.rb +9 -1
- data/spec/lib/pact_broker/api/resources/group_spec.rb +1 -1
- data/spec/lib/pact_broker/api/resources/latest_pact_spec.rb +1 -1
- data/spec/lib/pact_broker/api/resources/pact_spec.rb +35 -6
- data/spec/lib/pact_broker/api/resources/pact_webhooks_spec.rb +6 -4
- data/spec/lib/pact_broker/api/resources/pacticipants_spec.rb +91 -0
- data/spec/lib/pact_broker/configuration_spec.rb +3 -3
- data/spec/lib/pact_broker/functions/find_potential_duplicate_pacticipant_names_spec.rb +82 -0
- data/spec/lib/pact_broker/messages_spec.rb +31 -0
- data/spec/lib/pact_broker/models/pacticipant_spec.rb +32 -0
- data/spec/lib/pact_broker/repositories/pact_repository_spec.rb +29 -0
- data/spec/lib/pact_broker/repositories/pacticipant_repository_spec.rb +29 -0
- data/spec/lib/pact_broker/repositories/webhook_repository_spec.rb +7 -18
- data/spec/lib/pact_broker/services/pact_service_spec.rb +20 -0
- data/spec/lib/pact_broker/services/pacticipant_service_spec.rb +87 -2
- data/spec/support/provider_state_builder.rb +7 -7
- data/tasks/rspec.rake +1 -1
- metadata +27 -2
data/lib/pact_broker/app.rb
CHANGED
@@ -29,6 +29,7 @@ module PactBroker
|
|
29
29
|
def post_configure
|
30
30
|
PactBroker.logger = configuration.logger
|
31
31
|
PactBroker::DB.connection = configuration.database_connection
|
32
|
+
PactBroker::DB.connection.timezone = :utc
|
32
33
|
|
33
34
|
if configuration.auto_migrate_db
|
34
35
|
logger.info "Migrating database"
|
@@ -23,9 +23,9 @@ module PactBroker
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def self.default_html_pact_render
|
26
|
-
lambda { |
|
26
|
+
lambda { |pact|
|
27
27
|
require 'pact_broker/api/renderers/html_pact_renderer'
|
28
|
-
PactBroker::Api::Renderers::HtmlPactRenderer.call
|
28
|
+
PactBroker::Api::Renderers::HtmlPactRenderer.call pact
|
29
29
|
}
|
30
30
|
end
|
31
31
|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
### Creating
|
4
4
|
|
5
|
-
1. To create a webhook, navigate to the pact you want to create the webhook for
|
5
|
+
1. To create a webhook, in the HAL Browser, navigate to the pact you want to create the webhook for
|
6
6
|
(Click "Go to Entry Point", then select "latest-pacts", then select the pact you want to create the webhook for.)
|
7
7
|
2. Click the "NON-GET" button for the "pact-webhooks" relation.
|
8
8
|
3. Paste in the webhook JSON (example shown below) in the body section and click "Make Request".
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'pact_broker/models/group'
|
2
|
+
|
3
|
+
=begin
|
4
|
+
|
5
|
+
=end
|
6
|
+
|
7
|
+
module PactBroker
|
8
|
+
|
9
|
+
module Functions
|
10
|
+
|
11
|
+
class FindPotentialDuplicatePacticipantNames
|
12
|
+
|
13
|
+
attr_reader :new_name, :existing_names
|
14
|
+
|
15
|
+
def initialize new_name, existing_names
|
16
|
+
@new_name = new_name
|
17
|
+
@existing_names = existing_names
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.call new_name, existing_names
|
21
|
+
new(new_name, existing_names).call
|
22
|
+
end
|
23
|
+
|
24
|
+
def call
|
25
|
+
return [] if existing_names.include?(new_name)
|
26
|
+
|
27
|
+
existing_names.select do | existing_name |
|
28
|
+
similar?(clean(new_name), clean(existing_name))
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def similar?(new_name, existing_name)
|
33
|
+
existing_name.include?(new_name) || new_name.include?(existing_name)
|
34
|
+
end
|
35
|
+
|
36
|
+
def clean name #TODO uppercase S
|
37
|
+
name.gsub(/s\b/,'').gsub(/s([A-Z])/,'\1').gsub(/[^A-Za-z0-9]/,'').downcase
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
@@ -5,6 +5,13 @@ en:
|
|
5
5
|
attribute_missing: "Missing required attribute '%{attribute}'"
|
6
6
|
invalid_http_method: "Invalid HTTP method '%{method}'"
|
7
7
|
invalid_url: "Invalid URL '%{url}'. Expected format: http://example.org"
|
8
|
+
duplicate_pacticipant: |
|
9
|
+
This is the first time a pact has been published for "%{new_name}".
|
10
|
+
The name "%{new_name}" is very similar to the following existing consumers/providers:
|
11
|
+
%{existing_names}
|
12
|
+
If you meant to specify one of the above names, please correct the pact configuration, and re-publish the pact.
|
13
|
+
If the pact is intended to be for a new consumer or provider, please manually create "%{new_name}" using the following command, and then re-publish the pact:
|
14
|
+
$ curl -v -XPOST -H "Content-Type: application/json" -d "{\"name\": \"%{new_name}\"}" %{create_pacticipant_url}
|
8
15
|
"400":
|
9
16
|
title: 400 Malformed Request
|
10
17
|
message: The request was malformed and could not be processed.
|
data/lib/pact_broker/messages.rb
CHANGED
@@ -1,11 +1,15 @@
|
|
1
1
|
require 'i18n'
|
2
|
+
require 'pact_broker/api/pact_broker_urls'
|
2
3
|
|
3
4
|
I18n.config.load_path << File.expand_path("../locale/en.yml", __FILE__)
|
4
5
|
|
5
6
|
module PactBroker
|
6
7
|
# Provides an interface to the I18n library specifically for
|
7
|
-
#
|
8
|
+
# the PactBroker's messages.
|
8
9
|
module Messages
|
10
|
+
|
11
|
+
extend self
|
12
|
+
|
9
13
|
# Interpolates an internationalized string.
|
10
14
|
# @param [String] key the name of the string to interpolate
|
11
15
|
# @param [Hash] options options to pass to I18n, including
|
@@ -14,5 +18,20 @@ module PactBroker
|
|
14
18
|
def message(key, options={})
|
15
19
|
::I18n.t(key, options.merge(:scope => :pact_broker))
|
16
20
|
end
|
21
|
+
|
22
|
+
def potential_duplicate_pacticipant_message new_name, potential_duplicate_pacticipants, base_url
|
23
|
+
existing_names = potential_duplicate_pacticipants.
|
24
|
+
collect{ | p | "* #{p.name}" }.join("\n")
|
25
|
+
message('errors.duplicate_pacticipant',
|
26
|
+
new_name: new_name,
|
27
|
+
existing_names: existing_names,
|
28
|
+
create_pacticipant_url: pacticipants_url(base_url))
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def pacticipants_url base_url
|
34
|
+
PactBroker::Api::PactBrokerUrls.pacticipants_url base_url
|
35
|
+
end
|
17
36
|
end
|
18
37
|
end
|
@@ -25,6 +25,14 @@ module PactBroker
|
|
25
25
|
def to_json options = {}
|
26
26
|
json_content
|
27
27
|
end
|
28
|
+
|
29
|
+
def name
|
30
|
+
"Pact between #{consumer.name} (v#{consumer_version_number}) and #{provider.name}"
|
31
|
+
end
|
32
|
+
|
33
|
+
def version_and_updated_date
|
34
|
+
"Version #{consumer_version_number} - #{updated_at.to_time.localtime.strftime("%d/%m/%Y")}"
|
35
|
+
end
|
28
36
|
end
|
29
37
|
|
30
38
|
Pact.plugin :timestamps, :update_on_create=>true
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'pact_broker/db'
|
2
|
+
require 'pact_broker/messages'
|
2
3
|
|
3
4
|
module PactBroker
|
4
5
|
|
@@ -6,6 +7,8 @@ module PactBroker
|
|
6
7
|
|
7
8
|
class Pacticipant < Sequel::Model
|
8
9
|
|
10
|
+
include Messages
|
11
|
+
|
9
12
|
set_primary_key :id
|
10
13
|
|
11
14
|
one_to_many :versions, :order => :order, :reciprocal => :pacticipant
|
@@ -18,6 +21,12 @@ module PactBroker
|
|
18
21
|
def to_s
|
19
22
|
"Pacticipant: id=#{id}, name=#{name}"
|
20
23
|
end
|
24
|
+
|
25
|
+
def validate
|
26
|
+
messages = []
|
27
|
+
messages << message('errors.validation.attribute_missing', attribute: 'name') unless name
|
28
|
+
messages
|
29
|
+
end
|
21
30
|
end
|
22
31
|
|
23
32
|
Pacticipant.plugin :timestamps, :update_on_create=>true
|
@@ -10,6 +10,7 @@ module PactBroker
|
|
10
10
|
set_primary_key :id
|
11
11
|
one_to_many :pacts
|
12
12
|
associate(:many_to_one, :pacticipant, :class => "PactBroker::Models::Pacticipant", :key => :pacticipant_id, :primary_key => :id)
|
13
|
+
one_to_many :tags, :reciprocal => :version
|
13
14
|
|
14
15
|
def after_create
|
15
16
|
OrderVersions.(self.pacticipant_id)
|
@@ -8,6 +8,12 @@ module PactBroker
|
|
8
8
|
|
9
9
|
include PactBroker::Logging
|
10
10
|
|
11
|
+
def find_all_pacts_between consumer_name, options
|
12
|
+
pact_finder(consumer_name, options.fetch(:and))
|
13
|
+
.left_outer_join(:tags, {:version_id => :id}, {implicit_qualifier: :versions})
|
14
|
+
.reverse_order(:order).all
|
15
|
+
end
|
16
|
+
|
11
17
|
def find_by_version_and_provider version_id, provider_id
|
12
18
|
PactBroker::Models::Pact.where(version_id: version_id, provider_id: provider_id).single_record
|
13
19
|
end
|
@@ -29,6 +29,10 @@ module PactBroker
|
|
29
29
|
PactBroker::Models::Pacticipant.new(name: args[:name], repository_url: args[:repository_url]).save(raise_on_save_failure: true)
|
30
30
|
end
|
31
31
|
|
32
|
+
def pacticipant_names
|
33
|
+
PactBroker::Models::Pacticipant.select(:name).order(:name).collect{ | pacticipant| pacticipant.name }
|
34
|
+
end
|
35
|
+
|
32
36
|
def find_latest_version name
|
33
37
|
|
34
38
|
end
|
@@ -2,7 +2,6 @@ require 'sequel'
|
|
2
2
|
require 'pact_broker/models/webhook'
|
3
3
|
require 'pact_broker/models/pacticipant'
|
4
4
|
require 'pact_broker/db'
|
5
|
-
require 'base64'
|
6
5
|
|
7
6
|
module PactBroker
|
8
7
|
module Repositories
|
@@ -14,9 +13,9 @@ module PactBroker
|
|
14
13
|
|
15
14
|
include Repositories
|
16
15
|
|
17
|
-
def create webhook, consumer, provider
|
16
|
+
def create uuid, webhook, consumer, provider
|
18
17
|
db_webhook = Webhook.from_model webhook, consumer, provider
|
19
|
-
db_webhook.uuid =
|
18
|
+
db_webhook.uuid = uuid
|
20
19
|
db_webhook.save
|
21
20
|
webhook.request.headers.each_pair do | name, value |
|
22
21
|
db_webhook.add_header WebhookHeader.from_model(name, value, db_webhook.id)
|
@@ -36,6 +36,26 @@ module PactBroker
|
|
36
36
|
|
37
37
|
end
|
38
38
|
|
39
|
+
def find_all_pacts_between consumer, options
|
40
|
+
pact_repository.find_all_pacts_between consumer, options
|
41
|
+
end
|
42
|
+
|
43
|
+
def find_distinct_pacts_between consumer, options
|
44
|
+
# Assumes pacts are sorted from newest to oldest
|
45
|
+
all = pact_repository.find_all_pacts_between consumer, options
|
46
|
+
distinct = []
|
47
|
+
(0...all.size).each do | i |
|
48
|
+
if i == all.size - 1
|
49
|
+
distinct << all[i]
|
50
|
+
else
|
51
|
+
if all[i].json_content != all[i+1].json_content
|
52
|
+
distinct << all[i]
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
distinct
|
57
|
+
end
|
58
|
+
|
39
59
|
def pact_has_changed_since_previous_version? pact
|
40
60
|
previous_pact = pact_repository.find_previous_pact pact
|
41
61
|
previous_pact && pact.json_content != previous_pact.json_content
|
@@ -1,5 +1,8 @@
|
|
1
1
|
require 'pact_broker/repositories'
|
2
|
+
require 'pact_broker/logging'
|
3
|
+
require 'pact_broker/messages'
|
2
4
|
require 'pact_broker/models/relationship'
|
5
|
+
require 'pact_broker/functions/find_potential_duplicate_pacticipant_names'
|
3
6
|
|
4
7
|
module PactBroker
|
5
8
|
|
@@ -8,6 +11,27 @@ module PactBroker
|
|
8
11
|
|
9
12
|
extend PactBroker::Repositories
|
10
13
|
extend PactBroker::Services
|
14
|
+
extend PactBroker::Logging
|
15
|
+
|
16
|
+
def self.messages_for_potential_duplicate_pacticipants pacticipant_names, base_url
|
17
|
+
messages = []
|
18
|
+
pacticipant_names.each do | name |
|
19
|
+
potential_duplicate_pacticipants = find_potential_duplicate_pacticipants(name)
|
20
|
+
if potential_duplicate_pacticipants.any?
|
21
|
+
messages << Messages.potential_duplicate_pacticipant_message(name, potential_duplicate_pacticipants, base_url)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
messages
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.find_potential_duplicate_pacticipants pacticipant_name
|
28
|
+
PactBroker::Functions::FindPotentialDuplicatePacticipantNames
|
29
|
+
.call(pacticipant_name, pacticipant_names).tap { | names|
|
30
|
+
if names.any?
|
31
|
+
logger.info "The following potential duplicate pacticipants were found for #{pacticipant_name}: #{names.join(", ")}"
|
32
|
+
end
|
33
|
+
} .collect{ | name | pacticipant_repository.find_by_name(name) }
|
34
|
+
end
|
11
35
|
|
12
36
|
def self.find_all_pacticipants
|
13
37
|
pacticipant_repository.find_all
|
@@ -51,6 +75,10 @@ module PactBroker
|
|
51
75
|
connection.run("delete from pacticipants where name = '#{name}'")
|
52
76
|
end
|
53
77
|
|
78
|
+
def self.pacticipant_names
|
79
|
+
pacticipant_repository.pacticipant_names
|
80
|
+
end
|
81
|
+
|
54
82
|
end
|
55
83
|
end
|
56
84
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'pact_broker/repositories'
|
2
2
|
require 'pact_broker/logging'
|
3
|
+
require 'base64'
|
3
4
|
|
4
5
|
module PactBroker
|
5
6
|
|
@@ -9,8 +10,12 @@ module PactBroker
|
|
9
10
|
extend Repositories
|
10
11
|
include Logging
|
11
12
|
|
12
|
-
def self.
|
13
|
-
|
13
|
+
def self.next_uuid
|
14
|
+
SecureRandom.urlsafe_base64
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.create uuid, webhook, consumer, provider
|
18
|
+
webhook_repository.create uuid, webhook, consumer, provider
|
14
19
|
end
|
15
20
|
|
16
21
|
def self.find_by_uuid uuid
|
data/lib/pact_broker/version.rb
CHANGED
data/pact_broker.gemspec
CHANGED
@@ -28,7 +28,7 @@ Gem::Specification.new do |gem|
|
|
28
28
|
gem.add_runtime_dependency 'versionomy'
|
29
29
|
gem.add_runtime_dependency 'rack'
|
30
30
|
gem.add_runtime_dependency 'redcarpet', '~>3.1'
|
31
|
-
gem.add_runtime_dependency 'pact', '~>1.3'
|
31
|
+
gem.add_runtime_dependency 'pact', '~>1.3', '>=1.3.2'
|
32
32
|
gem.add_runtime_dependency 'padrino', '~>0.12'
|
33
33
|
gem.add_runtime_dependency 'haml'
|
34
34
|
|
@@ -43,7 +43,7 @@ h1, h2, h3, h4, h5, h6 {
|
|
43
43
|
font-weight: bold;
|
44
44
|
-webkit-font-smoothing: antialiased;
|
45
45
|
cursor: text;
|
46
|
-
position: relative;
|
46
|
+
/* position: relative; Beth: this makes the View In HAL Browser link unclickable */
|
47
47
|
}
|
48
48
|
|
49
49
|
h2:first-child, h1:first-child, h1:first-child + h2, h3:first-child, h4:first-child, h5:first-child, h6:first-child {
|
@@ -41,6 +41,16 @@ module PactBroker
|
|
41
41
|
it "includes a link to the webhooks for this pact" do
|
42
42
|
expect(subject[:_links][:'pact-webhooks'][:href]).to eq "http://example.org/webhooks/provider/Provider/consumer/Consumer"
|
43
43
|
end
|
44
|
+
|
45
|
+
it "includes a link to the latest pact" do
|
46
|
+
expect(subject[:_links][:'latest-pact'][:title]).to eq "Latest version of the pact between Consumer and Provider"
|
47
|
+
expect(subject[:_links][:'latest-pact'][:href]).to eq "http://example.org/pacts/provider/Provider/consumer/Consumer/latest"
|
48
|
+
end
|
49
|
+
|
50
|
+
it "includes a link to the pact versions" do
|
51
|
+
expect(subject[:_links][:'pact-versions'][:title]).to eq "All versions of the pact between Consumer and Provider"
|
52
|
+
expect(subject[:_links][:'pact-versions'][:href]).to eq "http://example.org/pacts/provider/Provider/consumer/Consumer/versions"
|
53
|
+
end
|
44
54
|
end
|
45
55
|
|
46
56
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'pact_broker/api/decorators/pact_version_decorator'
|
3
|
+
|
4
|
+
module PactBroker
|
5
|
+
|
6
|
+
module Api
|
7
|
+
|
8
|
+
module Decorators
|
9
|
+
|
10
|
+
describe PactVersionDecorator do
|
11
|
+
|
12
|
+
let(:json_content) {
|
13
|
+
{
|
14
|
+
'consumer' => {'name' => 'Consumer'},
|
15
|
+
'provider' => {'name' => 'Provider'},
|
16
|
+
'interactions' => [],
|
17
|
+
'metadata' => {}
|
18
|
+
}.to_json
|
19
|
+
}
|
20
|
+
|
21
|
+
let(:base_url) { 'http://example.org' }
|
22
|
+
let(:created_at) { Time.new(2014, 3, 4) }
|
23
|
+
let(:updated_at) { Time.new(2014, 3, 5) }
|
24
|
+
let(:pact) { double('pact', json_content: json_content, created_at: created_at, updated_at: updated_at, consumer: consumer, provider: provider, consumer_version: consumer_version, name: 'pact_name')}
|
25
|
+
let(:consumer) { instance_double(PactBroker::Models::Pacticipant, name: 'Consumer')}
|
26
|
+
let(:provider) { instance_double(PactBroker::Models::Pacticipant, name: 'Provider')}
|
27
|
+
let(:consumer_version) { instance_double(PactBroker::Models::Version, number: '1234', pacticipant: consumer)}
|
28
|
+
let(:decorator_context) { DecoratorContext.new(base_url, '') }
|
29
|
+
|
30
|
+
let(:json) { PactVersionDecorator.new(pact).to_json(decorator_context) }
|
31
|
+
|
32
|
+
subject { JSON.parse(json, symbolize_names: true) }
|
33
|
+
|
34
|
+
it "includes a link to the pact" do
|
35
|
+
expect(subject[:_links][:self][:href]).to eq 'http://example.org/pacts/provider/Provider/consumer/Consumer/version/1234'
|
36
|
+
end
|
37
|
+
|
38
|
+
it "includes the consumer version number" do
|
39
|
+
expect(subject[:_embedded][:consumerVersion][:number]).to eq "1234"
|
40
|
+
end
|
41
|
+
|
42
|
+
it "includes a link to the version" do
|
43
|
+
expect(subject[:_embedded][:consumerVersion][:_links][:self][:href]).to eq "http://example.org/pacticipants/Consumer/versions/1234"
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -6,9 +6,17 @@ module PactBroker
|
|
6
6
|
module Renderers
|
7
7
|
describe HtmlPactRenderer do
|
8
8
|
|
9
|
+
let(:consumer) { double('consumer', name: 'Consumer')}
|
10
|
+
let(:created_at) { DateTime.now }
|
9
11
|
let(:json_content) { load_fixture('renderer_pact.json') }
|
12
|
+
let(:pact) { double('pact', json_content: json_content, updated_at: created_at, consumer_version_number: '1.2.3', consumer: consumer)}
|
13
|
+
let(:pact_url) { '/pact/url' }
|
10
14
|
|
11
|
-
|
15
|
+
before do
|
16
|
+
allow(PactBroker::Api::PactBrokerUrls).to receive(:pact_url).with('', pact).and_return(pact_url)
|
17
|
+
end
|
18
|
+
|
19
|
+
subject { HtmlPactRenderer.call pact }
|
12
20
|
|
13
21
|
describe ".call" do
|
14
22
|
it "renders the pact as HTML" do
|