Skip to content

Commit d520e22

Browse files
committed
feat: add consumer_id to pact_publications table
1 parent fa827c4 commit d520e22

8 files changed

+102
-2
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
Sequel.migration do
2+
change do
3+
alter_table(:pact_publications) do
4+
add_foreign_key(:consumer_id, :pacticipants)
5+
add_index(:consumer_id, name: "pact_publications_consumer_id_index")
6+
end
7+
8+
# TODO
9+
# alter_table(:pact_publications) do
10+
# set_column_not_null(:consumer_id)
11+
# end
12+
end
13+
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
require 'pact_broker/db/data_migrations/set_consumer_ids_for_pact_publications'
2+
3+
Sequel.migration do
4+
up do
5+
PactBroker::DB::DataMigrations::SetConsumerIdsForPactPublications.call(self)
6+
end
7+
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
module PactBroker
2+
module DB
3+
module DataMigrations
4+
class SetConsumerIdsForPactPublications
5+
def self.call connection
6+
if columns_exist?(connection)
7+
ids = connection.from(:pact_publications)
8+
.select(Sequel[:pact_publications][:id], Sequel[:versions][:pacticipant_id].as(:consumer_id))
9+
.join(:versions, {id: :consumer_version_id})
10+
.where(Sequel[:pact_publications][:consumer_id] => nil)
11+
12+
ids.each do | id |
13+
connection.from(:pact_publications).where(id: id[:id]).update(consumer_id: id[:consumer_id])
14+
end
15+
end
16+
end
17+
18+
def self.columns_exist?(connection)
19+
column_exists?(connection, :pact_publications, :consumer_id) &&
20+
column_exists?(connection, :pact_publications, :id) &&
21+
column_exists?(connection, :versions, :id) &&
22+
column_exists?(connection, :versions, :pacticipant_id)
23+
end
24+
25+
def self.column_exists?(connection, table, column)
26+
connection.table_exists?(table) && connection.schema(table).find{|col| col.first == column }
27+
end
28+
end
29+
end
30+
end
31+
end

lib/pact_broker/db/migrate_data.rb

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1-
require 'pact_broker/db/data_migrations/set_pacticipant_ids_for_verifications'
1+
Dir.glob(File.expand_path(File.join(__FILE__, "..", "data_migrations", "*.rb"))).sort.each do | path |
2+
require path
3+
end
24

35
module PactBroker
46
module DB
57
class MigrateData
68
def self.call database_connection, options = {}
79
DataMigrations::SetPacticipantIdsForVerifications.call(database_connection)
10+
DataMigrations::SetConsumerIdsForPactPublications.call(database_connection)
811
end
912
end
1013
end

lib/pact_broker/pacts/repository.rb

+2
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ def create params
2323
PactPublication.new(
2424
consumer_version_id: params[:version_id],
2525
provider_id: params[:provider_id],
26+
consumer_id: params[:consumer_id],
2627
pact_version: find_or_create_pact_version(params.fetch(:consumer_id), params.fetch(:provider_id), params[:json_content]),
2728
).save.to_domain
2829
end
@@ -33,6 +34,7 @@ def update id, params
3334
if existing_model.pact_version_id != pact_version.id
3435
PactPublication.new(
3536
consumer_version_id: existing_model.consumer_version_id,
37+
consumer_id: existing_model.consumer_id,
3638
provider_id: existing_model.provider_id,
3739
revision_number: (existing_model.revision_number + 1),
3840
pact_version: pact_version,
Original file line numberDiff line numberDiff line change
@@ -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

spec/lib/pact_broker/pacts/repository_spec.rb

+5
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ module Pacts
2424
expect{subject}.to change{ PactPublication.count }.by(1)
2525
end
2626

27+
it "sets the consumer_id" do
28+
subject
29+
expect(PactPublication.first.consumer_id).to eq consumer.id
30+
end
31+
2732
it "returns a Pact::Model" do
2833
expect(subject).to be_instance_of(PactBroker::Domain::Pact)
2934
end

spec/migrations/44_add_provider_version_to_verification_spec.rb

-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
let(:now) { DateTime.new(2018, 2, 2) }
77
let!(:consumer) { create(:pacticipants, {name: 'Consumer', created_at: now, updated_at: now}) }
88
let!(:provider) { create(:pacticipants, {name: 'Provider', created_at: now, updated_at: now}) }
9-
let!(:provider) { create(:pacticipants, {name: 'Provider', created_at: now, updated_at: now}) }
109
let!(:consumer_version) { create(:versions, {number: '1.2.3', order: 1, pacticipant_id: consumer[:id], created_at: now, updated_at: now}) }
1110
let!(:pact_version) { create(:pact_versions, {content: {some: 'json'}.to_json, sha: '1234', consumer_id: consumer[:id], provider_id: provider[:id], created_at: now}) }
1211
let!(:pact_publication) do

0 commit comments

Comments
 (0)