Skip to content

Commit

Permalink
Merge pull request #35860 from code-dot-org/lesson-group-in-test
Browse files Browse the repository at this point in the history
Add lesson groups to object set up in tests
  • Loading branch information
dmcavoy committed Jul 18, 2020
2 parents 99decb4 + d3d4a85 commit f4861f0
Show file tree
Hide file tree
Showing 8 changed files with 416 additions and 239 deletions.
75 changes: 40 additions & 35 deletions dashboard/test/controllers/api_controller_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class ApiControllerTest < ActionController::TestCase
sign_in @teacher
end

private def create_script_with_lockable_stage
private def create_script_with_lockable_lesson
script = create :script
lesson_group = create :lesson_group, script: script

Expand All @@ -48,12 +48,12 @@ class ApiControllerTest < ActionController::TestCase
level.properties['submittable'] = true
level.save!

stage = create :lesson, name: 'Stage1', script: script, lockable: true, lesson_group: lesson_group
lesson = create :lesson, name: 'Stage1', script: script, lockable: true, lesson_group: lesson_group

# Create a ScriptLevel joining this level to the script.
create :script_level, script: script, levels: [level], assessment: true, lesson: stage
create :script_level, script: script, levels: [level], assessment: true, lesson: lesson

[script, level, stage]
[script, level, lesson]
end

private def make_text_progress_in_script(script, student)
Expand All @@ -79,7 +79,7 @@ class ApiControllerTest < ActionController::TestCase

response = JSON.parse(@response.body)

# make sure our response has stage from allthethingsscript
# make sure our response has lesson from allthethingsscript
assert /\/s\/allthethings\// =~ response[0]['url']
end

Expand All @@ -102,7 +102,7 @@ class ApiControllerTest < ActionController::TestCase

response = JSON.parse(@response.body)

# make sure our response has stage from allthethings
# make sure our response has lesson from allthethings
assert /\/s\/allthethings\// =~ response[0]['url']
end

Expand All @@ -128,19 +128,19 @@ class ApiControllerTest < ActionController::TestCase
test "should get text_responses for section with script with text response" do
script = create :script, name: 'text-response-script'
lesson_group = create :lesson_group, script: script
stage1 = create :lesson, script: script, name: 'First Stage', lesson_group: lesson_group
stage2 = create :lesson, script: script, name: 'Second Stage', lesson_group: lesson_group
lesson1 = create :lesson, script: script, name: 'First Stage', lesson_group: lesson_group
lesson2 = create :lesson, script: script, name: 'Second Stage', lesson_group: lesson_group

# create 2 text_match levels
level1 = create :text_match
level1.properties['title'] = 'Text Match 1'
level1.save!
create :script_level, script: script, levels: [level1], lesson: stage1
create :script_level, script: script, levels: [level1], lesson: lesson1

level2 = create :text_match
level2.properties['title'] = 'Text Match 2'
level2.save!
create :script_level, script: script, levels: [level2], lesson: stage2
create :script_level, script: script, levels: [level2], lesson: lesson2
# create some other random levels
5.times do
create :script_level, script: script
Expand Down Expand Up @@ -212,7 +212,7 @@ class ApiControllerTest < ActionController::TestCase
end

test "should get lock state when no user_level" do
script, level, stage = create_script_with_lockable_stage
script, level, lesson = create_script_with_lockable_lesson

get :lockable_state, params: {
section_id: @section.id,
Expand All @@ -229,13 +229,13 @@ class ApiControllerTest < ActionController::TestCase
assert_equal @section.name, section_response['section_name']
assert_equal 1, section_response['stages'].length

stages_response = section_response['stages']
assert_equal 1, stages_response.keys.length, '1 stage in our script'
stage_response = stages_response[stage.id.to_s]
assert_equal 5, stage_response.length, "entry for each student in section"
lessons_response = section_response['stages']
assert_equal 1, lessons_response.keys.length, '1 lesson in our script'
lesson_response = lessons_response[lesson.id.to_s]
assert_equal 5, lesson_response.length, "entry for each student in section"

@students.each_with_index do |student, index|
student_response = stage_response[index]
student_response = lesson_response[index]
assert_equal(
{
"user_id" => student.id,
Expand All @@ -253,12 +253,12 @@ class ApiControllerTest < ActionController::TestCase
# do a much more limited set of validation for the flappy section
flappy_section_response = body[@flappy_section.id.to_s]
assert_equal @flappy_section.id, flappy_section_response['section_id']
assert_equal 1, flappy_section_response['stages'][stage.id.to_s].length
assert_equal @student_flappy_1.name, flappy_section_response['stages'][stage.id.to_s][0]['name']
assert_equal 1, flappy_section_response['stages'][lesson.id.to_s].length
assert_equal @student_flappy_1.name, flappy_section_response['stages'][lesson.id.to_s][0]['name']
end

test "should get lock state when we have user_levels" do
script, level, stage = create_script_with_lockable_stage
script, level, lesson = create_script_with_lockable_lesson

# student_1 is unlocked
create :user_level, user: @student_1, script: script, level: level, submitted: false, unlocked_at: Time.now
Expand All @@ -279,7 +279,7 @@ class ApiControllerTest < ActionController::TestCase
assert_response :success
body = JSON.parse(response.body)

student_responses = body[@section.id.to_s]['stages'][stage.id.to_s]
student_responses = body[@section.id.to_s]['stages'][lesson.id.to_s]
assert_equal 5, student_responses.length

# student_1 is unlocked
Expand Down Expand Up @@ -349,7 +349,7 @@ class ApiControllerTest < ActionController::TestCase
end

test "should update lockable state for new user_levels" do
script, level, _ = create_script_with_lockable_stage
script, level, _ = create_script_with_lockable_lesson

user_level_data = {user_id: @student_1.id, level_id: level.id, script_id: script.id}
user_level_data2 = {user_id: @student_2.id, level_id: level.id, script_id: script.id}
Expand Down Expand Up @@ -417,7 +417,7 @@ class ApiControllerTest < ActionController::TestCase

test "should update lockable state for existing levels" do
Timecop.freeze do
script, level, _ = create_script_with_lockable_stage
script, level, _ = create_script_with_lockable_lesson

user_level_data = {user_id: @student_1.id, level_id: level.id, script_id: script.id}
user_level = create :user_level, user_level_data
Expand Down Expand Up @@ -502,7 +502,7 @@ class ApiControllerTest < ActionController::TestCase
end

test "should fail to update lockable state if given bad data" do
script, level, _ = create_script_with_lockable_stage
script, level, _ = create_script_with_lockable_lesson

user_level_data = {user_id: @student_1.id, level_id: level.id, script_id: script.id}
create :user_level, user_level_data
Expand Down Expand Up @@ -597,7 +597,7 @@ class ApiControllerTest < ActionController::TestCase
assert_equal 100, body['levels'][level_id.to_s]['result']
end

test "should get user progress for stage" do
test "should get user progress for lesson" do
slogger = FakeSlogger.new
CDO.set_slogger_for_test(slogger)
script = Script.hoc_2014_script
Expand Down Expand Up @@ -643,10 +643,11 @@ class ApiControllerTest < ActionController::TestCase
slogger = FakeSlogger.new
CDO.set_slogger_for_test(slogger)
script = create :script
stage = create :lesson, script: script
lesson_group = create :lesson_group, script: script
lesson = create :lesson, script: script, lesson_group: lesson_group
contained_level = create :multi, name: 'multi level'
level = create :maze, name: 'maze level', contained_level_names: ['multi level']
create :script_level, script: script, lesson: stage, levels: [level]
create :script_level, script: script, lesson: lesson, levels: [level]

user = create :user
sign_in user
Expand All @@ -660,7 +661,7 @@ class ApiControllerTest < ActionController::TestCase
assert_equal(contained_level.id, slogger.records.first[:level_id])
end

test "should get user progress for stage for signed-out user" do
test "should get user progress for lesson for signed-out user" do
slogger = FakeSlogger.new
CDO.set_slogger_for_test(slogger)
script = Script.hoc_2014_script
Expand Down Expand Up @@ -693,7 +694,7 @@ class ApiControllerTest < ActionController::TestCase
)
end

test "should get user progress for stage with young student" do
test "should get user progress for lesson with young student" do
script = Script.twenty_hour_script
young_student = create :young_student
sign_in young_student
Expand Down Expand Up @@ -723,14 +724,15 @@ class ApiControllerTest < ActionController::TestCase
assert_response :success
end

test "should get user progress for stage with swapped level" do
test "should get user progress for lesson with swapped level" do
sign_in @student_1
script = create :script
stage = create :lesson, script: script
lesson_group = create :lesson_group, script: script
lesson = create :lesson, script: script, lesson_group: lesson_group
level1a = create :maze, name: 'maze 1'
level1b = create :maze, name: 'maze 1 new'
level_source = create :level_source, level: level1a, data: 'level source'
create :script_level, script: script, lesson: stage, levels: [level1a, level1b], properties: {'maze 1': {'active': false}}
create :script_level, script: script, lesson: lesson, levels: [level1a, level1b], properties: {'maze 1': {'active': false}}
create :user_level, user: @student_1, script: script, level: level1a, level_source: level_source
create :activity, user: @student_1, level: level1a, level_source: level_source

Expand Down Expand Up @@ -890,7 +892,10 @@ class ApiControllerTest < ActionController::TestCase
end

test "should get paired icons for paired user levels" do
sl = create :script_level
script = create :script
lesson_group = create :lesson_group, script: script
lesson = create :lesson, script: script, lesson_group: lesson_group
sl = create :script_level, lesson: lesson, script: script
driver_ul = create(
:user_level,
user: @student_4,
Expand Down Expand Up @@ -931,9 +936,9 @@ class ApiControllerTest < ActionController::TestCase
test "should not return progress for bonus levels" do
script = create :script
lesson_group = create :lesson_group, script: script
stage = create :lesson, script: script, lesson_group: lesson_group
create :script_level, script: script, lesson: stage
create :script_level, script: script, lesson: stage, bonus: true
lesson = create :lesson, script: script, lesson_group: lesson_group
create :script_level, script: script, lesson: lesson
create :script_level, script: script, lesson: lesson, bonus: true

get :section_progress, params: {
section_id: @flappy_section.id,
Expand Down
4 changes: 3 additions & 1 deletion dashboard/test/controllers/maker_controller_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -478,7 +478,9 @@ class MakerControllerTest < ActionController::TestCase
def ensure_script(script_name, version_year, is_stable=true)
Script.find_by_name(script_name) ||
create(:script, name: script_name, family_name: 'csd6', version_year: version_year, is_stable: is_stable).tap do |script|
create :script_level, script: script
lesson_group = create :lesson_group, script: script
lesson = create :lesson, script: script, lesson_group: lesson_group
create :script_level, script: script, lesson: lesson
end
end

Expand Down

0 comments on commit f4861f0

Please sign in to comment.