From db1518bdbd5ea77afadc46bcecd6ca3f5813a4ea Mon Sep 17 00:00:00 2001 From: Malaber <32635600+Malaber@users.noreply.github.com> Date: Wed, 1 May 2019 16:10:55 +0200 Subject: [PATCH] Raise exceptions upon error in group_stage_service --- .../add_group_stage_to_tournament.rb | 5 +++-- app/services/group_stage_service.rb | 12 +++++------- ...roup_stage_to_tournament_interactor_spec.rb | 18 +++++++++++++++--- spec/services/group_stage_service_spec.rb | 11 ++++++++--- 4 files changed, 31 insertions(+), 15 deletions(-) diff --git a/app/interactors/add_group_stage_to_tournament.rb b/app/interactors/add_group_stage_to_tournament.rb index 77956f6..14b798c 100644 --- a/app/interactors/add_group_stage_to_tournament.rb +++ b/app/interactors/add_group_stage_to_tournament.rb @@ -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 diff --git a/app/services/group_stage_service.rb b/app/services/group_stage_service.rb index 0af32b3..f31d14c 100644 --- a/app/services/group_stage_service.rb +++ b/app/services/group_stage_service.rb @@ -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? - groups = groups.map(&method(:get_group_object_from)) - Stage.new level: -1, groups: groups - else - false - end + 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 end def self.get_group_object_from(team_array) diff --git a/spec/interactors/add_group_stage_to_tournament_interactor_spec.rb b/spec/interactors/add_group_stage_to_tournament_interactor_spec.rb index 1c14d49..b64c752 100644 --- a/spec/interactors/add_group_stage_to_tournament_interactor_spec.rb +++ b/spec/interactors/add_group_stage_to_tournament_interactor_spec.rb @@ -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 diff --git a/spec/services/group_stage_service_spec.rb b/spec/services/group_stage_service_spec.rb index 6b82724..f88f598 100644 --- a/spec/services/group_stage_service_spec.rb +++ b/spec/services/group_stage_service_spec.rb @@ -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