pact_broker 2.24.0 → 2.25.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +38 -0
  3. data/CONTRIBUTING.md +2 -2
  4. data/DEVELOPER_DOCUMENTATION.md +31 -27
  5. data/DEVELOPER_SETUP.md +3 -2
  6. data/config/database.yml +10 -0
  7. data/db/ddl_statements.rb +3 -0
  8. data/db/ddl_statements/head_matrix_v001.rb +31 -0
  9. data/db/ddl_statements/head_matrix_v002.rb +31 -0
  10. data/db/ddl_statements/latest_verification_ids_for_pact_versions_v001.rb +4 -0
  11. data/db/migrations/000028_create_all_pact_publications.rb +4 -1
  12. data/db/migrations/20180311_optimise_head_matrix.rb +5 -34
  13. data/db/migrations/20180523_create_latest_verifications_for_consumer_version_tags.rb +2 -0
  14. data/db/migrations/20180612_add_pacticipant_ids_to_verifications.rb +17 -0
  15. data/db/migrations/20180613_migrate_pacticipant_ids_for_verifications.rb +7 -0
  16. data/db/migrations/20180614_update_latest_verification_ids_for_consumer_and_provider.rb +27 -0
  17. data/db/migrations/20180615_add_consumer_id_to_pact_publications.rb +13 -0
  18. data/db/migrations/20180616_migrate_consumer_ids_for_pact_publications.rb +11 -0
  19. data/db/migrations/20180720_create_latest_pact_publication_ids.rb +25 -0
  20. data/db/migrations/20180721_migrate_latest_pact_publication_ids.rb +11 -0
  21. data/db/migrations/20180722_recreate_views.rb +43 -0
  22. data/db/migrations/20180723_create_latest_verification_ids.rb +23 -0
  23. data/db/migrations/20180724_migrate_latest_verification_ids.rb +18 -0
  24. data/db/migrations/20180726_recreate_views.rb +29 -0
  25. data/db/migrations/20180727_recreate_latest_verification_ids_for_consumer_version_tags.rb +34 -0
  26. data/db/migrations/20180728_truncate_materialized_matrix_tables.rb +20 -0
  27. data/db/migrations/20180729_create_latest_verification_ids_for_provider_versions.rb +8 -0
  28. data/db/migrations/20180730_create_latest_verifications_for_provider_versions.rb +33 -0
  29. data/db/migrations/20180731_update_head_matrix.rb +11 -0
  30. data/db/pact_broker_database.sqlite3 +0 -0
  31. data/lib/pact_broker/api.rb +3 -3
  32. data/lib/pact_broker/api/decorators/dashboard_text_decorator.rb +2 -2
  33. data/lib/pact_broker/api/pact_broker_urls.rb +1 -1
  34. data/lib/pact_broker/api/resources/base_resource.rb +0 -7
  35. data/lib/pact_broker/api/resources/index.rb +11 -9
  36. data/lib/pact_broker/api/resources/pact.rb +1 -3
  37. data/lib/pact_broker/api/resources/pacticipant.rb +1 -3
  38. data/lib/pact_broker/api/resources/tag.rb +1 -4
  39. data/lib/pact_broker/api/resources/verification.rb +2 -0
  40. data/lib/pact_broker/api/resources/version.rb +1 -3
  41. data/lib/pact_broker/app.rb +8 -0
  42. data/lib/pact_broker/certificates/certificate.rb +12 -0
  43. data/lib/pact_broker/config/setting.rb +12 -0
  44. data/lib/pact_broker/configuration.rb +2 -1
  45. data/lib/pact_broker/db.rb +6 -0
  46. data/lib/pact_broker/db/clean.rb +2 -7
  47. data/lib/pact_broker/db/data_migrations/set_consumer_ids_for_pact_publications.rb +29 -0
  48. data/lib/pact_broker/db/data_migrations/set_pacticipant_ids_for_verifications.rb +35 -0
  49. data/lib/pact_broker/db/migrate_data.rb +14 -0
  50. data/lib/pact_broker/doc/views/wip-provider-pacts.markdown +3 -0
  51. data/lib/pact_broker/domain/label.rb +12 -0
  52. data/lib/pact_broker/domain/pacticipant.rb +32 -1
  53. data/lib/pact_broker/domain/tag.rb +14 -1
  54. data/lib/pact_broker/domain/verification.rb +29 -0
  55. data/lib/pact_broker/domain/version.rb +25 -1
  56. data/lib/pact_broker/feature_toggle.rb +23 -0
  57. data/lib/pact_broker/index/service.rb +1 -0
  58. data/lib/pact_broker/matrix/head_row.rb +25 -20
  59. data/lib/pact_broker/matrix/repository.rb +0 -18
  60. data/lib/pact_broker/matrix/row.rb +24 -27
  61. data/lib/pact_broker/matrix/service.rb +0 -8
  62. data/lib/pact_broker/pacts/all_pact_publications.rb +15 -0
  63. data/lib/pact_broker/pacts/latest_pact_publication_id_by_consumer_version.rb +34 -0
  64. data/lib/pact_broker/pacts/latest_pact_publications.rb +15 -0
  65. data/lib/pact_broker/pacts/latest_pact_publications_by_consumer_version.rb +15 -0
  66. data/lib/pact_broker/pacts/latest_tagged_pact_publications.rb +16 -0
  67. data/lib/pact_broker/pacts/pact_publication.rb +24 -0
  68. data/lib/pact_broker/pacts/pact_version.rb +20 -0
  69. data/lib/pact_broker/pacts/repository.rb +37 -11
  70. data/lib/pact_broker/pacts/service.rb +9 -2
  71. data/lib/pact_broker/repositories/helpers.rb +20 -0
  72. data/lib/pact_broker/tags/tag_with_latest_flag.rb +8 -0
  73. data/lib/pact_broker/ui/view_models/index_item.rb +5 -1
  74. data/lib/pact_broker/ui/views/index/show.haml +1 -1
  75. data/lib/pact_broker/verifications/all_verifications.rb +13 -0
  76. data/lib/pact_broker/verifications/latest_verification_for_consumer_and_provider.rb +18 -0
  77. data/lib/pact_broker/verifications/latest_verification_for_consumer_version_tag.rb +19 -0
  78. data/lib/pact_broker/verifications/latest_verification_for_pact_version.rb +22 -0
  79. data/lib/pact_broker/verifications/latest_verification_id_for_pact_version_and_provider_version.rb +36 -0
  80. data/lib/pact_broker/verifications/repository.rb +23 -5
  81. data/lib/pact_broker/verifications/sequence.rb +4 -0
  82. data/lib/pact_broker/version.rb +1 -1
  83. data/lib/pact_broker/webhooks/execution.rb +16 -0
  84. data/lib/pact_broker/webhooks/latest_triggered_webhook.rb +14 -0
  85. data/lib/pact_broker/webhooks/triggered_webhook.rb +27 -0
  86. data/lib/pact_broker/webhooks/webhook.rb +26 -0
  87. data/lib/pact_broker/webhooks/webhook_event.rb +13 -0
  88. data/pact_broker.gemspec +1 -0
  89. data/script/recreate-docker-pg-db.sh +20 -0
  90. data/script/recreate-mysql-db.sh +1 -0
  91. data/spec/integration/webhooks/certificate_spec.rb +1 -1
  92. data/spec/lib/pact_broker/db/clean_spec.rb +1 -1
  93. data/spec/lib/pact_broker/db/data_migrations/set_consumer_ids_for_pact_publications_spec.rb +40 -0
  94. data/spec/lib/pact_broker/feature_toggle_spec.rb +74 -0
  95. data/spec/lib/pact_broker/matrix/head_row_spec.rb +0 -44
  96. data/spec/lib/pact_broker/matrix/repository_spec.rb +0 -20
  97. data/spec/lib/pact_broker/matrix/row_spec.rb +0 -56
  98. data/spec/lib/pact_broker/pacts/repository_spec.rb +61 -9
  99. data/spec/lib/pact_broker/pacts/service_spec.rb +65 -17
  100. data/spec/lib/pact_broker/ui/view_models/index_item_spec.rb +3 -2
  101. data/spec/migrations/44_add_provider_version_to_verification_spec.rb +0 -1
  102. data/spec/service_consumers/provider_states_for_pact_ruby.rb +14 -0
  103. data/spec/support/test_data_builder.rb +0 -18
  104. data/tasks/database/annotate.rb +40 -0
  105. data/tasks/db.rake +12 -0
  106. metadata +50 -3
  107. data/lib/pact_broker/verifications/latest_verifications_by_consumer_version.rb +0 -15
@@ -0,0 +1,36 @@
1
+ require 'pact_broker/domain/verification'
2
+
3
+ module PactBroker
4
+ module Verifications
5
+ class LatestVerificationIdForPactVersionAndProviderVersion < Sequel::Model(:latest_verification_id_for_pact_version_and_provider_version)
6
+
7
+ unrestrict_primary_key
8
+
9
+ dataset_module do
10
+ include PactBroker::Repositories::Helpers
11
+ end
12
+
13
+ def upsert
14
+ self.class.upsert(to_hash, [:pact_version_id, :provider_version_id])
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+ # Table: latest_verification_id_for_pact_version_and_provider_version
21
+ # Columns:
22
+ # consumer_id | integer | NOT NULL
23
+ # pact_version_id | integer | NOT NULL
24
+ # provider_id | integer | NOT NULL
25
+ # provider_version_id | integer | NOT NULL
26
+ # verification_id | integer | NOT NULL
27
+ # Indexes:
28
+ # latest_v_id_for_pv_and_pv_pv_id_pv_id_unq | UNIQUE btree (pact_version_id, provider_version_id)
29
+ # latest_v_id_for_pv_and_pv_v_id_unq | UNIQUE btree (verification_id)
30
+ # latest_v_id_for_pv_and_pv_pv_id_v_id | btree (pact_version_id, verification_id)
31
+ # Foreign key constraints:
32
+ # latest_v_id_for_pv_and_pv_consumer_id_fk | (consumer_id) REFERENCES pacticipants(id) ON DELETE CASCADE
33
+ # latest_v_id_for_pv_and_pv_pact_version_id_fk | (pact_version_id) REFERENCES pact_versions(id) ON DELETE CASCADE
34
+ # latest_v_id_for_pv_and_pv_provider_id_fk | (provider_id) REFERENCES pacticipants(id) ON DELETE CASCADE
35
+ # latest_v_id_for_pv_and_pv_provider_version_id_fk | (provider_version_id) REFERENCES versions(id) ON DELETE CASCADE
36
+ # latest_v_id_for_pv_and_pv_verification_id_fk | (verification_id) REFERENCES verifications(id) ON DELETE CASCADE
@@ -1,8 +1,9 @@
1
1
  require 'sequel'
2
2
  require 'pact_broker/domain/verification'
3
- require 'pact_broker/verifications/latest_verifications_by_consumer_version'
3
+ require 'pact_broker/verifications/latest_verification_for_pact_version'
4
4
  require 'pact_broker/verifications/all_verifications'
5
5
  require 'pact_broker/verifications/sequence'
6
+ require 'pact_broker/verifications/latest_verification_id_for_pact_version_and_provider_version'
6
7
 
7
8
  module PactBroker
8
9
  module Verifications
@@ -21,10 +22,26 @@ module PactBroker
21
22
 
22
23
  def create verification, provider_version_number, pact
23
24
  provider = pacticipant_repository.find_by_name(pact.provider_name)
25
+ consumer = pacticipant_repository.find_by_name(pact.consumer_name)
24
26
  version = version_repository.find_by_pacticipant_id_and_number_or_create(provider.id, provider_version_number)
25
27
  verification.pact_version_id = pact_version_id_for(pact)
26
28
  verification.provider_version = version
29
+ verification.provider_id = provider.id
30
+ verification.consumer_id = consumer.id
27
31
  verification.save
32
+ update_latest_verification_id(verification)
33
+ verification
34
+ end
35
+
36
+ def update_latest_verification_id verification
37
+ params = {
38
+ pact_version_id: verification.pact_version_id,
39
+ provider_version_id: verification.provider_version_id,
40
+ provider_id: verification.provider_version.pacticipant_id,
41
+ verification_id: verification.id,
42
+ consumer_id: verification.consumer_id
43
+ }
44
+ LatestVerificationIdForPactVersionAndProviderVersion.new(params).upsert
28
45
  end
29
46
 
30
47
  def find consumer_name, provider_name, pact_version_sha, verification_number
@@ -38,7 +55,7 @@ module PactBroker
38
55
  end
39
56
 
40
57
  def search_for_latest consumer_name, provider_name
41
- query = LatestVerificationsByConsumerVersion
58
+ query = LatestVerificationForPactVersion
42
59
  .select_all_qualified
43
60
  .join(:all_pact_publications, pact_version_id: :pact_version_id)
44
61
  query = query.consumer(consumer_name) if consumer_name
@@ -49,7 +66,7 @@ module PactBroker
49
66
  def find_latest_verifications_for_consumer_version consumer_name, consumer_version_number
50
67
  # Use LatestPactPublicationsByConsumerVersion not AllPactPublcations because we don't
51
68
  # want verifications for shadowed revisions as it would be misleading.
52
- LatestVerificationsByConsumerVersion
69
+ LatestVerificationForPactVersion
53
70
  .select_all_qualified
54
71
  .join(:latest_pact_publications_by_consumer_versions, pact_version_id: :pact_version_id)
55
72
  .consumer(consumer_name)
@@ -62,7 +79,7 @@ module PactBroker
62
79
  # belonging to the version with the largest consumer_version_order.
63
80
 
64
81
  def find_latest_verification_for consumer_name, provider_name, consumer_version_tag = nil
65
- query = LatestVerificationsByConsumerVersion
82
+ query = LatestVerificationForPactVersion
66
83
  .select_all_qualified
67
84
  .join(:all_pact_publications, pact_version_id: :pact_version_id)
68
85
  .consumer(consumer_name)
@@ -75,7 +92,7 @@ module PactBroker
75
92
  query.reverse_order(
76
93
  Sequel[:all_pact_publications][:consumer_version_order],
77
94
  Sequel[:all_pact_publications][:revision_number],
78
- Sequel[LatestVerificationsByConsumerVersion.table_name][:number]
95
+ Sequel[LatestVerificationForPactVersion.table_name][:number]
79
96
  ).limit(1).single_record
80
97
  end
81
98
 
@@ -90,6 +107,7 @@ module PactBroker
90
107
  .tag(consumer_version_tag)
91
108
  .provider_version_tag(provider_version_tag)
92
109
 
110
+
93
111
  query.reverse_order(
94
112
  Sequel[:latest_pact_publications_by_consumer_versions][:consumer_version_order],
95
113
  Sequel[:latest_pact_publications_by_consumer_versions][:revision_number],
@@ -32,3 +32,7 @@ module PactBroker
32
32
  end
33
33
  end
34
34
  end
35
+
36
+ # Table: verification_sequence_number
37
+ # Columns:
38
+ # value | integer | NOT NULL
@@ -1,3 +1,3 @@
1
1
  module PactBroker
2
- VERSION = '2.24.0'
2
+ VERSION = '2.25.0'
3
3
  end
@@ -38,3 +38,19 @@ module PactBroker
38
38
 
39
39
  end
40
40
  end
41
+
42
+ # Table: webhook_executions
43
+ # Columns:
44
+ # id | integer | PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY
45
+ # triggered_webhook_id | integer |
46
+ # success | boolean | NOT NULL
47
+ # logs | text |
48
+ # created_at | timestamp without time zone | NOT NULL
49
+ # Indexes:
50
+ # webhook_executions_pkey | PRIMARY KEY btree (id)
51
+ # Foreign key constraints:
52
+ # webhook_executions_consumer_id_fkey | (consumer_id) REFERENCES pacticipants(id)
53
+ # webhook_executions_pact_publication_id_fkey | (pact_publication_id) REFERENCES pact_publications(id)
54
+ # webhook_executions_provider_id_fkey | (provider_id) REFERENCES pacticipants(id)
55
+ # webhook_executions_triggered_webhook_id_fkey | (triggered_webhook_id) REFERENCES triggered_webhooks(id)
56
+ # webhook_executions_webhook_id_fkey | (webhook_id) REFERENCES webhooks(id)
@@ -7,3 +7,17 @@ module PactBroker
7
7
  end
8
8
  end
9
9
  end
10
+
11
+ # Table: latest_triggered_webhooks
12
+ # Columns:
13
+ # id | integer |
14
+ # trigger_uuid | text |
15
+ # trigger_type | text |
16
+ # pact_publication_id | integer |
17
+ # webhook_id | integer |
18
+ # webhook_uuid | text |
19
+ # consumer_id | integer |
20
+ # provider_id | integer |
21
+ # status | text |
22
+ # created_at | timestamp without time zone |
23
+ # updated_at | timestamp without time zone |
@@ -98,3 +98,30 @@ module PactBroker
98
98
 
99
99
  end
100
100
  end
101
+
102
+ # Table: triggered_webhooks
103
+ # Columns:
104
+ # id | integer | PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY
105
+ # trigger_uuid | text | NOT NULL
106
+ # trigger_type | text | NOT NULL
107
+ # pact_publication_id | integer | NOT NULL
108
+ # webhook_id | integer |
109
+ # webhook_uuid | text | NOT NULL
110
+ # consumer_id | integer | NOT NULL
111
+ # provider_id | integer | NOT NULL
112
+ # status | text | NOT NULL
113
+ # created_at | timestamp without time zone | NOT NULL
114
+ # updated_at | timestamp without time zone | NOT NULL
115
+ # verification_id | integer |
116
+ # Indexes:
117
+ # triggered_webhooks_pkey | PRIMARY KEY btree (id)
118
+ # uq_triggered_webhook_ppi_wi | UNIQUE btree (pact_publication_id, webhook_id, trigger_uuid)
119
+ # uq_triggered_webhook_wi | UNIQUE btree (webhook_id, trigger_uuid)
120
+ # Foreign key constraints:
121
+ # triggered_webhooks_consumer_id_fkey | (consumer_id) REFERENCES pacticipants(id)
122
+ # triggered_webhooks_pact_publication_id_fkey | (pact_publication_id) REFERENCES pact_publications(id)
123
+ # triggered_webhooks_provider_id_fkey | (provider_id) REFERENCES pacticipants(id)
124
+ # triggered_webhooks_verification_id_fkey | (verification_id) REFERENCES verifications(id)
125
+ # triggered_webhooks_webhook_id_fkey | (webhook_id) REFERENCES webhooks(id)
126
+ # Referenced By:
127
+ # webhook_executions | webhook_executions_triggered_webhook_id_fkey | (triggered_webhook_id) REFERENCES triggered_webhooks(id)
@@ -101,3 +101,29 @@ module PactBroker
101
101
  end
102
102
  end
103
103
  end
104
+
105
+ # Table: webhooks
106
+ # Columns:
107
+ # id | integer | PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY
108
+ # uuid | text | NOT NULL
109
+ # method | text | NOT NULL
110
+ # url | text | NOT NULL
111
+ # body | text |
112
+ # is_json_request_body | boolean |
113
+ # consumer_id | integer |
114
+ # provider_id | integer |
115
+ # created_at | timestamp without time zone |
116
+ # updated_at | timestamp without time zone |
117
+ # username | text |
118
+ # password | text |
119
+ # Indexes:
120
+ # webhooks_pkey | PRIMARY KEY btree (id)
121
+ # uq_webhook_uuid | UNIQUE btree (uuid)
122
+ # Foreign key constraints:
123
+ # fk_webhooks_consumer | (consumer_id) REFERENCES pacticipants(id)
124
+ # fk_webhooks_provider | (provider_id) REFERENCES pacticipants(id)
125
+ # Referenced By:
126
+ # webhook_headers | fk_webhookheaders_webhooks | (webhook_id) REFERENCES webhooks(id)
127
+ # webhook_executions | webhook_executions_webhook_id_fkey | (webhook_id) REFERENCES webhooks(id)
128
+ # triggered_webhooks | triggered_webhooks_webhook_id_fkey | (webhook_id) REFERENCES webhooks(id)
129
+ # webhook_events | webhook_events_webhook_id_fkey | (webhook_id) REFERENCES webhooks(id) ON DELETE CASCADE
@@ -30,3 +30,16 @@ module PactBroker
30
30
  WebhookEvent.plugin :timestamps, update_on_create: true
31
31
  end
32
32
  end
33
+
34
+ # Table: webhook_events
35
+ # Columns:
36
+ # id | integer | PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY
37
+ # webhook_id | integer |
38
+ # name | text |
39
+ # created_at | timestamp without time zone | NOT NULL
40
+ # updated_at | timestamp without time zone | NOT NULL
41
+ # Indexes:
42
+ # webhook_events_pkey | PRIMARY KEY btree (id)
43
+ # uq_webhook_id_name | UNIQUE btree (id, name)
44
+ # Foreign key constraints:
45
+ # webhook_events_webhook_id_fkey | (webhook_id) REFERENCES webhooks(id) ON DELETE CASCADE
data/pact_broker.gemspec CHANGED
@@ -56,4 +56,5 @@ Gem::Specification.new do |gem|
56
56
  gem.add_development_dependency 'conventional-changelog', '~>1.3'
57
57
  gem.add_development_dependency 'bump', '~> 0.5'
58
58
  gem.add_development_dependency 'timecop', '~> 0.9'
59
+ gem.add_development_dependency 'sequel-annotate', '~>1.3'
59
60
  end
@@ -0,0 +1,20 @@
1
+ # docker run -p "5433:5432" --cpus 0.2 postgres:9.5-alpine
2
+
3
+ SCHEMA="pact_broker"
4
+ set +e
5
+ export PACT_BROKER_DATABASE_HOST="127.0.0.1"
6
+ export PACT_BROKER_DATABASE_PORT="5433"
7
+ psql postgres -h $PACT_BROKER_DATABASE_HOST -p $PACT_BROKER_DATABASE_PORT -U postgres -c "DROP DATABASE ${SCHEMA};"
8
+ psql postgres -h $PACT_BROKER_DATABASE_HOST -p $PACT_BROKER_DATABASE_PORT -U postgres -c "CREATE DATABASE ${SCHEMA};"
9
+ psql postgres -h $PACT_BROKER_DATABASE_HOST -p $PACT_BROKER_DATABASE_PORT -U postgres -c "CREATE USER pact_broker WITH PASSWORD 'pact_broker'"
10
+ psql postgres -h $PACT_BROKER_DATABASE_HOST -p $PACT_BROKER_DATABASE_PORT -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE ${SCHEMA} to pact_broker;"
11
+ psql postgres -h $PACT_BROKER_DATABASE_HOST -p $PACT_BROKER_DATABASE_PORT -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE ${SCHEMA} TO pact_broker;"
12
+ echo ""
13
+ echo "run the following command to set your environment variables:"
14
+ echo "export PACT_BROKER_DATABASE_USERNAME=pact_broker"
15
+ echo "export PACT_BROKER_DATABASE_PASSWORD=pact_broker"
16
+ echo "export PACT_BROKER_DATABASE_NAME=${SCHEMA}"
17
+ echo "export PACT_BROKER_DATABASE_HOST=${ip}"
18
+ echo "export PACT_BROKER_DATABASE_PORT=${PACT_BROKER_DATABASE_PORT}"
19
+ echo "To test:"
20
+ echo "psql -h \$PACT_BROKER_DATABASE_HOST -p \$PACT_BROKER_DATABASE_PORT -d \$PACT_BROKER_DATABASE_NAME -U \$PACT_BROKER_DATABASE_USERNAME"
@@ -15,3 +15,4 @@ echo "export PACT_BROKER_DATABASE_HOST=${ip}"
15
15
  echo "To test:"
16
16
  echo "mysql -upact_broker -ppact_broker -hlocalhost"
17
17
 
18
+ DATABASE_ADAPTER=mysql bundle exec rake db:migrate
@@ -5,7 +5,7 @@ describe "executing a webhook to a server with a self signed certificate" do
5
5
  let(:td) { TestDataBuilder.new }
6
6
  before(:all) do
7
7
  @pipe = IO.popen("bundle exec ruby spec/support/ssl_webhook_server.rb")
8
- sleep 2
8
+ sleep 3
9
9
  end
10
10
 
11
11
  let(:webhook_request) do
@@ -44,7 +44,7 @@ module PactBroker
44
44
 
45
45
  it "deletes rows that aren't the latest or latest tagged" do
46
46
  subject
47
- expect(db[:materialized_matrix].where(consumer_version_number: "2").count).to eq 0
47
+ expect(db[:matrix].where(consumer_version_number: "2").count).to eq 0
48
48
  end
49
49
 
50
50
  it "deletes orphan pact_versions" do
@@ -0,0 +1,40 @@
1
+ require 'pact_broker/db/data_migrations/set_consumer_ids_for_pact_publications'
2
+
3
+ module PactBroker
4
+ module DB
5
+ module DataMigrations
6
+ describe SetConsumerIdsForPactPublications, migration: true do
7
+ describe ".call" do
8
+ before do
9
+ PactBroker::Database.migrate(20180615)
10
+ end
11
+
12
+ let(:now) { DateTime.new(2018, 2, 2) }
13
+ let!(:consumer_other) { create(:pacticipants, {name: 'Other consumer', created_at: now, updated_at: now}) }
14
+ let!(:consumer) { create(:pacticipants, {name: 'Consumer', created_at: now, updated_at: now}) }
15
+ let!(:provider) { create(:pacticipants, {name: 'Provider', created_at: now, updated_at: now}) }
16
+ let!(:consumer_version) { create(:versions, {number: '1.2.3', order: 1, pacticipant_id: consumer[:id], created_at: now, updated_at: now}) }
17
+ let!(:pact_version) { create(:pact_versions, {content: {some: 'json'}.to_json, sha: '1234', consumer_id: consumer[:id], provider_id: provider[:id], created_at: now}) }
18
+ let!(:pact_publication) do
19
+ create(:pact_publications, {
20
+ consumer_version_id: consumer_version[:id],
21
+ provider_id: provider[:id],
22
+ revision_number: 1,
23
+ pact_version_id: pact_version[:id],
24
+ created_at: (now - 1)
25
+ })
26
+ end
27
+
28
+ subject { SetConsumerIdsForPactPublications.call(database) }
29
+
30
+ it "sets the consumer_id" do
31
+ expect(database[:pact_publications].first[:consumer_id]).to be nil
32
+ subject
33
+ expect(database[:pact_publications].first[:consumer_id]).to_not be nil
34
+ expect(database[:pact_publications].first[:consumer_id]).to eq consumer[:id]
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,74 @@
1
+ require 'pact_broker/feature_toggle'
2
+
3
+ module PactBroker
4
+ describe FeatureToggle do
5
+ describe "enabled?" do
6
+ before do
7
+ allow(ENV).to receive(:[]).and_call_original
8
+ end
9
+
10
+ subject { FeatureToggle.enabled?(:foo) }
11
+
12
+ context "when RACK_ENV is not production" do
13
+ before do
14
+ allow(ENV).to receive(:[]).with('RACK_ENV').and_return('development')
15
+ end
16
+
17
+ context "when PACT_BROKER_FEATURES includes the given string" do
18
+ before do
19
+ allow(ENV).to receive(:[]).with('PACT_BROKER_FEATURES').and_return('foo bar')
20
+ end
21
+
22
+ it { is_expected.to be true }
23
+ end
24
+
25
+ context "when PACT_BROKER_FEATURES does not include the given string" do
26
+ before do
27
+ allow(ENV).to receive(:[]).with('PACT_BROKER_FEATURES').and_return(nil)
28
+ end
29
+
30
+ it { is_expected.to be true }
31
+ end
32
+ end
33
+
34
+ context "when RACK_ENV is production" do
35
+ before do
36
+ allow(ENV).to receive(:[]).with('RACK_ENV').and_return('production')
37
+ end
38
+
39
+ context "when PACT_BROKER_FEATURES includes the given string" do
40
+ before do
41
+ allow(ENV).to receive(:[]).with('PACT_BROKER_FEATURES').and_return('foo bar')
42
+ end
43
+
44
+ it { is_expected.to be true }
45
+ end
46
+
47
+ context "when PACT_BROKER_FEATURES includes the given string inside another word" do
48
+ before do
49
+ allow(ENV).to receive(:[]).with('PACT_BROKER_FEATURES').and_return('foowiffle bar')
50
+ end
51
+
52
+ it { is_expected.to be false }
53
+ end
54
+
55
+ context "when PACT_BROKER_FEATURES includes the given string but the case doesn't match" do
56
+ before do
57
+ allow(ENV).to receive(:[]).with('PACT_BROKER_FEATURES').and_return('FOO bar')
58
+ end
59
+
60
+ it { is_expected.to be true }
61
+ end
62
+
63
+
64
+ context "when PACT_BROKER_FEATURES does not include the given string" do
65
+ before do
66
+ allow(ENV).to receive(:[]).with('PACT_BROKER_FEATURES').and_return(nil)
67
+ end
68
+
69
+ it { is_expected.to be false }
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -57,50 +57,6 @@ module PactBroker
57
57
  end
58
58
  end
59
59
  end
60
- describe "refresh", migration: true do
61
- before do
62
- PactBroker::Database.migrate
63
- end
64
-
65
- let(:td) { TestDataBuilder.new(auto_refresh_matrix: false) }
66
-
67
- before do
68
- td.create_pact_with_hierarchy("Foo", "1", "Bar")
69
- end
70
-
71
- context "with a consumer pacticipant_id and a consumer tag_name" do
72
- before do
73
- td.create_consumer_version_tag("prod")
74
- Row.refresh(ids)
75
- end
76
- let(:ids) { { pacticipant_id: td.consumer.id, tag_name: "prod"} }
77
-
78
- subject { HeadRow.refresh(ids) }
79
-
80
- it "refreshes the data for the consumer and consumer tag in the head matrix" do
81
- subject
82
- expect(HeadRow.all.collect(&:values)).to contain_hash(provider_name: "Bar", consumer_name: "Foo", consumer_version_tag_name: "prod")
83
- end
84
- end
85
-
86
- context "with a provider pacticipant_id and a provider tag_name" do
87
- before do
88
- td.create_verification(provider_version: "2")
89
- .use_provider_version("2")
90
- .create_provider_version_tag("prod")
91
- Row.refresh(ids)
92
- end
93
-
94
- let(:ids) { { pacticipant_id: td.consumer.id, tag_name: "prod" } }
95
-
96
- subject { HeadRow.refresh(ids) }
97
-
98
- it "does not update the head matrix as the head matrix only contains consumer tags" do
99
- subject
100
- expect(HeadRow.count).to eq 0
101
- end
102
- end
103
- end
104
60
  end
105
61
  end
106
62
  end