pact_broker 2.4.0 → 2.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ccb2b3e09704513328cc45bb520d07bec978a711
4
- data.tar.gz: a98ed177a3db187c531c6f7a606a38c0382278b5
3
+ metadata.gz: 6a3d490394fcae01bbca8de110f64f32cd726bd0
4
+ data.tar.gz: 924597d9aee8cdcd23c2fc0cf3b04445f1923188
5
5
  SHA512:
6
- metadata.gz: 029ca439a15afebbcca133103d59a67ce4a359df4f57dfb4d9da5e0cf02b820d6eccbb93304d64f400216d455f7c3beac9b27fcd04318a5beb4960e66cf569a7
7
- data.tar.gz: 462f2d6f9a04dbe36916b94e0f2a52965c8f23234d901ea80280859e2f71c8695a2c1f7b484f763a633b1de873c9d9cec6b9ac93b08dab900f07d93f809c52db
6
+ metadata.gz: ef24406ac81f1990047cc42841dfd0ae2a0df5b2506386eaac087c946bb528208f632f9a8181eb47b5c056423eb7ecadf7e219911c13e007d14a1bfb4337cc2c
7
+ data.tar.gz: 9b6c513d799464f0a8de5b58a02c1bc6335f2c755b92a676468d31bdbc7302577c0e40500500ac05ce49e55717b316648c489e73224d0bd4ff2879b82d3c2061
data/.travis.yml CHANGED
@@ -24,5 +24,5 @@ before_script:
24
24
  - chmod +x ./cc-test-reporter
25
25
  script:
26
26
  - bundle exec rake
27
- - if [ "$DATABASE_ADAPTER" == "postgres" ]; then ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT; fi
27
+ - if [ "$DATABASE_ADAPTER" == "postgres" ]; then ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT || true; fi
28
28
  - bundle exec bundle-audit update && bundle exec bundle-audit
data/CHANGELOG.md CHANGED
@@ -1,7 +1,12 @@
1
- Do this to generate your change history
1
+ <a name="v2.4.1"></a>
2
+ ### v2.4.1 (2017-09-07)
2
3
 
3
- $ git log --pretty=format:' * %h - %s (%an, %ad)'
4
+ #### Bug Fixes
4
5
 
6
+ * allow resource identifiers to contain escaped forward slashes ([d875079](/../../commit/d875079))
7
+
8
+ <a name="v2.4.0"></a>
9
+ ### v2.4.0 (2017-07-31)
5
10
  * 3a03f41 - fix(publish verification result): Fix Location header for newly created resource (Beth Skurrie, Mon Jul 31 10:49:37 2017 +1000)
6
11
  * 3b0f390 - feat(pacticipant labels): Add HAL link to pacticipants resource to find pacticipants by label. (Beth Skurrie, Mon Jul 24 08:17:36 2017 +1000)
7
12
  * 588d2ad - fix(pacticipant and pacticipants resources): Add correctly capitalised and namespaced properties and relations. Added deprecation warnings to existing incorrect properties and relations. (Beth Skurrie, Mon Jul 24 08:14:52 2017 +1000)
data/README.md CHANGED
@@ -93,8 +93,10 @@ Use the HAL browser to view documentation as you browse.
93
93
  ### To have a play around on your local machine
94
94
 
95
95
  * Install ruby 2.2.0 or later and bundler >= 1.12.0
96
+ * Windows users: get a Rails/Ruby installer from [RailsInstaller](http://railsinstaller.org/) and run it
97
+ * unix users just use your package manager
96
98
  * Run `git clone git@github.com:pact-foundation/pact_broker.git && cd pact_broker/example`
97
- * Run `bundle`
99
+ * Run `bundle install`
98
100
  * Run `bundle exec rackup -p 8080`
99
101
  * Open [http://localhost:8080](http://localhost:8080) and you should see a list containing the pact between the Zoo App and the Animal Service.
100
102
  * Click on the arrow to see the generated HTML documentation.
data/RELEASING.md CHANGED
@@ -3,12 +3,12 @@
3
3
  1. Increment the version in `./lib/pact_broker/version.rb`
4
4
  2. Update the `CHANGELOG.md` using:
5
5
 
6
- $ git log --pretty=format:' * %h - %s (%an, %ad)'
6
+ $ bundle exec rake generate_changelog
7
7
 
8
8
  3. Add files to git
9
9
 
10
10
  $ git add CHANGELOG.md lib/pact_broker/version.rb
11
- $ git commit -m "Releasing version $(ruby -r ./lib/pact_broker/version.rb -e "puts PactBroker::VERSION")"
11
+ $ git commit -m "chore(release): version $(ruby -r ./lib/pact_broker/version.rb -e "puts PactBroker::VERSION")" && git push
12
12
 
13
13
  3. Release:
14
14
 
@@ -1,5 +1,6 @@
1
1
  require_relative 'base_decorator'
2
2
  require_relative 'version_decorator'
3
+ require_relative 'verification_decorator'
3
4
  require 'ostruct'
4
5
 
5
6
  module PactBroker
@@ -0,0 +1,10 @@
1
+ require 'reform'
2
+ require 'reform/form/dry'
3
+
4
+ Reform::Form.class_eval do
5
+ feature Reform::Form::Dry
6
+ end
7
+
8
+ Dir.glob(File.expand_path(File.join(__FILE__, "..", "resources", "*.rb"))) do |file|
9
+ require file
10
+ end
@@ -1,36 +1,5 @@
1
- require 'reform'
2
- require 'reform/form/dry'
3
- Reform::Form.class_eval do
4
- feature Reform::Form::Dry
5
- end
6
-
7
- require 'pact_broker/api/resources/pact'
8
- require 'pact_broker/api/resources/latest_pact'
9
- require 'pact_broker/api/resources/latest_pacts'
10
- require 'pact_broker/api/resources/pacticipant'
11
- require 'pact_broker/api/resources/pacticipants'
12
- require 'pact_broker/api/resources/pacticipants_for_label'
13
- require 'pact_broker/api/resources/tag'
14
- require 'pact_broker/api/resources/label'
15
- require 'pact_broker/api/resources/index'
16
- require 'pact_broker/api/resources/relationships'
17
- require 'pact_broker/api/resources/group'
18
- require 'pact_broker/api/resources/pact_webhooks'
19
- require 'pact_broker/api/resources/pact_versions'
20
- require 'pact_broker/api/resources/webhooks'
21
- require 'pact_broker/api/resources/webhook'
22
- require 'pact_broker/api/resources/webhook_execution'
23
- require 'pact_broker/api/resources/version'
24
- require 'pact_broker/api/resources/versions'
25
- require 'pact_broker/api/resources/pact_content_diff'
26
- require 'pact_broker/api/resources/previous_distinct_pact_version'
27
- require 'pact_broker/api/resources/latest_provider_pacts'
28
- require 'pact_broker/api/resources/verifications'
29
- require 'pact_broker/api/resources/verification'
30
- require 'pact_broker/api/resources/latest_verifications_for_consumer_version'
31
- require 'pact_broker/api/resources/badge'
32
-
33
1
  require 'webmachine/adapters/rack_mapped'
2
+ require 'pact_broker/api/resources'
34
3
 
35
4
  module PactBroker
36
5
 
@@ -78,7 +78,7 @@ module PactBroker
78
78
  end
79
79
 
80
80
  def configure_middleware
81
- @app_builder.use Rack::Protection, except: [:remote_token, :session_hijacking, :http_origin]
81
+ @app_builder.use Rack::Protection, except: [:path_traversal, :remote_token, :session_hijacking, :http_origin]
82
82
  @app_builder.use Rack::PactBroker::InvalidUriProtection
83
83
  @app_builder.use Rack::PactBroker::AddPactBrokerVersionHeader
84
84
  @app_builder.use Rack::Static, :urls => ["/stylesheets", "/css", "/fonts", "/js", "/javascripts", "/images"], :root => PactBroker.project_root.join("public")
@@ -1,3 +1,3 @@
1
1
  module PactBroker
2
- VERSION = '2.4.0'
2
+ VERSION = '2.4.1'
3
3
  end
data/pact_broker.gemspec CHANGED
@@ -46,7 +46,9 @@ Gem::Specification.new do |gem|
46
46
  gem.add_development_dependency 'mysql2', '~>0.3.15'
47
47
  gem.add_development_dependency 'webmock', '~>2.3'
48
48
  gem.add_development_dependency 'rspec', '~>3.0'
49
- gem.add_development_dependency 'rspec-its'
50
- gem.add_development_dependency 'database_cleaner'
49
+ gem.add_development_dependency 'rspec-its', '~>1.2'
50
+ gem.add_development_dependency 'database_cleaner', '~>1.6'
51
51
  gem.add_development_dependency 'pg'
52
+ gem.add_development_dependency 'conventional-changelog', '~>1.3'
53
+
52
54
  end
@@ -1,10 +1,9 @@
1
- # set -x
1
+ set -e
2
2
  BODY=$(ruby -e "require 'json'; j = JSON.parse(File.read('script/foo-bar.json')); j['interactions'][0]['providerState'] = 'it is ' + Time.now.to_s; puts j.to_json")
3
3
  latest_url=$(curl http://localhost:9292/pacts/provider/Bar/consumer/Foo/latest | jq -r ._links.self.href)
4
- next_version=$(echo ${latest_url} | ruby -e "require 'semver'; puts SemVer.parse(ARGF.read[/\d+\.\d\.\d+/]).tap{ | v| v.minor = v.minor + 1}.format('%M.%m.%p')")
5
- echo ${BODY} >> tmp.json
6
- curl -v -XPUT \-H "Content-Type: application/json" \
7
- -d@tmp.json \
8
- http://127.0.0.1:9292/pacts/provider/Bar/consumer/Foo/version/${next_version}
4
+ next_version=$(echo ${latest_url} | ruby -e "version = ARGF.read[/\d+\.\d+\.\d+/]; require 'semver'; puts SemVer.parse(version).tap{ | v| v.minor = v.minor + 1}.format('%M.%m.%p')")
5
+ echo ${BODY} > tmp.json
6
+ curl -v -XPUT \-H "Content-Type: application/json" -d@tmp.json \
7
+ http://localhost:9292/pacts/provider/Bar/consumer/Foo/version/${next_version}
9
8
  rm tmp.json
10
9
  echo ""
data/script/seed.rb ADDED
@@ -0,0 +1,85 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ raise "Please supply database path" unless ARGV[0]
4
+
5
+ $LOAD_PATH.unshift './lib'
6
+ $LOAD_PATH.unshift './spec'
7
+ ENV['RACK_ENV'] = 'development'
8
+ require 'sequel'
9
+ require 'logger'
10
+ DATABASE_CREDENTIALS = {logger: Logger.new($stdout), adapter: "sqlite", database: ARGV[0], :encoding => 'utf8'}
11
+ connection = Sequel.connect(DATABASE_CREDENTIALS)
12
+ connection.timezone = :utc
13
+ require 'pact_broker'
14
+ require 'support/test_data_builder'
15
+
16
+ def random_build
17
+ rand * 100
18
+ end
19
+
20
+ tables_to_clean = [:labels, :webhook_executions, :verifications, :pact_publications, :pact_versions, :pacts, :pact_version_contents, :tags, :versions, :webhook_headers, :webhooks, :pacticipants]
21
+
22
+ tables_to_clean.each do | table_name |
23
+ connection[table_name].delete if connection.table_exists?(table_name)
24
+ end
25
+
26
+ class TestDataBuilder
27
+ def method_missing *args
28
+ self
29
+ end
30
+
31
+ def publish_pact params = {}
32
+ create_pact params
33
+ end
34
+ end
35
+
36
+ # latest verifications
37
+ # TestDataBuilder.new
38
+ # .create_consumer("Foo")
39
+ # .create_provider("Bar")
40
+ # .create_consumer_version("1.2.3")
41
+ # .create_pact
42
+ # .create_verification(provider_version: "4.5.6", success: true)
43
+ # .create_provider("Wiffle")
44
+ # .create_pact
45
+ # .create_verification(provider_version: "5.6.7", success: false)
46
+ # .create_provider("Meep")
47
+ # .create_pact
48
+
49
+
50
+ TestDataBuilder.new
51
+ .create_consumer("Foo")
52
+ .create_label("microservice")
53
+ .create_provider("Bar")
54
+ .create_label("microservice")
55
+ .create_webhook(method: 'GET', url: 'http://127.0.0.1:1234/')
56
+ .create_consumer_version("1.2.100")
57
+ .publish_pact
58
+ .create_verification(provider_version: "1.4.234", success: true, execution_date: DateTime.now - 15)
59
+ .revise_pact
60
+ .create_consumer_version("1.2.101")
61
+ .publish_pact
62
+ .create_consumer_version("1.2.102")
63
+ .publish_pact(created_at: (Date.today - 7).to_datetime)
64
+ .create_provider("Animals")
65
+ .create_webhook(method: 'GET', url: 'http://127.0.0.1:1234/')
66
+ .publish_pact(created_at: (Time.now - 140).to_datetime)
67
+ .create_verification(provider_version: "2.0.366", execution_date: Date.today - 2) #changed
68
+ .create_provider("Wiffles")
69
+ .publish_pact
70
+ .create_verification(provider_version: "3.6.100", success: false, execution_date: Date.today - 7)
71
+ .create_provider("Hello World App")
72
+ .create_consumer_version("1.2.107")
73
+ .publish_pact(created_at: (Date.today - 1).to_datetime)
74
+ .create_consumer("The Android App")
75
+ .create_provider("The back end")
76
+ .create_webhook(method: 'GET', url: 'http://127.0.0.1:1234/')
77
+ .create_consumer_version("1.2.106")
78
+ .publish_pact
79
+ .create_consumer("Some other app")
80
+ .create_provider("A service")
81
+ .create_webhook(method: 'GET', url: 'http://127.0.0.1:1234/')
82
+ .create_webhook_execution
83
+ .create_consumer_version("1.2.106")
84
+ .publish_pact(created_at: (Date.today - 26).to_datetime)
85
+ .create_verification(provider_version: "4.8.152", execution_date: DateTime.now)
@@ -0,0 +1,6 @@
1
+ count = 0
2
+ run -> (env) {
3
+ count += 1
4
+ status = (count % 3 == 0) ? 200 : 500
5
+ puts "Received request"; [status, {}, ["Hello. This might be an error.\n"]]
6
+ }
@@ -0,0 +1,13 @@
1
+ describe "tagging a pacticipant version" do
2
+ let(:path) { "/pacticipants/Foo/versions/1.2.3/tags/feat%2Fbar" }
3
+
4
+ subject { put path, nil, {'CONTENT_TYPE' => 'application/json'}; last_response }
5
+
6
+ context "when the pacticipant/version/tag do not exist" do
7
+ it "creates a tag" do
8
+ expect{ subject }.to change {
9
+ PactBroker::Domain::Tag.where(name: 'feat/bar').count
10
+ }.by(1)
11
+ end
12
+ end
13
+ end
@@ -187,5 +187,15 @@ module PactBroker
187
187
  expect(last_response.status).to eq 404
188
188
  end
189
189
  end
190
+
191
+ describe "when a resource identifier contains a slash" do
192
+ let(:path) { "/pacticipants/Foo/versions/1.2.3/tags/feat%2Fbar" }
193
+
194
+ subject { put path, nil, {'CONTENT_TYPE' => 'application/json'}; last_response }
195
+
196
+ it "returns a success status" do
197
+ expect(subject.status).to eq 201
198
+ end
199
+ end
190
200
  end
191
201
  end
@@ -0,0 +1,6 @@
1
+ require 'conventional_changelog'
2
+
3
+ task :generate_changelog do
4
+ require 'pact_broker/version'
5
+ ConventionalChangelog::Generator.new.generate! version: "v#{PactBroker::VERSION}"
6
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pact_broker
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.0
4
+ version: 2.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bethany Skurrie
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-07-31 00:00:00.000000000 Z
13
+ date: 2017-09-07 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: httparty
@@ -364,30 +364,30 @@ dependencies:
364
364
  name: rspec-its
365
365
  requirement: !ruby/object:Gem::Requirement
366
366
  requirements:
367
- - - ">="
367
+ - - "~>"
368
368
  - !ruby/object:Gem::Version
369
- version: '0'
369
+ version: '1.2'
370
370
  type: :development
371
371
  prerelease: false
372
372
  version_requirements: !ruby/object:Gem::Requirement
373
373
  requirements:
374
- - - ">="
374
+ - - "~>"
375
375
  - !ruby/object:Gem::Version
376
- version: '0'
376
+ version: '1.2'
377
377
  - !ruby/object:Gem::Dependency
378
378
  name: database_cleaner
379
379
  requirement: !ruby/object:Gem::Requirement
380
380
  requirements:
381
- - - ">="
381
+ - - "~>"
382
382
  - !ruby/object:Gem::Version
383
- version: '0'
383
+ version: '1.6'
384
384
  type: :development
385
385
  prerelease: false
386
386
  version_requirements: !ruby/object:Gem::Requirement
387
387
  requirements:
388
- - - ">="
388
+ - - "~>"
389
389
  - !ruby/object:Gem::Version
390
- version: '0'
390
+ version: '1.6'
391
391
  - !ruby/object:Gem::Dependency
392
392
  name: pg
393
393
  requirement: !ruby/object:Gem::Requirement
@@ -402,6 +402,20 @@ dependencies:
402
402
  - - ">="
403
403
  - !ruby/object:Gem::Version
404
404
  version: '0'
405
+ - !ruby/object:Gem::Dependency
406
+ name: conventional-changelog
407
+ requirement: !ruby/object:Gem::Requirement
408
+ requirements:
409
+ - - "~>"
410
+ - !ruby/object:Gem::Version
411
+ version: '1.3'
412
+ type: :development
413
+ prerelease: false
414
+ version_requirements: !ruby/object:Gem::Requirement
415
+ requirements:
416
+ - - "~>"
417
+ - !ruby/object:Gem::Version
418
+ version: '1.3'
405
419
  description: A server that stores and returns pact files generated by the pact gem.
406
420
  It enables head/prod cross testing of the consumer and provider projects.
407
421
  email:
@@ -521,6 +535,7 @@ files:
521
535
  - lib/pact_broker/api/decorators/webhooks_decorator.rb
522
536
  - lib/pact_broker/api/pact_broker_urls.rb
523
537
  - lib/pact_broker/api/renderers/html_pact_renderer.rb
538
+ - lib/pact_broker/api/resources.rb
524
539
  - lib/pact_broker/api/resources/authentication.rb
525
540
  - lib/pact_broker/api/resources/badge.rb
526
541
  - lib/pact_broker/api/resources/base_resource.rb
@@ -706,7 +721,9 @@ files:
706
721
  - script/publish.sh
707
722
  - script/record_verification.sh
708
723
  - script/recreate-pg-db.sh
724
+ - script/seed.rb
709
725
  - script/update-hal-browser
726
+ - script/webhook-server.ru
710
727
  - spec/features/create_webhook_spec.rb
711
728
  - spec/features/delete_label_spec.rb
712
729
  - spec/features/delete_pact_spec.rb
@@ -732,6 +749,7 @@ files:
732
749
  - spec/features/publish_not_a_pact_spec.rb
733
750
  - spec/features/publish_pact_spec.rb
734
751
  - spec/features/publish_verification_spec.rb
752
+ - spec/features/tag_version_spec.rb
735
753
  - spec/features/update_pacticipant_spec.rb
736
754
  - spec/fixtures/a_consumer-a_provider-2.json
737
755
  - spec/fixtures/a_consumer-a_provider-3.json
@@ -852,6 +870,7 @@ files:
852
870
  - tasks/database.rb
853
871
  - tasks/db.rake
854
872
  - tasks/pact.rake
873
+ - tasks/release.rake
855
874
  - tasks/rspec.rake
856
875
  - tasks/test_db.rake
857
876
  - vendor/hal-browser/.gitignore
@@ -912,7 +931,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
912
931
  version: '0'
913
932
  requirements: []
914
933
  rubyforge_project:
915
- rubygems_version: 2.6.12
934
+ rubygems_version: 2.6.11
916
935
  signing_key:
917
936
  specification_version: 4
918
937
  summary: See description
@@ -942,6 +961,7 @@ test_files:
942
961
  - spec/features/publish_not_a_pact_spec.rb
943
962
  - spec/features/publish_pact_spec.rb
944
963
  - spec/features/publish_verification_spec.rb
964
+ - spec/features/tag_version_spec.rb
945
965
  - spec/features/update_pacticipant_spec.rb
946
966
  - spec/fixtures/a_consumer-a_provider-2.json
947
967
  - spec/fixtures/a_consumer-a_provider-3.json