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.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +21 -0
  3. data/README.md +76 -17
  4. data/db/migrations/16_add_pact_content_foreign_key_to_pacts.rb +6 -0
  5. data/db/migrations/migration_helper.rb +11 -1
  6. data/example/Gemfile +1 -1
  7. data/example/pact_broker_database.sqlite3 +0 -0
  8. data/lib/db.rb +1 -0
  9. data/lib/pact_broker/api.rb +11 -2
  10. data/lib/pact_broker/api/decorators.rb +1 -1
  11. data/lib/pact_broker/api/decorators/base_decorator.rb +3 -3
  12. data/lib/pact_broker/api/decorators/basic_pacticipant_decorator.rb +0 -1
  13. data/lib/pact_broker/api/decorators/embedded_tag_decorator.rb +26 -0
  14. data/lib/pact_broker/api/decorators/embedded_version_decorator.rb +20 -0
  15. data/lib/pact_broker/api/decorators/pact_collection_decorator.rb +9 -3
  16. data/lib/pact_broker/api/decorators/pact_decorator.rb +70 -6
  17. data/lib/pact_broker/api/decorators/pact_pacticipant_decorator.rb +2 -2
  18. data/lib/pact_broker/api/decorators/pacticipant_collection_decorator.rb +4 -28
  19. data/lib/pact_broker/api/decorators/pacticipant_decorator.rb +2 -2
  20. data/lib/pact_broker/api/decorators/representable_pact.rb +4 -1
  21. data/lib/pact_broker/api/decorators/tag_decorator.rb +24 -1
  22. data/lib/pact_broker/api/decorators/timestamps.rb +2 -2
  23. data/lib/pact_broker/api/decorators/version_decorator.rb +27 -3
  24. data/lib/pact_broker/api/decorators/webhooks_decorator.rb +1 -1
  25. data/lib/pact_broker/api/pact_broker_urls.rb +10 -3
  26. data/lib/pact_broker/api/resources/index.rb +5 -5
  27. data/lib/pact_broker/api/resources/pact_content_diff.rb +40 -0
  28. data/lib/pact_broker/api/resources/previous_distinct_pact_version.rb +39 -0
  29. data/lib/pact_broker/api/resources/version.rb +36 -0
  30. data/lib/pact_broker/app.rb +2 -2
  31. data/lib/pact_broker/date_helper.rb +93 -0
  32. data/lib/pact_broker/doc/controllers/app.rb +1 -1
  33. data/lib/pact_broker/doc/views/consumer.markdown +7 -0
  34. data/lib/pact_broker/doc/views/diff-previous-distinct.markdown +5 -0
  35. data/lib/pact_broker/doc/views/latest-pact-version.markdown +7 -0
  36. data/lib/pact_broker/doc/views/latest-pact-versions.markdown +5 -0
  37. data/lib/pact_broker/doc/views/pact-versions.markdown +3 -0
  38. data/lib/pact_broker/doc/views/pact-webhooks.markdown +50 -0
  39. data/lib/pact_broker/doc/views/pacticipants.markdown +2 -0
  40. data/lib/pact_broker/doc/views/provider.markdown +7 -0
  41. data/lib/pact_broker/doc/views/tag-prod-version.markdown +7 -0
  42. data/lib/pact_broker/doc/views/tag-version.markdown +4 -0
  43. data/lib/pact_broker/doc/views/webhooks.markdown +2 -0
  44. data/lib/pact_broker/domain/pact.rb +6 -1
  45. data/lib/pact_broker/domain/tag.rb +0 -1
  46. data/lib/pact_broker/locale/en.yml +37 -1
  47. data/lib/pact_broker/pacts/all_pacts.rb +8 -0
  48. data/lib/pact_broker/pacts/create_formatted_diff.rb +20 -0
  49. data/lib/pact_broker/pacts/diff.rb +105 -0
  50. data/lib/pact_broker/pacts/repository.rb +43 -7
  51. data/lib/pact_broker/repositories/version_repository.rb +1 -0
  52. data/lib/pact_broker/services.rb +6 -1
  53. data/lib/pact_broker/services/pact_service.rb +6 -0
  54. data/lib/pact_broker/services/version_service.rb +2 -2
  55. data/lib/pact_broker/ui.rb +8 -3
  56. data/lib/pact_broker/ui/app.rb +2 -1
  57. data/lib/pact_broker/ui/controllers/base_controller.rb +1 -1
  58. data/lib/pact_broker/ui/controllers/clusters.rb +1 -1
  59. data/lib/pact_broker/ui/views/relationships/show.haml +11 -4
  60. data/lib/pact_broker/version.rb +1 -1
  61. data/pact_broker.gemspec +6 -4
  62. data/public/images/doc-text.svg +1 -0
  63. data/public/stylesheets/relationships.css +43 -1
  64. data/script/publish-2.sh +3 -0
  65. data/script/publish.sh +3 -0
  66. data/spec/features/delete_pact_spec.rb +1 -1
  67. data/spec/features/get_diff.rb +52 -0
  68. data/spec/features/get_previous_distinct_version.rb +51 -0
  69. data/spec/features/get_version.rb +45 -0
  70. data/spec/features/publish_pact_spec.rb +1 -1
  71. data/spec/fixtures/a_consumer-a_provider-2.json +22 -0
  72. data/spec/fixtures/a_consumer-a_provider.json +22 -0
  73. data/spec/fixtures/consumer-provider.json +4 -3
  74. data/spec/integration/app_spec.rb +6 -1
  75. data/spec/lib/pact_broker/api/decorators/embedded_tag_decorator_spec.rb +40 -0
  76. data/spec/lib/pact_broker/api/decorators/embedded_version_decorator_spec.rb +39 -0
  77. data/spec/lib/pact_broker/api/decorators/pact_decorator_spec.rb +52 -10
  78. data/spec/lib/pact_broker/api/decorators/pact_version_decorator_spec.rb +9 -1
  79. data/spec/lib/pact_broker/api/decorators/pacticipant_collection_decorator_spec.rb +36 -0
  80. data/spec/lib/pact_broker/api/decorators/tag_decorator_spec.rb +57 -0
  81. data/spec/lib/pact_broker/api/decorators/version_decorator_spec.rb +49 -0
  82. data/spec/lib/pact_broker/api/decorators/webhooks_decorator_spec.rb +2 -2
  83. data/spec/lib/pact_broker/pacts/create_formatted_diff_spec.rb +33 -0
  84. data/spec/lib/pact_broker/pacts/diff_spec.rb +72 -0
  85. data/spec/lib/pact_broker/pacts/pact_params_spec.rb +2 -2
  86. data/spec/lib/pact_broker/pacts/repository_spec.rb +90 -0
  87. data/spec/lib/pact_broker/repositories/version_repository_spec.rb +10 -2
  88. data/spec/lib/pact_broker/ui/controllers/relationships_spec.rb +1 -1
  89. data/vendor/hal-browser/README.md +6 -0
  90. data/vendor/hal-browser/browser.html +5 -3
  91. data/vendor/hal-browser/js/hal.js +3 -0
  92. data/vendor/hal-browser/js/hal/resource.js +1 -0
  93. data/vendor/hal-browser/js/hal/views/embedded_resource.js +1 -0
  94. data/vendor/hal-browser/js/hal/views/query_uri_dialog.js +12 -2
  95. data/vendor/hal-browser/js/hal/views/resource.js +6 -1
  96. data/vendor/hal-browser/styles.css +10 -0
  97. data/vendor/hal-browser/vendor/js/{jquery-1.9.1.js → jquery-1.10.2.js} +4394 -4202
  98. data/vendor/hal-browser/vendor/js/jquery-1.10.2.min.js +6 -0
  99. data/vendor/hal-browser/vendor/js/jquery-1.10.2.min.map +1 -0
  100. metadata +90 -18
  101. data/db/migrations/15_add_value_to_tag.rb.wip +0 -5
  102. data/lib/pact_broker/doc/views/latest-pacts.markdown +0 -3
@@ -1,14 +1,15 @@
1
1
  {
2
2
  "consumer": {
3
- "name": "A Consumer"
3
+ "name": "Consumer"
4
4
  },
5
5
  "provider": {
6
- "name": "A Provider"
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 'Relationships'
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 "&lt;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', json_content: json_content, created_at: created_at, updated_at: updated_at, consumer: consumer, provider: provider, consumer_version: consumer_version)}
25
- let(:consumer) { instance_double(PactBroker::Domain::Pacticipant, name: 'Consumer')}
26
- let(:provider) { instance_double(PactBroker::Domain::Pacticipant, name: 'Provider')}
27
- let(:consumer_version) { instance_double(PactBroker::Domain::Version, number: '1234')}
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/Provider/consumer/Consumer"
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 "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"
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 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"
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', json_content: json_content, created_at: created_at, updated_at: updated_at, consumer: consumer, provider: provider, consumer_version: consumer_version, name: 'pact_name')}
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][:'pb:self'][:href]).to eq resource_url
29
- expect(subject[:_links][:'pb:self'][:title]).to eq 'Title'
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