pact_broker 1.3.2.rc1 → 1.4.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 +21 -0
- data/README.md +76 -17
- data/db/migrations/16_add_pact_content_foreign_key_to_pacts.rb +6 -0
- data/db/migrations/migration_helper.rb +11 -1
- data/example/Gemfile +1 -1
- data/example/pact_broker_database.sqlite3 +0 -0
- data/lib/db.rb +1 -0
- data/lib/pact_broker/api.rb +11 -2
- data/lib/pact_broker/api/decorators.rb +1 -1
- data/lib/pact_broker/api/decorators/base_decorator.rb +3 -3
- data/lib/pact_broker/api/decorators/basic_pacticipant_decorator.rb +0 -1
- data/lib/pact_broker/api/decorators/embedded_tag_decorator.rb +26 -0
- data/lib/pact_broker/api/decorators/embedded_version_decorator.rb +20 -0
- data/lib/pact_broker/api/decorators/pact_collection_decorator.rb +9 -3
- data/lib/pact_broker/api/decorators/pact_decorator.rb +70 -6
- data/lib/pact_broker/api/decorators/pact_pacticipant_decorator.rb +2 -2
- data/lib/pact_broker/api/decorators/pacticipant_collection_decorator.rb +4 -28
- data/lib/pact_broker/api/decorators/pacticipant_decorator.rb +2 -2
- data/lib/pact_broker/api/decorators/representable_pact.rb +4 -1
- data/lib/pact_broker/api/decorators/tag_decorator.rb +24 -1
- data/lib/pact_broker/api/decorators/timestamps.rb +2 -2
- data/lib/pact_broker/api/decorators/version_decorator.rb +27 -3
- data/lib/pact_broker/api/decorators/webhooks_decorator.rb +1 -1
- data/lib/pact_broker/api/pact_broker_urls.rb +10 -3
- data/lib/pact_broker/api/resources/index.rb +5 -5
- data/lib/pact_broker/api/resources/pact_content_diff.rb +40 -0
- data/lib/pact_broker/api/resources/previous_distinct_pact_version.rb +39 -0
- data/lib/pact_broker/api/resources/version.rb +36 -0
- data/lib/pact_broker/app.rb +2 -2
- data/lib/pact_broker/date_helper.rb +93 -0
- data/lib/pact_broker/doc/controllers/app.rb +1 -1
- data/lib/pact_broker/doc/views/consumer.markdown +7 -0
- data/lib/pact_broker/doc/views/diff-previous-distinct.markdown +5 -0
- data/lib/pact_broker/doc/views/latest-pact-version.markdown +7 -0
- data/lib/pact_broker/doc/views/latest-pact-versions.markdown +5 -0
- data/lib/pact_broker/doc/views/pact-versions.markdown +3 -0
- data/lib/pact_broker/doc/views/pact-webhooks.markdown +50 -0
- data/lib/pact_broker/doc/views/pacticipants.markdown +2 -0
- data/lib/pact_broker/doc/views/provider.markdown +7 -0
- data/lib/pact_broker/doc/views/tag-prod-version.markdown +7 -0
- data/lib/pact_broker/doc/views/tag-version.markdown +4 -0
- data/lib/pact_broker/doc/views/webhooks.markdown +2 -0
- data/lib/pact_broker/domain/pact.rb +6 -1
- data/lib/pact_broker/domain/tag.rb +0 -1
- data/lib/pact_broker/locale/en.yml +37 -1
- data/lib/pact_broker/pacts/all_pacts.rb +8 -0
- data/lib/pact_broker/pacts/create_formatted_diff.rb +20 -0
- data/lib/pact_broker/pacts/diff.rb +105 -0
- data/lib/pact_broker/pacts/repository.rb +43 -7
- data/lib/pact_broker/repositories/version_repository.rb +1 -0
- data/lib/pact_broker/services.rb +6 -1
- data/lib/pact_broker/services/pact_service.rb +6 -0
- data/lib/pact_broker/services/version_service.rb +2 -2
- data/lib/pact_broker/ui.rb +8 -3
- data/lib/pact_broker/ui/app.rb +2 -1
- data/lib/pact_broker/ui/controllers/base_controller.rb +1 -1
- data/lib/pact_broker/ui/controllers/clusters.rb +1 -1
- data/lib/pact_broker/ui/views/relationships/show.haml +11 -4
- data/lib/pact_broker/version.rb +1 -1
- data/pact_broker.gemspec +6 -4
- data/public/images/doc-text.svg +1 -0
- data/public/stylesheets/relationships.css +43 -1
- data/script/publish-2.sh +3 -0
- data/script/publish.sh +3 -0
- data/spec/features/delete_pact_spec.rb +1 -1
- data/spec/features/get_diff.rb +52 -0
- data/spec/features/get_previous_distinct_version.rb +51 -0
- data/spec/features/get_version.rb +45 -0
- data/spec/features/publish_pact_spec.rb +1 -1
- data/spec/fixtures/a_consumer-a_provider-2.json +22 -0
- data/spec/fixtures/a_consumer-a_provider.json +22 -0
- data/spec/fixtures/consumer-provider.json +4 -3
- data/spec/integration/app_spec.rb +6 -1
- data/spec/lib/pact_broker/api/decorators/embedded_tag_decorator_spec.rb +40 -0
- data/spec/lib/pact_broker/api/decorators/embedded_version_decorator_spec.rb +39 -0
- data/spec/lib/pact_broker/api/decorators/pact_decorator_spec.rb +52 -10
- data/spec/lib/pact_broker/api/decorators/pact_version_decorator_spec.rb +9 -1
- data/spec/lib/pact_broker/api/decorators/pacticipant_collection_decorator_spec.rb +36 -0
- data/spec/lib/pact_broker/api/decorators/tag_decorator_spec.rb +57 -0
- data/spec/lib/pact_broker/api/decorators/version_decorator_spec.rb +49 -0
- data/spec/lib/pact_broker/api/decorators/webhooks_decorator_spec.rb +2 -2
- data/spec/lib/pact_broker/pacts/create_formatted_diff_spec.rb +33 -0
- data/spec/lib/pact_broker/pacts/diff_spec.rb +72 -0
- data/spec/lib/pact_broker/pacts/pact_params_spec.rb +2 -2
- data/spec/lib/pact_broker/pacts/repository_spec.rb +90 -0
- data/spec/lib/pact_broker/repositories/version_repository_spec.rb +10 -2
- data/spec/lib/pact_broker/ui/controllers/relationships_spec.rb +1 -1
- data/vendor/hal-browser/README.md +6 -0
- data/vendor/hal-browser/browser.html +5 -3
- data/vendor/hal-browser/js/hal.js +3 -0
- data/vendor/hal-browser/js/hal/resource.js +1 -0
- data/vendor/hal-browser/js/hal/views/embedded_resource.js +1 -0
- data/vendor/hal-browser/js/hal/views/query_uri_dialog.js +12 -2
- data/vendor/hal-browser/js/hal/views/resource.js +6 -1
- data/vendor/hal-browser/styles.css +10 -0
- data/vendor/hal-browser/vendor/js/{jquery-1.9.1.js → jquery-1.10.2.js} +4394 -4202
- data/vendor/hal-browser/vendor/js/jquery-1.10.2.min.js +6 -0
- data/vendor/hal-browser/vendor/js/jquery-1.10.2.min.map +1 -0
- metadata +90 -18
- data/db/migrations/15_add_value_to_tag.rb.wip +0 -5
- data/lib/pact_broker/doc/views/latest-pacts.markdown +0 -3
@@ -1,14 +1,15 @@
|
|
1
1
|
{
|
2
2
|
"consumer": {
|
3
|
-
"name": "
|
3
|
+
"name": "Consumer"
|
4
4
|
},
|
5
5
|
"provider": {
|
6
|
-
"name": "
|
6
|
+
"name": "Provider"
|
7
7
|
},
|
8
8
|
"interactions": [
|
9
9
|
{
|
10
|
+
"description" : "a request for something",
|
11
|
+
"provider_state": null,
|
10
12
|
"request": {
|
11
|
-
"description" : "a request for something",
|
12
13
|
"method": "get",
|
13
14
|
"path" : "/something"
|
14
15
|
},
|
@@ -43,7 +43,7 @@ module PactBroker
|
|
43
43
|
it "returns the relationships page" do
|
44
44
|
expect(subject.status).to eq 200
|
45
45
|
expect(subject.headers['Content-Type']).to include 'text/html'
|
46
|
-
expect(subject.body).to include '
|
46
|
+
expect(subject.body).to include 'Pacts'
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
@@ -56,6 +56,11 @@ module PactBroker
|
|
56
56
|
expect(subject.body).to include 'Network graph'
|
57
57
|
expect(subject.body).to include 'Some Consumer'
|
58
58
|
end
|
59
|
+
|
60
|
+
it "does not screw up the HTML escaping, haven't you heard of semantic versioning padrino?? Seriously." do
|
61
|
+
expect(subject.body).to include "<html"
|
62
|
+
expect(subject.body).to_not include "<html"
|
63
|
+
end
|
59
64
|
end
|
60
65
|
|
61
66
|
describe "a request for /doc/:rel_name" do
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'pact_broker/api/decorators/embedded_tag_decorator'
|
2
|
+
require 'pact_broker/repositories/tag_repository'
|
3
|
+
require 'support/provider_state_builder'
|
4
|
+
|
5
|
+
module PactBroker
|
6
|
+
|
7
|
+
module Api
|
8
|
+
|
9
|
+
module Decorators
|
10
|
+
|
11
|
+
describe EmbeddedTagDecorator do
|
12
|
+
|
13
|
+
let(:tag) do
|
14
|
+
ProviderStateBuilder.new
|
15
|
+
.create_consumer("Consumer")
|
16
|
+
.create_version("1.2.3")
|
17
|
+
.create_tag("prod")
|
18
|
+
PactBroker::Repositories::TagRepository.new.find tag_name: 'prod', pacticipant_version_number: '1.2.3', pacticipant_name: 'Consumer'
|
19
|
+
end
|
20
|
+
|
21
|
+
let(:options) { {base_url: 'http://example.org' }}
|
22
|
+
|
23
|
+
subject { JSON.parse TagDecorator.new(tag).to_json(options), symbolize_names: true }
|
24
|
+
|
25
|
+
it "includes the tag name" do
|
26
|
+
expect(subject[:name]).to eq "prod"
|
27
|
+
end
|
28
|
+
|
29
|
+
it "includes a link to itself" do
|
30
|
+
expect(subject[:_links][:self][:href]).to eq "http://example.org/pacticipants/Consumer/versions/1.2.3/tags/prod"
|
31
|
+
end
|
32
|
+
|
33
|
+
it "includes the tag name" do
|
34
|
+
expect(subject[:_links][:self][:name]).to eq "prod"
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'pact_broker/api/decorators/embedded_version_decorator'
|
3
|
+
|
4
|
+
module PactBroker
|
5
|
+
module Api
|
6
|
+
module Decorators
|
7
|
+
describe EmbeddedVersionDecorator do
|
8
|
+
|
9
|
+
let(:version) do
|
10
|
+
ProviderStateBuilder.new
|
11
|
+
.create_consumer("Consumer")
|
12
|
+
.create_version("1.2.3")
|
13
|
+
PactBroker::Repositories::VersionRepository.new.find_by_pacticipant_name_and_number "Consumer", "1.2.3"
|
14
|
+
end
|
15
|
+
|
16
|
+
let(:options) { {base_url: 'http://example.org' }}
|
17
|
+
|
18
|
+
subject { JSON.parse EmbeddedVersionDecorator.new(version).to_json(options), symbolize_names: true }
|
19
|
+
|
20
|
+
it "includes a link to itself" do
|
21
|
+
expect(subject[:_links][:self][:href]).to eq "http://example.org/pacticipants/Consumer/versions/1.2.3"
|
22
|
+
end
|
23
|
+
|
24
|
+
xit "includes the version number in the link" do
|
25
|
+
expect(subject[:_links][:self][:name]).to eq "1.2.3"
|
26
|
+
end
|
27
|
+
|
28
|
+
xit "includes its title in the link" do
|
29
|
+
expect(subject[:_links][:self][:title]).to eq "Version"
|
30
|
+
end
|
31
|
+
|
32
|
+
it "includes the version number" do
|
33
|
+
expect(subject[:number]).to eq "1.2.3"
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -21,10 +21,19 @@ module PactBroker
|
|
21
21
|
let(:base_url) { 'http://example.org' }
|
22
22
|
let(:created_at) { Time.new(2014, 3, 4) }
|
23
23
|
let(:updated_at) { Time.new(2014, 3, 5) }
|
24
|
-
let(:pact) { double('pact',
|
25
|
-
|
26
|
-
|
27
|
-
|
24
|
+
let(:pact) { double('pact',
|
25
|
+
json_content: json_content,
|
26
|
+
created_at: created_at,
|
27
|
+
updated_at: updated_at,
|
28
|
+
consumer: consumer,
|
29
|
+
provider: provider,
|
30
|
+
consumer_version: consumer_version,
|
31
|
+
consumer_version_number: '1234',
|
32
|
+
name: 'A Pact'
|
33
|
+
)}
|
34
|
+
let(:consumer) { instance_double(PactBroker::Domain::Pacticipant, name: 'A Consumer')}
|
35
|
+
let(:provider) { instance_double(PactBroker::Domain::Pacticipant, name: 'A Provider')}
|
36
|
+
let(:consumer_version) { instance_double(PactBroker::Domain::Version, number: '1234', pacticipant: consumer)}
|
28
37
|
|
29
38
|
subject { JSON.parse PactDecorator.new(pact).to_json(base_url: base_url), symbolize_names: true}
|
30
39
|
|
@@ -38,18 +47,51 @@ module PactBroker
|
|
38
47
|
expect(subject[:createdAt]).to eq created_at.xmlschema
|
39
48
|
end
|
40
49
|
|
50
|
+
it "includes a link to itself" do
|
51
|
+
expect(subject[:_links][:self]).to eq href: 'http://example.org/pacts/provider/A%20Provider/consumer/A%20Consumer/version/1234', name: 'A Pact', title: 'Pact'
|
52
|
+
end
|
53
|
+
|
54
|
+
it "includes a link to the diff with the previous distinct version" do
|
55
|
+
expect(subject[:_links][:'pb:diff-previous-distinct']).to eq({href: 'http://example.org/pacts/provider/A%20Provider/consumer/A%20Consumer/version/1234/diff/previous-distinct',
|
56
|
+
title: 'Diff',
|
57
|
+
name: 'Diff with previous distinct version of this pact'})
|
58
|
+
end
|
59
|
+
|
60
|
+
it "includes a link to the previous distinct pact version" do
|
61
|
+
expect(subject[:_links][:'pb:previous-distinct']).to eq({href: 'http://example.org/pacts/provider/A%20Provider/consumer/A%20Consumer/version/1234/previous-distinct',
|
62
|
+
title: 'Pact',
|
63
|
+
name: 'Previous distinct version of this pact'})
|
64
|
+
end
|
65
|
+
|
66
|
+
it "includes a link to tag this version" do
|
67
|
+
expect(subject[:_links][:'pb:tag-version'][:href]).to eq "http://example.org/pacticipants/A%20Consumer/versions/1234/tags/{tag}"
|
68
|
+
end
|
69
|
+
|
70
|
+
it "includes a link to the consumer" do
|
71
|
+
expect(subject[:_links][:'pb:consumer']).to eq name: 'A Consumer', title: 'Consumer', href: "http://example.org/pacticipants/A%20Consumer"
|
72
|
+
end
|
73
|
+
|
74
|
+
it "includes a link to the provider" do
|
75
|
+
expect(subject[:_links][:'pb:provider']).to eq name: 'A Provider', title: 'Provider', href: "http://example.org/pacticipants/A%20Provider"
|
76
|
+
end
|
77
|
+
|
41
78
|
it "includes a link to the webhooks for this pact" do
|
42
|
-
expect(subject[:_links][:'pact-webhooks'][:href]).to eq "http://example.org/webhooks/provider/
|
79
|
+
expect(subject[:_links][:'pb:pact-webhooks'][:href]).to eq "http://example.org/webhooks/provider/A%20Provider/consumer/A%20Consumer"
|
43
80
|
end
|
44
81
|
|
45
82
|
it "includes a link to the latest pact" do
|
46
|
-
expect(subject[:_links][:'latest-pact'][:title]).to eq "
|
47
|
-
expect(subject[:_links][:'latest-pact'][:
|
83
|
+
expect(subject[:_links][:'pb:latest-pact-version'][:title]).to eq "Pact"
|
84
|
+
expect(subject[:_links][:'pb:latest-pact-version'][:name]).to eq "Latest version of this pact"
|
85
|
+
expect(subject[:_links][:'pb:latest-pact-version'][:href]).to eq "http://example.org/pacts/provider/A%20Provider/consumer/A%20Consumer/latest"
|
86
|
+
end
|
87
|
+
|
88
|
+
xit "includes a link to the pact versions" do
|
89
|
+
expect(subject[:_links][:'pb:pact-versions'][:title]).to eq "All versions of the pact between A Consumer and A Provider"
|
90
|
+
expect(subject[:_links][:'pb:pact-versions'][:href]).to eq "http://example.org/pacts/provider/A%20Provider/consumer/A%20Consumer/versions"
|
48
91
|
end
|
49
92
|
|
50
|
-
it "includes a
|
51
|
-
expect(subject[:_links][:
|
52
|
-
expect(subject[:_links][:'pact-versions'][:href]).to eq "http://example.org/pacts/provider/Provider/consumer/Consumer/versions"
|
93
|
+
it "includes a curie" do
|
94
|
+
expect(subject[:_links][:curies]).to eq [{ name: "pb", href: "http://example.org/doc/{rel}", templated: true }]
|
53
95
|
end
|
54
96
|
end
|
55
97
|
|
@@ -21,7 +21,15 @@ module PactBroker
|
|
21
21
|
let(:base_url) { 'http://example.org' }
|
22
22
|
let(:created_at) { Time.new(2014, 3, 4) }
|
23
23
|
let(:updated_at) { Time.new(2014, 3, 5) }
|
24
|
-
let(:pact) { double('pact',
|
24
|
+
let(:pact) { double('pact',
|
25
|
+
json_content: json_content,
|
26
|
+
created_at: created_at,
|
27
|
+
updated_at: updated_at,
|
28
|
+
consumer: consumer,
|
29
|
+
provider: provider,
|
30
|
+
consumer_version: consumer_version,
|
31
|
+
consumer_version_number: '1234',
|
32
|
+
name: 'pact_name')}
|
25
33
|
let(:consumer) { instance_double(PactBroker::Domain::Pacticipant, name: 'Consumer')}
|
26
34
|
let(:provider) { instance_double(PactBroker::Domain::Pacticipant, name: 'Provider')}
|
27
35
|
let(:consumer_version) { instance_double(PactBroker::Domain::Version, number: '1234', pacticipant: consumer)}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'pact_broker/api/decorators/pacticipant_collection_decorator'
|
3
|
+
require 'pact_broker/domain/pacticipant'
|
4
|
+
|
5
|
+
module PactBroker
|
6
|
+
|
7
|
+
module Api
|
8
|
+
|
9
|
+
module Decorators
|
10
|
+
|
11
|
+
describe PacticipantCollectionRepresenter do
|
12
|
+
|
13
|
+
subject { JSON.parse PacticipantCollectionRepresenter.new(pacticipants).to_json, symbolize_names: true }
|
14
|
+
|
15
|
+
context "with no pacticipants" do
|
16
|
+
let(:pacticipants) { [] }
|
17
|
+
|
18
|
+
it "doesn't blow up" do
|
19
|
+
subject
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "with pacticipants" do
|
24
|
+
let(:pacticipant) { PactBroker::Domain::Pacticipant.new(name: 'Name', created_at: DateTime.new, updated_at: DateTime.new)}
|
25
|
+
let(:pacticipants) { [pacticipant] }
|
26
|
+
|
27
|
+
it "displays a list of pacticipants" do
|
28
|
+
expect(subject[:pacticipants]).to be_instance_of(Array)
|
29
|
+
expect(subject[:pacticipants].size).to eq 1
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'pact_broker/api/decorators/tag_decorator'
|
2
|
+
require 'pact_broker/repositories/tag_repository'
|
3
|
+
|
4
|
+
require 'support/provider_state_builder'
|
5
|
+
|
6
|
+
module PactBroker
|
7
|
+
|
8
|
+
module Api
|
9
|
+
|
10
|
+
module Decorators
|
11
|
+
|
12
|
+
describe TagDecorator do
|
13
|
+
|
14
|
+
let(:tag) do
|
15
|
+
ProviderStateBuilder.new
|
16
|
+
.create_consumer("Consumer")
|
17
|
+
.create_version("1.2.3")
|
18
|
+
.create_tag("prod")
|
19
|
+
PactBroker::Repositories::TagRepository.new.find tag_name: 'prod', pacticipant_version_number: '1.2.3', pacticipant_name: 'Consumer'
|
20
|
+
end
|
21
|
+
|
22
|
+
let(:options) { {base_url: 'http://example.org' }}
|
23
|
+
|
24
|
+
subject { JSON.parse TagDecorator.new(tag).to_json(options), symbolize_names: true }
|
25
|
+
|
26
|
+
it "includes the tag name" do
|
27
|
+
expect(subject[:name]).to eq "prod"
|
28
|
+
end
|
29
|
+
|
30
|
+
it "includes a link to itself" do
|
31
|
+
expect(subject[:_links][:self][:href]).to eq "http://example.org/pacticipants/Consumer/versions/1.2.3/tags/prod"
|
32
|
+
end
|
33
|
+
|
34
|
+
it "includes the tag name" do
|
35
|
+
expect(subject[:_links][:self][:name]).to eq "prod"
|
36
|
+
end
|
37
|
+
|
38
|
+
it "includes a link to the version" do
|
39
|
+
expect(subject[:_links][:version][:href]).to eq "http://example.org/pacticipants/Consumer/versions/1.2.3"
|
40
|
+
end
|
41
|
+
|
42
|
+
it "includes the version number" do
|
43
|
+
expect(subject[:_links][:version][:name]).to eq "1.2.3"
|
44
|
+
end
|
45
|
+
|
46
|
+
it "includes a link to the pacticipant" do
|
47
|
+
expect(subject[:_links][:pacticipant][:href]).to eq "http://example.org/pacticipants/Consumer"
|
48
|
+
end
|
49
|
+
|
50
|
+
it "includes the pacticipant name" do
|
51
|
+
expect(subject[:_links][:pacticipant][:name]).to eq "Consumer"
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'pact_broker/api/decorators/version_decorator'
|
3
|
+
|
4
|
+
module PactBroker
|
5
|
+
module Api
|
6
|
+
module Decorators
|
7
|
+
describe VersionDecorator do
|
8
|
+
|
9
|
+
let(:version) do
|
10
|
+
ProviderStateBuilder.new
|
11
|
+
.create_consumer("Consumer")
|
12
|
+
.create_consumer_version("1.2.3")
|
13
|
+
.create_consumer_version_tag("prod")
|
14
|
+
PactBroker::Repositories::VersionRepository.new.find_by_pacticipant_name_and_number "Consumer", "1.2.3"
|
15
|
+
end
|
16
|
+
|
17
|
+
let(:options) { {base_url: 'http://example.org' }}
|
18
|
+
|
19
|
+
subject { JSON.parse VersionDecorator.new(version).to_json(options), symbolize_names: true }
|
20
|
+
|
21
|
+
it "includes a link to itself" do
|
22
|
+
expect(subject[:_links][:self][:href]).to eq "http://example.org/pacticipants/Consumer/versions/1.2.3"
|
23
|
+
end
|
24
|
+
|
25
|
+
it "includes the version number in the link" do
|
26
|
+
expect(subject[:_links][:self][:name]).to eq "1.2.3"
|
27
|
+
end
|
28
|
+
|
29
|
+
it "includes its title in the link" do
|
30
|
+
expect(subject[:_links][:self][:title]).to eq "Version"
|
31
|
+
end
|
32
|
+
|
33
|
+
it "includes the version number" do
|
34
|
+
expect(subject[:number]).to eq "1.2.3"
|
35
|
+
end
|
36
|
+
|
37
|
+
it "includes a link to the pacticipant" do
|
38
|
+
expect(subject[:_links][:pacticipant]).to eq title: "Pacticipant", name: "Consumer", href: "http://example.org/pacticipants/Consumer"
|
39
|
+
end
|
40
|
+
|
41
|
+
it "includes a list of the tags" do
|
42
|
+
expect(subject[:_embedded][:tags]).to be_instance_of(Array)
|
43
|
+
expect(subject[:_embedded][:tags].first[:name]).to eq "prod"
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -25,8 +25,8 @@ module PactBroker
|
|
25
25
|
subject { JSON.parse(json, symbolize_names: true) }
|
26
26
|
|
27
27
|
it "includes a link to itself with a title" do
|
28
|
-
expect(subject[:_links][:
|
29
|
-
expect(subject[:_links][:
|
28
|
+
expect(subject[:_links][:self][:href]).to eq resource_url
|
29
|
+
expect(subject[:_links][:self][:title]).to eq 'Title'
|
30
30
|
end
|
31
31
|
|
32
32
|
it "includes a list of links to the webhooks" do
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'pact_broker/pacts/create_formatted_diff'
|
3
|
+
require 'pact_broker/pacts/repository'
|
4
|
+
|
5
|
+
module PactBroker
|
6
|
+
module Pacts
|
7
|
+
describe CreateFormattedDiff do
|
8
|
+
|
9
|
+
describe ".call" do
|
10
|
+
|
11
|
+
let(:pact_content_version_1) do
|
12
|
+
hash = load_json_fixture('consumer-provider.json')
|
13
|
+
hash['interactions'].first['request']['method'] = 'post'
|
14
|
+
hash.to_json
|
15
|
+
end
|
16
|
+
|
17
|
+
let(:pact_content_version_2) { load_fixture('consumer-provider.json') }
|
18
|
+
|
19
|
+
subject { CreateFormattedDiff.call(pact_content_version_2, pact_content_version_1) }
|
20
|
+
|
21
|
+
it "returns the formatted diff" do
|
22
|
+
puts subject
|
23
|
+
expect(subject).to include 'interactions'
|
24
|
+
expect(subject).to match /\-.*post/
|
25
|
+
expect(subject).to match /\+.*get/
|
26
|
+
expect(subject).to_not include 'Key'
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'pact_broker/pacts/diff'
|
3
|
+
require 'pact_broker/pacts/pact_params'
|
4
|
+
|
5
|
+
module PactBroker
|
6
|
+
module Pacts
|
7
|
+
describe Diff do
|
8
|
+
|
9
|
+
describe "#process" do
|
10
|
+
|
11
|
+
let(:pact_content_version_1) do
|
12
|
+
hash = load_json_fixture('consumer-provider.json')
|
13
|
+
hash['interactions'].first['request']['method'] = 'post'
|
14
|
+
hash.to_json
|
15
|
+
end
|
16
|
+
let(:pact_content_version_2) { load_fixture('consumer-provider.json') }
|
17
|
+
let(:pact_content_version_3) { pact_content_version_2 }
|
18
|
+
|
19
|
+
before do
|
20
|
+
ProviderStateBuilder.new
|
21
|
+
.create_consumer("Consumer")
|
22
|
+
.create_provider("Provider")
|
23
|
+
.create_consumer_version("1")
|
24
|
+
.create_pact(pact_content_version_1)
|
25
|
+
.create_consumer_version("2")
|
26
|
+
.create_pact(pact_content_version_2)
|
27
|
+
.create_consumer_version("3")
|
28
|
+
.create_pact(pact_content_version_3)
|
29
|
+
allow(DateHelper).to receive(:local_date_in_words).and_return("a date")
|
30
|
+
end
|
31
|
+
|
32
|
+
subject { Diff.new.process(pact_params, base_url: 'http://example.org') }
|
33
|
+
|
34
|
+
context "when there is a previous distinct version" do
|
35
|
+
|
36
|
+
let(:pact_params) do
|
37
|
+
PactBroker::Pacts::PactParams.new(
|
38
|
+
consumer_name: 'Consumer',
|
39
|
+
provider_name: 'Provider',
|
40
|
+
consumer_version_number: '3'
|
41
|
+
)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "indicates when the previous change was made" do
|
45
|
+
expect(subject).to include "The following changes were made less than a minute ago (a date)"
|
46
|
+
end
|
47
|
+
|
48
|
+
it "returns the formatted diff" do
|
49
|
+
expect(subject).to include 'interactions'
|
50
|
+
expect(subject).to include 'post'
|
51
|
+
expect(subject).to include 'get'
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context "when there is not a previous distinct version (this needs to be moved into the resource)" do
|
56
|
+
let(:pact_params) do
|
57
|
+
PactBroker::Pacts::PactParams.new(
|
58
|
+
consumer_name: 'Consumer',
|
59
|
+
provider_name: 'Provider',
|
60
|
+
consumer_version_number: '1'
|
61
|
+
)
|
62
|
+
end
|
63
|
+
|
64
|
+
it "returns a message indicating there was no previous distinct version found" do
|
65
|
+
expect(subject).to include("No previous distinct version was found")
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|