59 lines
1.6 KiB
Ruby
59 lines
1.6 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 'scopes' do
|
|
describe '.default_beamer' do
|
|
it 'returns only default beamers' do
|
|
tournament = create(:tournament)
|
|
default = create(:default_beamer, tournament: tournament)
|
|
create(:beamer, tournament: tournament)
|
|
|
|
result = tournament.beamers.default_beamer
|
|
expect(result).to contain_exactly(default)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '#owner' do
|
|
it 'delegates to tournament' do
|
|
beamer = create(:beamer)
|
|
expect(beamer.owner).to eq(beamer.tournament.owner)
|
|
end
|
|
end
|
|
end
|