ministryofjustice/hwf-calculator

View on GitHub
test_common/helpers/setup.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Calculator
  module Test
    module Setup
      QUESTIONS = [
        :all,
        :marital_status, :court_fee, :date_of_birth, :disposable_capital,
        :benefits, :number_of_children, :total_income
      ].freeze

      attr_accessor :user

      def answer_up_to(question)
        unless QUESTIONS.include?(question)
          raise "Unknown question :#{question} - Must be one of #{QUESTIONS.join(', ')}"
        end
        start_calculator_session
        QUESTIONS[1..QUESTIONS.index(question) - 1].each do |q|
          answer_question(q)
        end
      end

      def answer_question(question)
        send "answer_#{question}_question".to_sym
      end

      def answer_disposable_capital_question
        disposable_capital_page.disposable_capital.set(user.disposable_capital)
        disposable_capital_page.next
      end

      def answer_date_of_birth_question
        date_of_birth_page.date_of_birth.set(user.date_of_birth)
        if user.partner_date_of_birth.present?
          date_of_birth_page.partner_date_of_birth.set(user.partner_date_of_birth)
        end
        date_of_birth_page.next
      end

      def answer_benefits_question
        income_benefits_page.benefits.set(user.income_benefits)
        income_benefits_page.next
      end

      def answer_number_of_children_question
        number_of_children_page.number_of_children.set(user.number_of_children)
        number_of_children_page.next
      end

      def answer_total_income_question
        total_income_page.total_income.set(user.monthly_gross_income)
        total_income_page.next
      end

      def answer_all_questions
        answer_up_to(:all)
      end

      def start_calculator_session
        load_start_page
        start_page.start_session
      end

      def load_start_page(in_language: ::Calculator::Test::Messaging.instance.current_locale)
        my_page = start_page
        my_page.load_page
        case in_language
        when :cy then my_page.switch_to_welsh
        when :en then nil
        else raise "We only support languages en and cy - #{in_language} is not supported"
        end
      end

      def answer_marital_status_question
        marital_status_page.marital_status.set(user.marital_status)
        marital_status_page.next
      end

      def answer_court_fee_question
        court_fee_page.fee.set(user.fee)
        court_fee_page.next
      end

      def given_i_am(user_name)
        return self.user = OpenStruct.new if user_name.to_sym == :anonymous
        self.user = personas.fetch(user_name)
        user.marital_status = user.marital_status.to_sym
        user.date_of_birth = (user.age.to_i.years.ago - 10.days).strftime('%-d/%-m/%Y')
        if user.partner_age.present?
          user.partner_date_of_birth = (user.partner_age.to_i.years.ago - 10.days).strftime('%-d/%-m/%Y')
        end
        return if user.income_benefits.nil?
        user.income_benefits.map!(&:to_sym)
      end

      def all_questions
        QUESTIONS - [:all]
      end
    end
  end
end