Skip to content

Commit 53bea8b

Browse files
committed
fix: gracefully handle attempt to create a duplicate tag
1 parent 4af4ed1 commit 53bea8b

File tree

3 files changed

+43
-2
lines changed

3 files changed

+43
-2
lines changed

lib/pact_broker/tags/repository.rb

+8-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,14 @@ class Repository
99
include PactBroker::Repositories::Helpers
1010

1111
def create args
12-
Domain::Tag.new(name: args.fetch(:name), version: args.fetch(:version)).save
12+
params = {
13+
name: args.fetch(:name),
14+
version_id: args.fetch(:version).id,
15+
created_at: Sequel.datetime_class.now,
16+
updated_at: Sequel.datetime_class.now
17+
}
18+
Domain::Tag.dataset.insert_ignore.insert(params)
19+
Domain::Tag.find(name: args[:name], version_id: args[:version].id)
1320
end
1421

1522
def find args

spec/lib/pact_broker/tags/repository_spec.rb

+34-1
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,42 @@
44
module PactBroker
55
module Tags
66
describe Repository do
7-
87
let(:td) { TestDataBuilder.new }
98

9+
describe ".create" do
10+
before do
11+
td.create_pacticipant("foo")
12+
.create_version("1")
13+
end
14+
15+
let(:params) { { name: "prod", version: td.version } }
16+
17+
subject { Repository.new.create(params) }
18+
19+
it "returns a tag" do
20+
expect(subject).to be_a(Domain::Tag)
21+
end
22+
23+
it "sets the properties" do
24+
expect(subject.name).to eq "prod"
25+
expect(subject.version.id).to eq td.version.id
26+
end
27+
28+
context "when the tag already exists" do
29+
before do
30+
td.create_tag("prod")
31+
end
32+
33+
it "does nothing" do
34+
expect { subject }.to_not change { Domain::Tag.count }
35+
end
36+
37+
it "returns a tag" do
38+
expect(subject).to be_a(Domain::Tag)
39+
end
40+
end
41+
end
42+
1043
describe ".find" do
1144

1245
let(:pacticipant_name) { "test_pacticipant" }

spec/support/test_data_builder.rb

+1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class TestDataBuilder
3535
attr_reader :provider
3636
attr_reader :consumer_version
3737
attr_reader :provider_version
38+
attr_reader :version
3839
attr_reader :pact
3940
attr_reader :verification
4041
attr_reader :webhook

0 commit comments

Comments
 (0)