diff --git a/app/models/tournament.rb b/app/models/tournament.rb index 68b8495..3813f08 100644 --- a/app/models/tournament.rb +++ b/app/models/tournament.rb @@ -12,7 +12,16 @@ class Tournament < ApplicationRecord alias_attribute :owner, :user - after_initialize do |tournament| - tournament.code ||= SecureRandom.hex 3 + after_initialize :generate_code + + private + + def generate_code + return unless code.nil? + + loop do + self.code = SecureRandom.hex(3) + break if errors['code'].blank? + end end end diff --git a/spec/models/tournament_spec.rb b/spec/models/tournament_spec.rb index 5182e11..09a43af 100644 --- a/spec/models/tournament_spec.rb +++ b/spec/models/tournament_spec.rb @@ -10,7 +10,10 @@ RSpec.describe Tournament, type: :model do describe 'validation' do it { should validate_presence_of :name } it { should validate_presence_of :code } - it { should validate_uniqueness_of :code } + it do + tournament = create(:tournament, code: Faker::Dog.name) + expect(tournament).to validate_uniqueness_of :code + end it { should_not validate_presence_of :description } it { should_not validate_presence_of :public } end