scottwillson/racing_on_rails

View on GitHub
test_ruby/models/calculations/v3/steps/select_members_test.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

require_relative "../../v3"

module Calculations
  module V3
    module Steps
      # :stopdoc:
      class SelectMembersTest < Ruby::TestCase
        def test_calculate
          category = Models::Category.new("Women")
          rules = Rules.new(
            category_rules: [Models::CategoryRule.new(category)],
            members_only: true
          )
          calculator = Calculator.new(rules: rules, source_results: [])
          event_category = calculator.event_categories.first

          source_result = Models::SourceResult.new(id: 33, event_category: Models::EventCategory.new(category), place: 1, points: 100)
          membership = (Date.new(2018, 1, 1))..(Date.new(2018, 12, 31))
          participant = Models::Participant.new(1, membership: membership)
          result = Models::CalculatedResult.new(participant, [source_result])
          event_category.results << result

          event_categories = SelectMembers.calculate!(calculator)

          assert_equal 1, event_categories.first.results.size
          result = event_categories.first.results.first
          assert result.rejected?
          assert_equal :members_only, result.rejection_reason
        end

        def test_calculate_different_year
          category = Models::Category.new("Women")
          rules = Rules.new(
            category_rules: [Models::CategoryRule.new(category)],
            members_only: true
          )
          calculator = Calculator.new(rules: rules, source_results: [], year: 2018)
          event_category = calculator.event_categories.first

          source_result = Models::SourceResult.new(id: 33, event_category: Models::EventCategory.new(category), place: 1, points: 100)
          membership = (Date.new(2018, 1, 1))..(Date.new(2018, 12, 31))
          participant = Models::Participant.new(1, membership: membership)
          result = Models::CalculatedResult.new(participant, [source_result])
          event_category.results << result

          event_categories = SelectMembers.calculate!(calculator)

          assert_equal 1, event_categories.first.results.size
          result = event_categories.first.results.first
          refute result.rejected?
        end

        def test_calculate_non_members_count
          category = Models::Category.new("Women")
          rules = Rules.new(
            category_rules: [Models::CategoryRule.new(category)],
            members_only: false
          )
          calculator = Calculator.new(rules: rules, source_results: [])
          event_category = calculator.event_categories.first

          source_result = Models::SourceResult.new(id: 33, event_category: Models::EventCategory.new(category), place: 1, points: 100)
          membership = (Date.new(2018, 1, 1))..(Date.new(2018, 12, 31))
          participant = Models::Participant.new(1, membership: membership)
          result = Models::CalculatedResult.new(participant, [source_result])
          event_category.results << result

          event_categories = SelectMembers.calculate!(calculator)

          assert_equal 1, event_categories.first.results.size
          result = event_categories.first.results.first
          refute result.rejected?
        end
      end
    end
  end
end