wip please dont push me

This commit is contained in:
Daniel Schädler 2019-05-12 18:50:23 +02:00
parent db22a01039
commit df19c85196
8 changed files with 79 additions and 46 deletions

View File

@ -31,6 +31,7 @@ class Match < ApplicationRecord
private
def evaluate_winner
return nil unless finished?
return nil if match_scores.first.points == match_scores.second.points
match_scores.max_by(&:points).team

View File

@ -114,18 +114,14 @@ class PlayoffStageService
match_scores = winners.map { |winner| MatchScore.new(team: winner) }
when 1
# when 1 match_score is present, we need to check which team is contained within and add the other team as well
team = nil
if match_scores.first.team == winners.first
team = winners.second
match_scores.push MatchScore.new(team: winners.second)
elsif match_scores.first.team == winners.second
team = winners.first
match_scores.push MatchScore.new(team: winners.first)
else
match_scores.first.team = winners.first
team = winners.second
match_scores.push MatchScore.new(team: winners.second)
end
match_scores.concat MatchScore.new(team: team)
when 2
# when 2 match_scores are present, the teams just get overwritten
match_scores.first.team = winners.first
@ -136,12 +132,6 @@ class PlayoffStageService
def self.get_winners_of(companion_match, current_match)
matches = [current_match, companion_match].sort_by(&:position)
if companion_match.finished?
matches.map(&:winner)
else
matches.map do |m|
m == current_match ? m.winner : nil
end
end
matches.map(&:winner)
end
end

View File

@ -1,26 +1,5 @@
# frozen_string_literal: true
require 'faker'
require 'factorybot'
user = User.create! username: Faker::Internet.username, email: Faker::Internet.email, password: Faker::Internet.password
tournament = user.tournaments.create! name: Faker::Creature::Dog.name
@teams = []
16.times do
team = tournament.teams.create! name: Faker::HarryPotter.character
@teams << team
end
4.times do |i|
stage = tournament.stages.create!
stage.level = i
matches_amount = 2**i
matches_amount.times do |j|
match = stage.matches.create!
match.match_scores.create! team: @teams.sample, points: rand(10)
match.match_scores.create! team: @teams.sample, points: rand(10)
match.position = j
match.state = rand(7)
match.save!
end
stage.save!
end
create(:tournament)

View File

@ -92,7 +92,8 @@ RSpec.describe MatchesController, type: :controller do
end
it 'fills the match below' do
match_below = @tournament.stages.find { |s| s.level == 2 }.matches.find { |m| m.position == @running_playoff_match.position / 2 }.reload
match_below = @tournament.stages.find { |s| s.level == 2 }
.find { |m| m.position == @running_playoff_match.position / 2 }.reload
expect(match_below.teams).to include(@running_playoff_match.winner)
end
end

View File

@ -28,13 +28,17 @@ FactoryBot.define do
after(:create) do |tournament, evaluator|
# this is basically a manual create_list as we need to count up the level of the stage
levels = 1..evaluator.stage_count
tournament.stages.concat levels
.map { |level|
create(:playoff_stage,
level: level,
match_count: -1,
match_type: level == evaluator.stage_count ? :running_playoff_match : :empty_prepared_playoff_match)
}
tournament.stages.concat(levels.map do |level|
create(:playoff_stage,
level: level,
match_count: -1,
match_type: if evaluator.stage_count
:running_playoff_match
else
:empty_prepared_playoff_match
end)
end)
end
factory :group_stage_tournament do

View File

@ -0,0 +1,15 @@
# frozen_string_literal: true
RSpec.describe AddGroupStageToTournament do
before do
# @empty_tournament = create(:stage_tournament, stage_count: 0)
end
context 'Hello, this' do
context 'is a dummy and it' do
it 'succeeds' do
expect(true).to be(true)
end
end
end
end

View File

@ -80,4 +80,45 @@ RSpec.describe PlayoffStageService do
end
end
end
describe '# populate_match_below' do
before do
@tournament = create(:stage_tournament, stage_count: 2)
@match = @tournament.stages.find { |s| s.level == 2 }.matches.first
@match.state = :finished
@match.save
@companion_match = @tournament.stages.find { |s| s.level == 2 }.matches.second
@match_to_find = @tournament.stages.find { |s| s.level == 1 }.matches.first
end
context 'match below has no match_scores' do
it 'finds the correct match and adds two new match_scores to it' do
@match_to_find.match_scores = []
@match_to_find.save
PlayoffStageService.populate_match_below(@match)
@match_to_find.reload
expect(@match_to_find.teams).to match_array(@match.winner)
end
end
context 'match below has one match_score with the winning team' do
it 'finds the correct match and adds no match_score' do
@match_to_find.match_scores = create_list(:match_score, 1, team: @match.winner)
@match_to_find.save
PlayoffStageService.populate_match_below(@match)
@match_to_find.reload
expect(@match_to_find.teams).to match_array(@match.winner)
end
end
context 'match below has one match_score with an unknown team' ,focus: true do
it 'finds the correct match and adds no match_score' do
@match_to_find.match_scores = create_list(:match_score, 1, team: create(:team))
@match_to_find.save
PlayoffStageService.populate_match_below(@match)
@match_to_find.reload
expect(@match_to_find.teams).to match_array(@match.winner)
end
end
end
end

View File

@ -23,8 +23,10 @@ RSpec.configure do |config|
# assertion/expectation library such as wrong or the stdlib/minitest
# assertions if you prefer.
# config.before(:suite) { FactoryBot.lint }
# only runs tests with " , focus: true "
# config.filter_run focus: true
config.filter_run focus: true
config.expect_with :rspec do |expectations|
# This option will default to `true` in RSpec 4. It makes the `description`