Skip to content

Instantly share code, notes, and snippets.

@kstevens715
Created April 26, 2017 21:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kstevens715/4fbf18d6fcb6e64afacbbe6d0f598d4b to your computer and use it in GitHub Desktop.
Save kstevens715/4fbf18d6fcb6e64afacbbe6d0f598d4b to your computer and use it in GitHub Desktop.
require "test_helper"
require "csv_parser"
require "support/reports_unit_test_helper"
require "benchmark"
describe Reports::HighSchoolCourseworkReport do
let(:described_class) { Reports::HighSchoolCourseworkReport }
def random_word(l)
(0...l).map { (65 + rand(26)).chr }.join
end
def grade_levels
@grade_levels ||= GlobalLookups::GradeLevel.all
end
def secondary_school_term_types
@term_types ||= GlobalLookups::SecondarySchoolTermType.all
end
def secondary_school_course_selections
@course_selections ||= GlobalLookups::SecondarySchoolCourseSelection.all
end
def secondary_school_course_classifications
@course_classifications ||= GlobalLookups::SecondarySchoolCourseClassification.all
end
def random_grade_level
grade_levels.sample
end
def random_term_type
secondary_school_term_types.sample
end
def random_course_selection
secondary_school_course_selections.sample
end
def random_course_classification
secondary_school_course_classifications.sample
end
def create_courses(grade_level)
applicant = grade_level.applicant
cas = applicant.cas
secondary_school = grade_level.secondary_school
course_count = (6..10).to_a.sample
course_count.times do |_|
term_type = random_term_type
course_selection = random_course_selection
secondary_school_course_classification = random_course_classification
create(:secondary_school_course, applicant: applicant, cas: cas, secondary_school: secondary_school,
secondary_school_grade_level: grade_level, secondary_school_term_type: term_type,
secondary_school_course_selection: course_selection,
secondary_school_course_classification: secondary_school_course_classification,
title: random_word((10..20).to_a.sample),
fall_grade: "A-", full_year_grade: "C-", q1_grade: "A", q2_grade: "B+", q3_grade: "B", q4_grade: "B-", spring_grade: "C",
summer_grade: "A+", winter_grade: "C+")
end
end
def create_grade_level(secondary_school)
applicant = secondary_school.applicant
cas = applicant.cas
grade_level = random_grade_level
secondary_school_grade_level = create(:secondary_school_grade_level, grade_level: grade_level, applicant: applicant, cas: cas,
secondary_school: secondary_school, academic_year: "2006-2007")
create_courses(secondary_school_grade_level)
end
def create_secondary_school(applicant, unique_schools)
master_secondary_school = nil
name = nil
if rand < 0.75
master_secondary_school = create(:master_secondary_school, name: random_word(12), code: random_word(8))
else
name = random_word(12)
end
secondary_school = create(:secondary_school, applicant: applicant, home_school: false,
master_secondary_school: master_secondary_school, name: name)
(4 / unique_schools).times do
create_grade_level(secondary_school)
end
end
def create_applicant(cas)
applicant = build(:applicant, cas: cas, first_name: random_word(8), last_name: random_word(12))
applicant.cas_id = applicant.identifier
applicant.save!
unique_school_count = [1, 1, 1, 1, 2, 2, 2, 3, 3, 4].sample
unique_school_count.times do |_|
create_secondary_school(applicant, unique_school_count)
end
end
describe "with data" do
before do
GlobalLookups::GradeLevel.create_all
GlobalLookups::SecondarySchoolTermType.create_all
GlobalLookups::SecondarySchoolCourseSelection.create_all
GlobalLookups::SecondarySchoolCourseClassification.create_all
cas = create(:cas)
1000.times do
create_applicant(cas)
end
cas = nil
@grade_levels = nil
@term_types = nil
@course_selections = nil
@course_classifications = nil
GC.start
end
it "generates expected CSV format" do
user_identity = build_stubbed(:organization_user_identity)
report = build(:report)
ar_start = ObjectSpace.each_object(ActiveRecord::Base)
term_type_start = ObjectSpace.each_object(GlobalLookups::SecondarySchoolTermType).count
GC.disable
# Change logger
old_logger = ActiveRecord::Base.logger
ActiveRecord::Base.logger = Logger.new(STDOUT)
time = Benchmark.realtime do
csv = ReportsUnitTestHelper::Renderer.to_raw_csv(described_class, user_identity, report, all_applicants, all_applicants)
parsed_csv = parse_coursework_report(csv)
#puts parsed_csv
end
puts "Total Time: #{time}"
puts "Courses: #{ObjectSpace.each_object(SecondarySchoolCourse).count}"
puts "Term Type: #{ObjectSpace.each_object(GlobalLookups::SecondarySchoolTermType).count}"
puts "Grade Level: #{ObjectSpace.each_object(GlobalLookups::GradeLevel).count}"
puts "Classification: #{ObjectSpace.each_object(GlobalLookups::SecondarySchoolCourseClassification).count}"
puts "Selection: #{ObjectSpace.each_object(GlobalLookups::SecondarySchoolCourseSelection).count}"
puts "MasterSecondarySchool: #{ObjectSpace.each_object(MasterSecondarySchool).count}"
puts "ActiveRecord: #{ObjectSpace.each_object(ActiveRecord::Base).count}"
ActiveRecord::Base.logger = old_logger
GC.enable
end
end
def all_applicants
Applicant.where("1=1")
end
def parse_coursework_report(raw_csv)
CsvParser.new(raw_csv).to_hashes
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment