Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
uoy-faculty-spec-helpers / lib / faculty / fluent_student_helper.rb
Size: Mime:
# frozen_string_literal: true

require_relative 'database_helper'
require_relative 'fluent_helper'
require_relative 'fluent_module_helper'

module Faculty
  # Spec helper module for creating module records for spec testing
  module FluentStudentHelper
    # Class for tracking state of a fluent module specification
    class FluentStudentRecord < FluentHelper
      include FluentModuleHelper

      def initialize(**params)
        super()
        @student_code = params[:code]
        @username = params[:username]
        insert dbt.sits.student, params
      end

      def on_course(**params)
        params[:join_code] ||= "#{@student_code}/1"
        params[:route_code] ||= 'Uroute'
        @join_code = params[:join_code]
        maybe_insert dbt.sits.route, code: params[:route_code]
        insert dbt.sits.student_course, params, student_code: @student_code
        self
      end

      def with_enrolment(**params)
        params[:department_code] ||= '5050'
        maybe_insert dbt.sits.department, code: params[:department_code]
        insert dbt.sits.enrolment, params, join_code: @join_code
        self
      end

      def in(**params)
        params[:department_code] ||= '5050'
        maybe_insert dbt.sits.department, code: params[:department_code]
        insert dbt.sits.student_course_department, params, join_code: @join_code
        self
      end

      def with_person(**params)
        params[:username] = @username
        maybe_insert(dbt.people.person, **params)
        self
      end

      def on_module(**params)
        add_module(**params)
        insert(dbt.sits.student_module, params.slice(*student_module_columns), join_code: @join_code)
        self
      end

      private

      def add_module(**params)
        sits_module(**params.slice(*module_occurrence_columns))
          .with_period(**params.slice(*module_period_columns))
          .tap { |module_helper| add_record_to_cleanup module_helper }
      end

      def module_occurrence_columns
        @module_occurrence_columns ||= dbt.sits.module_occurrence.table.columns
      end

      def module_period_columns
        @module_period_columns ||= dbt.sits.module_period.table.columns
      end

      def student_module_columns
        @student_module_columns ||= dbt.sits.student_module.table.columns
      end
    end

    def student(...)
      FluentStudentRecord.new(...)
    end
  end
end