Skip to content

Commit

Permalink
make get_script_level find bubble choice parent levels
Browse files Browse the repository at this point in the history
  • Loading branch information
davidsbailey committed Feb 11, 2021
1 parent 7565f70 commit 56732d2
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 1 deletion.
12 changes: 11 additions & 1 deletion dashboard/app/models/teacher_feedback.rb
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,17 @@ def validate_script_and_script_level
# Finds the script level associated with this object, using script id and
# level id.
def get_script_level
level.script_levels.find {|sl| sl.script_id == script_id}
script_level = level.script_levels.find {|sl| sl.script_id == script_id}
return script_level if script_level

# This will be somewhat expensive, but will only be executed for feedbacks
# which were are associated with a Bubble Choice sublevel.
bubble_choice_levels = script.levels.where(type: 'BubbleChoice').all
parent_level = bubble_choice_levels.find {|bc| bc.sublevels.include?(level)}

script_level = parent_level.script_levels.find {|sl| sl.script_id == script_id}
raise "no script level found for teacher feedback #{id}" unless script_level
script_level
end

def self.get_student_level_feedback(student_id, level_id, teacher_id)
Expand Down
24 changes: 24 additions & 0 deletions dashboard/test/models/teacher_feedback_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -187,4 +187,28 @@ class TeacherFeedbackTest < ActiveSupport::TestCase
feedback = create :teacher_feedback, script: script, level: level
assert_equal script_level, feedback.get_script_level
end

test 'get_script_level finds bubble choice parent level' do
parent_level = create :bubble_choice_level, :with_sublevels
child_level = parent_level.sublevels.first

# Create these intermediate rungs of the hierarchy, so that script_level
# will show up in script.script_levels.
script = create :script
lesson_group = create :lesson_group, script: script
lesson = create :lesson, lesson_group: lesson_group, script: script
script_level = create :script_level, script: script, lesson: lesson, levels: [parent_level]

# HACK: we have to supply a script_level, because it is still a required field.
# According to existing validations, it has to be a script level in this script.
# However, we don't want to pass script_level itself, because in theory
# get_script_level could "cheat" and just return that value. Therefore, create
# a new script level within the same script as a way to prevent cheating and
# still pass validations.
# TODO: remove this hack once script_level is no longer required.
other_script_level = create :script_level, script: script, lesson: lesson, levels: [create(:level)]

feedback = create :teacher_feedback, script: script, level: child_level, script_level: other_script_level
assert_equal script_level, feedback.get_script_level
end
end

0 comments on commit 56732d2

Please sign in to comment.