scottwillson/racing_on_rails

View on GitHub
test_ruby/models/competitions/calculations/teams_test.rb

Summary

Maintainability
C
1 day
Test Coverage
# frozen_string_literal: true

require_relative "../../../../app/models/competitions/calculations/calculator"
require_relative "calculations_test"

# :stopdoc:
module Competitions
  module Calculations
    class TeamsTest < CalculationsTest
      def test_apply_team_sizes_empty
        assert_equal_results [], Calculator.apply_team_sizes([], {})
      end

      def test_apply_team_sizes
        expected = [
          result(place: 1, race_id: 1, team_size: 2),
          result(place: 1, race_id: 1, team_size: 2),
          result(place: 2, race_id: 1, team_size: 1),
          result(place: 3, race_id: 1, team_size: 3),
          result(place: 3, race_id: 1, team_size: 3),
          result(place: 3, race_id: 1, team_size: 3),
          result(place: 1, race_id: 2, team_size: 1)
        ]
        results = [
          result(place: 1, race_id: 1),
          result(place: 1, race_id: 1),
          result(place: 2, race_id: 1),
          result(place: 3, race_id: 1),
          result(place: 3, race_id: 1),
          result(place: 3, race_id: 1),
          result(place: 1, race_id: 2)
        ]
        assert_equal_results expected, Calculator.apply_team_sizes(results, {})
      end

      def test_honor_existing_team_size
        expected = [
          result(place: 1, race_id: 1, team_size: 1),
          result(place: 1, race_id: 1, team_size: 1),
          result(place: 2, race_id: 1, team_size: 1),
          result(place: 3, race_id: 1, team_size: 1),
          result(place: 3, race_id: 1, team_size: 1),
          result(place: 3, race_id: 1, team_size: 1),
          result(place: 1, race_id: 2, team_size: 1)
        ]
        results = [
          result(place: 1, race_id: 1, team_size: 1),
          result(place: 1, race_id: 1, team_size: 1),
          result(place: 2, race_id: 1, team_size: 1),
          result(place: 3, race_id: 1, team_size: 1),
          result(place: 3, race_id: 1, team_size: 1),
          result(place: 3, race_id: 1, team_size: 1),
          result(place: 1, race_id: 2, team_size: 1)
        ]
        assert_equal_results expected, Calculator.apply_team_sizes(results, {})
      end

      # Don't mistake ties for teams
      def test_apply_team_sizes_not_team_event
        expected = [
          result(place: 1, race_id: 1, team_size: 1, participant_id: 1, field_size: 5),
          result(place: 2, race_id: 1, team_size: 1, participant_id: 2, field_size: 5),
          result(place: 2, race_id: 1, team_size: 1, participant_id: 3, field_size: 5),
          result(place: 3, race_id: 1, team_size: 1, participant_id: 4, field_size: 5),
          result(place: 4, race_id: 1, team_size: 1, participant_id: 5, field_size: 5),
          result(place: 1, race_id: 2, team_size: 1, participant_id: 6, field_size: 1)
        ]
        results = [
          result(place: 1, race_id: 1, participant_id: 1, field_size: 5),
          result(place: 2, race_id: 1, participant_id: 2, field_size: 5),
          result(place: 2, race_id: 1, participant_id: 3, field_size: 5),
          result(place: 3, race_id: 1, participant_id: 4, field_size: 5),
          result(place: 4, race_id: 1, participant_id: 5, field_size: 5),
          result(place: 1, race_id: 2, participant_id: 6, field_size: 1)
        ]
        assert_equal_results expected, Calculator.apply_team_sizes(results, {})
      end

      def test_apply_team_sizes_not_team_event_small_event
        expected = [
          result(place: 1, race_id: 1, team_size: 3, participant_id: 1, field_size: 3),
          result(place: 1, race_id: 1, team_size: 3, participant_id: 2, field_size: 3),
          result(place: 1, race_id: 1, team_size: 3, participant_id: 3, field_size: 3)
        ]
        results = [
          result(place: 1, race_id: 1, participant_id: 1, field_size: 3),
          result(place: 1, race_id: 1, participant_id: 2, field_size: 3),
          result(place: 1, race_id: 1, participant_id: 3, field_size: 3)
        ]
        assert_equal_results expected, Calculator.apply_team_sizes(results, {})

        expected = [
          result(place: 1, race_id: 1, team_size: 3, participant_id: 1, field_size: 4),
          result(place: 1, race_id: 1, team_size: 3, participant_id: 2, field_size: 4),
          result(place: 1, race_id: 1, team_size: 3, participant_id: 3, field_size: 4),
          result(place: 2, race_id: 1, team_size: 1, participant_id: 4, field_size: 4)
        ]
        results = [
          result(place: 1, race_id: 1, participant_id: 1, field_size: 4),
          result(place: 1, race_id: 1, participant_id: 2, field_size: 4),
          result(place: 1, race_id: 1, participant_id: 3, field_size: 4),
          result(place: 2, race_id: 1, participant_id: 4, field_size: 4)
        ]
        assert_equal_results expected, Calculator.apply_team_sizes(results, {})

        expected = [
          result(place: 1, race_id: 1, team_size: 2, participant_id: 1, field_size: 1),
          result(place: 1, race_id: 1, team_size: 2, participant_id: 2, field_size: 1),
          result(place: 1, race_id: 2, team_size: 1, participant_id: 1, field_size: 1),
          result(place: 2, race_id: 3, team_size: 1, participant_id: 2, field_size: 4),
          result(place: 3, race_id: 4, team_size: 1, participant_id: 3, field_size: 4),
          result(place: 4, race_id: 4, team_size: 1, participant_id: 4, field_size: 4)
        ]
        results = [
          result(place: 1, race_id: 1, participant_id: 1, field_size: 1),
          result(place: 1, race_id: 1, participant_id: 2, field_size: 1),
          result(place: 1, race_id: 2, participant_id: 1, field_size: 1),
          result(place: 2, race_id: 3, participant_id: 2, field_size: 4),
          result(place: 3, race_id: 4, participant_id: 3, field_size: 4),
          result(place: 4, race_id: 4, participant_id: 4, field_size: 4)
        ]
        assert_equal_results expected, Calculator.apply_team_sizes(results, {})
      end
    end
  end
end