Skip to content

Commit b679cde

Browse files
committed
feat: add host management methods to WorkshopSponsor
Adds methods for managing sponsor host status: - set_as_host! - designates sponsor as workshop host - remove_as_host! - removes host designation Includes unit tests.
1 parent 911692a commit b679cde

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

app/models/workshop_sponsor.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,12 @@ class WorkshopSponsor < ApplicationRecord
33
belongs_to :workshop
44

55
validates :sponsor_id, uniqueness: { scope: :workshop_id, message: :already_sponsoring }
6+
7+
def set_as_host!
8+
update!(host: true)
9+
end
10+
11+
def remove_as_host!
12+
update!(host: false)
13+
end
614
end
Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,37 @@
11
RSpec.describe WorkshopSponsor do
22
context 'validates' do
33
it 'sponsor_id for uniqueness' do
4-
is_expected.to validate_uniqueness_of(:sponsor_id)
4+
expect(subject).to validate_uniqueness_of(:sponsor_id)
55
.scoped_to(:workshop_id)
66
.with_message('already a sponsor')
77
end
88
end
9+
10+
describe '#set_as_host!' do
11+
let(:workshop_sponsor) { Fabricate(:workshop_sponsor, host: false) }
12+
13+
it 'sets host to true' do
14+
workshop_sponsor.set_as_host!
15+
expect(workshop_sponsor.reload.host).to be true
16+
end
17+
18+
it 'raises RecordInvalid on validation failure' do
19+
allow(workshop_sponsor).to receive(:valid?).and_return(false)
20+
expect { workshop_sponsor.set_as_host! }.to raise_error(ActiveRecord::RecordInvalid)
21+
end
22+
end
23+
24+
describe '#remove_as_host!' do
25+
let(:workshop_sponsor) { Fabricate(:workshop_sponsor, host: true) }
26+
27+
it 'sets host to false' do
28+
workshop_sponsor.remove_as_host!
29+
expect(workshop_sponsor.reload.host).to be false
30+
end
31+
32+
it 'raises RecordInvalid on validation failure' do
33+
allow(workshop_sponsor).to receive(:valid?).and_return(false)
34+
expect { workshop_sponsor.remove_as_host! }.to raise_error(ActiveRecord::RecordInvalid)
35+
end
36+
end
937
end

0 commit comments

Comments
 (0)