fix import of quiz durations with time units specified

durations may be specified with a single digit unit prefix
e.g. M# (minutes), H# (hours), D# (days)

if no unit is specified, seconds is assumed

fixes #CNVS-1283

test plan:
 * perform a Blackboard Vista/CE/WebCT course migration
   - the course should include an assessment with a time limit
 * verify that the imported quiz has the correct time limit

Change-Id: I02c9144540eadf5a43c623a4ffeb78e22c3786e5
Reviewed-on: https://gerrit.instructure.com/15944
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Bracken Mosbacker <bracken@instructure.com>
QA-Review: Adam Phillipps <adam@instructure.com>
This commit is contained in:
Mark Severson 2012-12-07 21:46:31 -07:00
parent e126afc762
commit e6f6c9e705
2 changed files with 39 additions and 3 deletions

View File

@ -87,9 +87,7 @@ class AssessmentTestConverter
@quiz[:quiz_name] = @quiz[:title]
@quiz[:migration_id] = get_node_att(doc, 'assessmentTest', 'identifier')
if limit = doc.at_css('timeLimits')
limit = limit['maxTime'].to_i
#instructure uses minutes, QTI uses seconds
@quiz[:time_limit] = limit / 60
@quiz[:time_limit] = AssessmentTestConverter.parse_time_limit(limit['maxTime'])
end
if part = doc.at_css('testPart[identifier=BaseTestPart]')
if control = part.at_css('itemSessionControl')
@ -112,6 +110,23 @@ class AssessmentTestConverter
end
end
def self.parse_time_limit(time_limit)
limit = 0
time_indicator = time_limit[0..0].downcase if time_limit.length > 0
if time_indicator == 'd'
limit = 24 * 60 * time_limit[1..-1].to_i
elsif time_indicator == 'h'
limit = 60 * time_limit[1..-1].to_i
elsif time_indicator == 'm'
limit = time_limit[1..-1].to_i
else
#instructure uses minutes, QTI uses seconds
limit = time_limit.to_i / 60
end
limit
end
def process_section(section)
group = nil
questions_list = @quiz[:questions]

View File

@ -0,0 +1,21 @@
require File.expand_path(File.dirname(__FILE__) + '/../../qti_helper')
describe Qti::AssessmentTestConverter do
it "should interpret duration strings that include units" do
assess = Qti::AssessmentTestConverter
minutes_in_hour = 60
minutes_in_day = 24 * minutes_in_hour
assess.parse_time_limit("D1").should == minutes_in_day
assess.parse_time_limit("d2").should == 2 * minutes_in_day
assess.parse_time_limit("H4").should == 4 * minutes_in_hour
assess.parse_time_limit("h1").should == minutes_in_hour
assess.parse_time_limit("M120").should == 120
assess.parse_time_limit("m14").should == 14
#Canvas uses minutes, QTI uses seconds
assess.parse_time_limit("60").should == 1
assess.parse_time_limit("3600").should == 60
end
end