Raise exceptions upon error in group_stage_service

This commit is contained in:
Daniel Schädler 2019-05-01 16:10:55 +02:00
parent 0f7279de97
commit db1518bdbd
4 changed files with 31 additions and 15 deletions

View File

@ -7,10 +7,11 @@ class AddGroupStageToTournament
tournament = context.tournament
groups = context.groups
context.fail! unless tournament.stages.empty?
if (group_stage = GroupStageService.generate_group_stage(groups))
begin
group_stage = GroupStageService.generate_group_stage(groups)
tournament.stages = [group_stage]
context.tournament = tournament
else
rescue StandardError
context.fail!
end
end

View File

@ -2,15 +2,13 @@
class GroupStageService
def self.generate_group_stage(groups)
return false if groups.length.zero?
raise 'Cannot generate group stage without groups' if groups.length.zero?
average_group_size = (groups.flatten.length.to_f / groups.length.to_f)
if (average_group_size % 1).zero?
raise 'Groups need to be equal size' unless (average_group_size % 1).zero?
groups = groups.map(&method(:get_group_object_from))
Stage.new level: -1, groups: groups
else
false
end
end
def self.get_group_object_from(team_array)

View File

@ -35,14 +35,26 @@ RSpec.describe AddGroupStageToTournament do
end
end
context 'playoff generation fails' do
context 'empty groups' do
before do
expect(class_double('GroupStageService').as_stubbed_const(transfer_nested_constants: true))
.to receive(:generate_group_stage).with(@groups)
.and_return(false)
.and_raise('Cannot generate group stage without groups')
end
it 'fails' do
it 'playoff generation fails' do
expect(empty_tournament_context).to be_a_failure
end
end
context 'unequal group sizes' do
before do
expect(class_double('GroupStageService').as_stubbed_const(transfer_nested_constants: true))
.to receive(:generate_group_stage).with(@groups)
.and_raise('Groups need to be equal size')
end
it 'playoff generation fails' do
expect(empty_tournament_context).to be_a_failure
end
end

View File

@ -23,11 +23,16 @@ RSpec.describe GroupStageService do
expect(group_stage_teams).to match_array(@groups.flatten)
end
it 'returns false when given different sizes of groups' do
it 'raises exception when given different sizes of groups' do
unequal_groups = @groups
unequal_groups.first.pop
group_stage = GroupStageService.generate_group_stage(@groups)
expect(group_stage).to eq(false)
expect { GroupStageService.generate_group_stage(unequal_groups) }
.to raise_exception 'Groups need to be equal size'
end
it 'raises exception when given no groups' do
expect { GroupStageService.generate_group_stage([]) }
.to raise_exception 'Cannot generate group stage without groups'
end
end