From 4e72d015ff2d7b8a13c08a7a33dc0733a8084fc4 Mon Sep 17 00:00:00 2001 From: Malaber <32635600+Malaber@users.noreply.github.com> Date: Sun, 16 Jun 2019 17:31:34 +0200 Subject: [PATCH] Implement method to check if stage is over --- app/models/stage.rb | 10 ++++++++ spec/models/stage_spec.rb | 54 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/app/models/stage.rb b/app/models/stage.rb index f29d661..8e4267f 100644 --- a/app/models/stage.rb +++ b/app/models/stage.rb @@ -18,4 +18,14 @@ class Stage < ApplicationRecord [] end end + + def over? + return matches.find { |m| m.state != 'finished' }.nil? unless matches.size.zero? + + unless groups.size.zero? && groups.map(&:matches).flatten.size.zero? + return groups.map(&:matches).flatten.find { |m| m.state != 'finished' }.nil? + end + + false + end end diff --git a/spec/models/stage_spec.rb b/spec/models/stage_spec.rb index ac1dc72..569fec2 100644 --- a/spec/models/stage_spec.rb +++ b/spec/models/stage_spec.rb @@ -40,4 +40,58 @@ RSpec.describe Stage, type: :model do end end end + + describe '#over?' do + context 'group stage' do + context 'with unfinished matches' do + it 'returns false' do + expect(create(:group_stage).over?).to eq(false) + end + end + + context 'with all matches finished' do + let(:finished_group_stage) do + group_stage = create(:group_stage) + group_stage.groups.map(&:matches).flatten.each do |m| + m.state = :finished + m.save! + end + group_stage + end + + it 'returns true' do + expect(finished_group_stage.over?).to eq(true) + end + end + end + + context 'playoff stage' do + context 'with unfinished matches' do + it 'returns false' do + expect(create(:playoff_stage).over?).to eq(false) + end + end + + context 'with all matches finished' do + let(:finished_playoff_stage) do + playoff_stage = create(:playoff_stage) + playoff_stage.matches.each do |m| + m.state = :finished + m.save! + end + playoff_stage + end + + it 'returns true' do + expect(finished_playoff_stage.over?).to eq(true) + end + end + end + + context 'empty stage' do + it 'returns false' do + expect(create(:stage).over?).to eq(false) + end + end + end end