46 lines
1.2 KiB
Ruby
46 lines
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
|
|
RSpec.describe Beamer, type: :model do
|
|
describe 'validation' do
|
|
it { should validate_presence_of :name }
|
|
it { should validate_presence_of :display_state }
|
|
|
|
it 'validates uniqueness of name scoped to tournament' do
|
|
beamer = create(:beamer)
|
|
duplicate = build(:beamer, name: beamer.name, tournament: beamer.tournament)
|
|
expect(duplicate).not_to be_valid
|
|
end
|
|
|
|
it 'allows same name in different tournaments' do
|
|
beamer = create(:beamer, name: 'projector')
|
|
other = build(:beamer, name: 'projector', tournament: create(:tournament))
|
|
expect(other).to be_valid
|
|
end
|
|
|
|
it 'validates display_state inclusion' do
|
|
beamer = build(:beamer, display_state: 'invalid_state')
|
|
expect(beamer).not_to be_valid
|
|
end
|
|
|
|
Beamer::DISPLAY_STATES.each do |state|
|
|
it "accepts display_state '#{state}'" do
|
|
beamer = build(:beamer, display_state: state)
|
|
expect(beamer).to be_valid
|
|
end
|
|
end
|
|
end
|
|
|
|
describe 'association' do
|
|
it { should belong_to :tournament }
|
|
end
|
|
|
|
describe '#owner' do
|
|
it 'delegates to tournament' do
|
|
beamer = create(:beamer)
|
|
expect(beamer.owner).to eq(beamer.tournament.owner)
|
|
end
|
|
end
|
|
end
|