pact_broker 2.71.0 → 2.72.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +1 -21
  3. data/CHANGELOG.md +11 -0
  4. data/Dockerfile +5 -1
  5. data/docker-compose-ci-mysql.yml +37 -0
  6. data/lib/pact_broker/api/pact_broker_urls.rb +5 -1
  7. data/lib/pact_broker/api/resources/metadata_resource_methods.rb +23 -0
  8. data/lib/pact_broker/api/resources/pact.rb +2 -13
  9. data/lib/pact_broker/api/resources/pact_resource_methods.rb +23 -0
  10. data/lib/pact_broker/api/resources/pact_version.rb +3 -0
  11. data/lib/pact_broker/api/resources/tagged_pact_versions.rb +4 -0
  12. data/lib/pact_broker/api/resources/verifications.rb +2 -4
  13. data/lib/pact_broker/db/clean_incremental.rb +132 -22
  14. data/lib/pact_broker/db/delete_overwritten_data.rb +55 -27
  15. data/lib/pact_broker/domain/tag.rb +42 -0
  16. data/lib/pact_broker/domain/verification.rb +87 -0
  17. data/lib/pact_broker/metrics/service.rb +5 -3
  18. data/lib/pact_broker/pacts/all_pact_publications.rb +8 -0
  19. data/lib/pact_broker/pacts/repository.rb +35 -11
  20. data/lib/pact_broker/tasks/clean_task.rb +9 -3
  21. data/lib/pact_broker/tasks/delete_overwritten_data_task.rb +23 -7
  22. data/lib/pact_broker/test/test_data_builder.rb +24 -0
  23. data/lib/pact_broker/version.rb +1 -1
  24. data/script/docker-container/test.sh +3 -0
  25. data/script/docker/db-psql.sh +3 -0
  26. data/script/docker/db-reload.sh +11 -0
  27. data/script/pry.rb +25 -0
  28. data/script/seed.rb +1 -0
  29. data/script/test/run-rake-on-docker-compose-mysql.sh +8 -0
  30. data/spec/features/delete_tagged_pact_versions_spec.rb +2 -2
  31. data/spec/features/get_pact_spec.rb +2 -2
  32. data/spec/features/get_pact_version.rb +26 -3
  33. data/spec/fixtures/approvals/clean_incremental_dry_run.approved.json +100 -0
  34. data/spec/lib/pact_broker/api/pact_broker_urls_spec.rb +6 -0
  35. data/spec/lib/pact_broker/api/resources/pact_spec.rb +20 -9
  36. data/spec/lib/pact_broker/api/resources/tagged_pact_versions_spec.rb +10 -2
  37. data/spec/lib/pact_broker/api/resources/verifications_spec.rb +7 -3
  38. data/spec/lib/pact_broker/db/clean_incremental_spec.rb +9 -1
  39. data/spec/lib/pact_broker/db/delete_overwritten_data_spec.rb +71 -11
  40. data/spec/lib/pact_broker/domain/tag_spec.rb +23 -9
  41. data/spec/lib/pact_broker/domain/verification_spec.rb +49 -0
  42. data/spec/lib/pact_broker/metrics/service_spec.rb +4 -1
  43. data/spec/lib/pact_broker/pacts/repository_spec.rb +54 -7
  44. data/spec/migrations/change_migration_strategy_spec.rb +1 -1
  45. metadata +12 -2
@@ -18,15 +18,29 @@ module PactBroker
18
18
  .create_consumer_version_tag("test")
19
19
  end
20
20
 
21
- it "returns the latest tags for the given pacticipant ids" do
22
- pacticipant = PactBroker::Domain::Pacticipant.order(:id).first
23
- tags = Tag.latest_tags_for_pacticipant_ids([pacticipant.id]).all
24
- expect(tags.collect(&:name).sort).to eq %w{bloop dev prod}
25
- expect(tags.find{ |t| t.name == "dev" }.version.number).to eq "3"
26
- expect(tags.find{ |t| t.name == "prod" }.version.number).to eq "1"
27
- expect(tags.find{ |t| t.name == "bloop" }.version.number).to eq "2"
28
- expect(tags.collect(&:version_id).compact.size).to eq 3
29
- expect(tags.collect(&:created_at).compact.size).to eq 3
21
+ describe "#latest_tags_for_pacticipant_ids" do
22
+ it "returns the latest tags for the given pacticipant ids" do
23
+ pacticipant = PactBroker::Domain::Pacticipant.order(:id).first
24
+ tags = Tag.latest_tags_for_pacticipant_ids([pacticipant.id]).all
25
+ expect(tags.collect(&:name).sort).to eq %w{bloop dev prod}
26
+ expect(tags.find{ |t| t.name == "dev" }.version.number).to eq "3"
27
+ expect(tags.find{ |t| t.name == "prod" }.version.number).to eq "1"
28
+ expect(tags.find{ |t| t.name == "bloop" }.version.number).to eq "2"
29
+ expect(tags.collect(&:version_id).compact.size).to eq 3
30
+ expect(tags.collect(&:created_at).compact.size).to eq 3
31
+ end
32
+ end
33
+
34
+ describe "latest_tags" do
35
+ it "returns the tags that belong to the most recent version with that tag/pacticipant" do
36
+ tags = Tag.latest_tags.all
37
+ expect(tags.collect(&:name).sort).to eq %w{bloop dev prod test}
38
+ expect(tags.find{ |t| t.name == "dev" }.version.number).to eq "3"
39
+ expect(tags.find{ |t| t.name == "prod" }.version.number).to eq "1"
40
+ expect(tags.find{ |t| t.name == "bloop" }.version.number).to eq "2"
41
+ expect(tags.collect(&:version_id).compact.size).to eq 4
42
+ expect(tags.collect(&:created_at).compact.size).to eq 4
43
+ end
30
44
  end
31
45
  end
32
46
  end
@@ -4,6 +4,55 @@ module PactBroker
4
4
 
5
5
  module Domain
6
6
  describe Verification do
7
+ describe "latest_verifications_for_all_consumer_version_tags" do
8
+ before do
9
+ td.create_pact_with_verification_and_tags("Foo", "1", ["fmain"], "Bar", "2")
10
+ .create_pact_with_verification_and_tags("Foo", "3", ["fmain"], "Bar", "4")
11
+ .create_pact_with_verification_and_tags("Foo", "5", ["fmain"], "Bar", "5")
12
+ .create_pact_with_verification_and_tags("Foo", "6", ["other"], "Bar", "5")
13
+ .create_pact_with_verification_and_tags("Foo2", "6", ["fprod"], "Bar", "7")
14
+ .create_pact_with_verification_and_tags("Ignored", "6", ["fmain"], "Bar", "8")
15
+ end
16
+
17
+ subject { Verification.latest_verifications_for_all_consumer_version_tags.all }
18
+
19
+ it "returns the same number of rows as the view" do
20
+ expect(subject.size).to eq Verification.db[:latest_verifications_for_consumer_version_tags].count
21
+ end
22
+
23
+ it "allows eager" do
24
+ expect(Verification.latest_verifications_for_all_consumer_version_tags.eager(:provider_version).all.first.provider_version.number).to_not be nil
25
+ end
26
+ end
27
+
28
+ describe "latest_verifications_for_consumer_version_tags" do
29
+ before do
30
+ td.create_pact_with_verification_and_tags("Foo", "1", ["fmain"], "Bar", "2")
31
+ .create_pact_with_verification_and_tags("Foo", "3", ["fmain"], "Bar", "4")
32
+ .create_pact_with_verification_and_tags("Foo", "5", ["fmain"], "Bar", "5")
33
+ .create_pact_with_verification_and_tags("Foo", "6", ["other"], "Bar", "5")
34
+ .create_pact_with_verification_and_tags("Foo2", "6", ["fprod"], "Bar", "7")
35
+ .create_pact_with_verification_and_tags("Ignored", "6", ["fmain"], "Bar", "8")
36
+ end
37
+
38
+ let(:consumer_ids) { PactBroker::Domain::Pacticipant.where(name: ["Foo", "Foo2"]).all.collect(&:id) }
39
+
40
+ subject { Verification.latest_verifications_for_consumer_version_tags(consumer_ids, ["fmain", "fprod"]).order(:id) }
41
+
42
+ it "returns the latest verifications for the given consumer ids and consumer version tag names" do
43
+ expect(subject.first.provider_version_number).to eq "5"
44
+ expect(subject.first.consumer_name).to eq "Foo"
45
+ expect(subject.first.consumer_version_tag_name).to eq "fmain"
46
+ expect(subject.last.provider_version_number).to eq "7"
47
+ expect(subject.last.consumer_name).to eq "Foo2"
48
+ expect(subject.last.consumer_version_tag_name).to eq "fprod"
49
+ end
50
+
51
+ it "allows eager" do
52
+ expect(subject.eager(:provider_version).all.first.provider_version.number).to eq "5"
53
+ end
54
+ end
55
+
7
56
  describe "delete" do
8
57
  before do
9
58
  td.create_pact_with_hierarchy("Foo", "1", "Bar")
@@ -9,17 +9,20 @@ module PactBroker
9
9
  describe "verificationResultsPerPactVersion" do
10
10
  before do
11
11
  td.create_pact_with_hierarchy
12
+ .create_consumer_version_tag("prod")
12
13
  .comment("this pact version will have 2 verifications")
13
14
  .create_verification
14
- .create_verification(number: 2)
15
+ .create_verification(number: 2, tag_names: ["main"])
15
16
  .revise_pact
16
17
  .comment("this pact version will have 1 verification")
17
18
  .create_verification
18
19
  .create_consumer_version
20
+ .create_consumer_version_tag("main")
19
21
  .create_pact
20
22
  .comment("this pact will have 1 verification")
21
23
  .create_verification
22
24
  .create_consumer_version
25
+ .create_consumer_version_tag("main")
23
26
  .create_pact
24
27
  .comment("this pact will have 1 verification")
25
28
  .create_verification
@@ -569,8 +569,7 @@ module PactBroker
569
569
 
570
570
  describe "find_pact" do
571
571
  let!(:pact) do
572
- builder = TestDataBuilder.new
573
- pact = builder
572
+ pact = td
574
573
  .create_consumer("Consumer")
575
574
  .create_consumer_version("1.2.2")
576
575
  .create_provider("Provider")
@@ -580,7 +579,7 @@ module PactBroker
580
579
  .create_pact
581
580
  .revise_pact
582
581
  .and_return(:pact)
583
- builder
582
+ td
584
583
  .create_consumer_version("1.2.6")
585
584
  .create_pact
586
585
  .create_provider("Another Provider")
@@ -600,6 +599,14 @@ module PactBroker
600
599
  expect(subject.json_content).to_not be_nil
601
600
  end
602
601
 
602
+ context "with no version" do
603
+ subject { Repository.new.find_pact("Consumer", nil, "Provider") }
604
+
605
+ it "returns the latest pact" do
606
+ expect(subject.consumer_version_number).to eq "1.2.6"
607
+ end
608
+ end
609
+
603
610
  context "with a pact_version_sha" do
604
611
  subject { Repository.new.find_pact "Consumer", nil, "Provider", pact.pact_version_sha }
605
612
 
@@ -609,26 +616,66 @@ module PactBroker
609
616
  expect(subject.provider.name).to eq "Provider"
610
617
  expect(subject.consumer_version_number).to eq "1.2.4"
611
618
  expect(subject.revision_number).to eq 2
612
-
613
619
  end
620
+
614
621
  context "when there are multiple pact publications for the pact version" do
615
622
  before do
616
623
  # Double check the data is set up correctly...
617
624
  expect(pact_1.pact_version_sha).to eq(pact_2.pact_version_sha)
618
625
  end
619
626
 
620
- let(:td) { TestDataBuilder.new }
621
627
  let!(:pact_1) { td.create_pact_with_hierarchy("Foo", "1", "Bar").and_return(:pact) }
622
628
  let!(:pact_2) { td.create_consumer_version("2").create_pact(json_content: pact_1.json_content).and_return(:pact) }
623
629
 
624
- subject { Repository.new.find_pact "Foo", nil, "Bar", pact_1.pact_version_sha }
630
+ let(:consumer_version_number) { nil }
631
+
632
+ subject { Repository.new.find_pact "Foo", consumer_version_number, "Bar", pact_1.pact_version_sha }
625
633
 
626
634
  it "returns the latest pact, ordered by consumer version order" do
627
635
  expect(subject.consumer_version_number).to eq "2"
628
636
  end
637
+
638
+ context "when the consumer_version_number is specified too (from the URL metadata)" do
639
+ let(:consumer_version_number) { "1" }
640
+
641
+ it "returns the publication with the consumer version specified" do
642
+ expect(subject.consumer_version_number).to eq "1"
643
+ end
644
+ end
645
+
646
+ context "when the consumer_version_number is specified too (from the URL metadata) but it doesn't exist (anymore)" do
647
+ let(:consumer_version_number) { "9" }
648
+
649
+ it "returns the pact matching the sha with the latest consumer version" do
650
+ expect(subject.consumer_version_number).to eq "2"
651
+ end
652
+ end
653
+
654
+ # Not sure when this would happen
655
+ context "when the consumer_version_number is specified too (from the URL metadata) and it exists but it doesn't match the sha" do
656
+ before do
657
+ td.create_pact_with_hierarchy("Foo", "8", "Bar")
658
+ end
659
+
660
+ let(:consumer_version_number) { "8" }
661
+
662
+ it "returns the pact matching the sha with the latest consumer version" do
663
+ expect(subject.consumer_version_number).to eq "2"
664
+ end
665
+ end
666
+
667
+ context "when the pact has multiple revisions and goes back to a previous revision" do
668
+ before do
669
+ td.revise_pact
670
+ .revise_pact(pact_1.json_content)
671
+ end
672
+
673
+ it "returns the latest revision" do
674
+ expect(subject.revision_number).to eq 3
675
+ end
676
+ end
629
677
  end
630
678
  end
631
-
632
679
  end
633
680
 
634
681
  describe "find_all_revisions" do
@@ -1,6 +1,6 @@
1
1
  require 'fileutils'
2
2
 
3
- describe "changing from integer to timestamp migrations", no_db_clean: true do
3
+ describe "changing from integer to timestamp migrations", no_db_clean: true, skip: DB.mysql? do
4
4
 
5
5
  TEST_DIR = "db/test/change_migration_strategy"
6
6
  DATABASE_PATH = "#{TEST_DIR}/pact_broker_database.sqlite3"
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.71.0
4
+ version: 2.72.0
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: 2020-11-28 00:00:00.000000000 Z
13
+ date: 2020-12-02 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: httparty
@@ -558,6 +558,7 @@ files:
558
558
  - db/test/backwards_compatibility/spec/support/request_helpers.rb
559
559
  - db/test/change_migration_strategy/Rakefile
560
560
  - db/test/change_migration_strategy/before/Gemfile
561
+ - docker-compose-ci-mysql.yml
561
562
  - docker-compose-dev-postgres.yml
562
563
  - docker-compose-issue-repro.yml
563
564
  - docker-compose-test.yml
@@ -675,9 +676,11 @@ files:
675
676
  - lib/pact_broker/api/resources/matrix.rb
676
677
  - lib/pact_broker/api/resources/matrix_badge.rb
677
678
  - lib/pact_broker/api/resources/matrix_for_consumer_and_provider.rb
679
+ - lib/pact_broker/api/resources/metadata_resource_methods.rb
678
680
  - lib/pact_broker/api/resources/metrics.rb
679
681
  - lib/pact_broker/api/resources/pact.rb
680
682
  - lib/pact_broker/api/resources/pact_content_diff.rb
683
+ - lib/pact_broker/api/resources/pact_resource_methods.rb
681
684
  - lib/pact_broker/api/resources/pact_triggered_webhooks.rb
682
685
  - lib/pact_broker/api/resources/pact_version.rb
683
686
  - lib/pact_broker/api/resources/pact_versions.rb
@@ -1020,7 +1023,10 @@ files:
1020
1023
  - public/stylesheets/matrix.css
1021
1024
  - public/stylesheets/pact.css
1022
1025
  - script/db-spec.sh
1026
+ - script/docker-container/test.sh
1023
1027
  - script/docker/db-execute-sql-file.sh
1028
+ - script/docker/db-psql.sh
1029
+ - script/docker/db-reload.sh
1024
1030
  - script/docker/db-restore.sh
1025
1031
  - script/docker/db-rm.sh
1026
1032
  - script/docker/db-start.sh
@@ -1036,6 +1042,7 @@ files:
1036
1042
  - script/prod/clean-up.sql
1037
1043
  - script/prod/migrate-latest-pacts.sh
1038
1044
  - script/prod/redact-data.sql
1045
+ - script/pry.rb
1039
1046
  - script/publish-2.sh
1040
1047
  - script/publish-new.sh
1041
1048
  - script/publish-not-a-pact.sh
@@ -1055,6 +1062,7 @@ files:
1055
1062
  - script/seed-for-webhook-test.rb
1056
1063
  - script/seed-matrix.rb
1057
1064
  - script/seed.rb
1065
+ - script/test/run-rake-on-docker-compose-mysql.sh
1058
1066
  - script/trigger-release.sh
1059
1067
  - script/update-hal-browser
1060
1068
  - script/watch.sh
@@ -1119,6 +1127,7 @@ files:
1119
1127
  - spec/fixtures/a_consumer-a_provider-conflict.json
1120
1128
  - spec/fixtures/a_consumer-a_provider-merged.json
1121
1129
  - spec/fixtures/a_consumer-a_provider.json
1130
+ - spec/fixtures/approvals/clean_incremental_dry_run.approved.json
1122
1131
  - spec/fixtures/approvals/modifiable_resources.approved.json
1123
1132
  - spec/fixtures/certificate-invalid.pem
1124
1133
  - spec/fixtures/certificate.pem
@@ -1516,6 +1525,7 @@ test_files:
1516
1525
  - spec/fixtures/a_consumer-a_provider-conflict.json
1517
1526
  - spec/fixtures/a_consumer-a_provider-merged.json
1518
1527
  - spec/fixtures/a_consumer-a_provider.json
1528
+ - spec/fixtures/approvals/clean_incremental_dry_run.approved.json
1519
1529
  - spec/fixtures/approvals/modifiable_resources.approved.json
1520
1530
  - spec/fixtures/certificate-invalid.pem
1521
1531
  - spec/fixtures/certificate.pem