delay turnitin submission by 60 seconds, fixes #7330

introduces a configurable delay when submitting to turnitin to help
ensure content makes it to s3 before turnitin retrieves it

test plan:
1. submit an assignment under a turnitin-enabled account
2. ensure that it gets sent to turnitin, but after a 60 second delay

Change-Id: I24d813b5487869a628e37b95a15b9f2aeadb712b
Reviewed-on: https://gerrit.instructure.com/8815
Tested-by: Hudson <hudson@instructure.com>
Reviewed-by: Zach Wily <zach@instructure.com>
This commit is contained in:
Jon Jensen 2012-02-20 09:37:11 -07:00
parent 7025bb948f
commit b234b0bd30
2 changed files with 87 additions and 71 deletions

View File

@ -249,7 +249,8 @@ class Submission < ActiveRecord::Base
def submit_to_turnitin_later
if self.turnitinable? && @submit_to_turnitin
send_later(:submit_to_turnitin)
delay = Setting.get_cached('turnitin_submission_delay_seconds', 60.to_s).to_i
send_at(delay.seconds.from_now, :submit_to_turnitin)
end
end

View File

@ -279,77 +279,92 @@ describe Submission do
@assignment.turnitin_settings = @assignment.turnitin_settings
@assignment.save!
submission_spec_model
@submission.turnitin_data = {
"submission_#{@submission.id}" => {
:web_overlap => 92,
:error => true,
:publication_overlap => 0,
:state => "failure",
:object_id => "123456789",
:student_overlap => 90,
:similarity_score => 92
end
context "submission" do
it "should submit to turnitin after a delay" do
@submission.submission_type = 'online_upload'
@submission.save!
job = Delayed::Job.find_by_tag('Submission#submit_to_turnitin')
job.should_not be_nil
job.run_at.should > Time.now.utc
end
end
context "report" do
before do
@submission.turnitin_data = {
"submission_#{@submission.id}" => {
:web_overlap => 92,
:error => true,
:publication_overlap => 0,
:state => "failure",
:object_id => "123456789",
:student_overlap => 90,
:similarity_score => 92
}
}
}
@submission.save!
api = Turnitin::Client.new('test_account', 'sekret')
Turnitin::Client.expects(:new).at_least(1).returns(api)
api.expects(:sendRequest).with(:generate_report, 1, has_entries(:oid => "123456789")).at_least(1).returns('http://foo.bar')
end
it "should let teachers view the turnitin report" do
@teacher = User.create
@context.enroll_teacher(@teacher)
@submission.should be_grants_right(@teacher, nil, :view_turnitin_report)
@submission.turnitin_report_url("submission_#{@submission.id}", @teacher).should_not be_nil
end
it "should let students view the turnitin report after grading" do
@assignment.turnitin_settings[:originality_report_visibility] = 'after_grading'
@assignment.save!
@submission.reload
@submission.should_not be_grants_right(@user, nil, :view_turnitin_report)
@submission.turnitin_report_url("submission_#{@submission.id}", @user).should be_nil
@submission.score = 1
@submission.grade_it!
@submission.should be_grants_right(@user, nil, :view_turnitin_report)
@submission.turnitin_report_url("submission_#{@submission.id}", @user).should_not be_nil
end
it "should let students view the turnitin report immediately if the visibility setting allows it" do
@assignment.turnitin_settings[:originality_report_visibility] = 'after_grading'
@assignment.save
@submission.reload
@submission.should_not be_grants_right(@user, nil, :view_turnitin_report)
@submission.turnitin_report_url("submission_#{@submission.id}", @user).should be_nil
@assignment.turnitin_settings[:originality_report_visibility] = 'immediate'
@assignment.save
@submission.reload
@submission.should be_grants_right(@user, nil, :view_turnitin_report)
@submission.turnitin_report_url("submission_#{@submission.id}", @user).should_not be_nil
end
it "should let students view the turnitin report after the due date if the visibility setting allows it" do
@assignment.turnitin_settings[:originality_report_visibility] = 'after_due_date'
@assignment.due_at = Time.now + 1.day
@assignment.save
@submission.reload
@submission.should_not be_grants_right(@user, nil, :view_turnitin_report)
@submission.turnitin_report_url("submission_#{@submission.id}", @user).should be_nil
@assignment.due_at = Time.now - 1.day
@assignment.save
@submission.reload
@submission.should be_grants_right(@user, nil, :view_turnitin_report)
@submission.turnitin_report_url("submission_#{@submission.id}", @user).should_not be_nil
@submission.save!
api = Turnitin::Client.new('test_account', 'sekret')
Turnitin::Client.expects(:new).at_least(1).returns(api)
api.expects(:sendRequest).with(:generate_report, 1, has_entries(:oid => "123456789")).at_least(1).returns('http://foo.bar')
end
it "should let teachers view the turnitin report" do
@teacher = User.create
@context.enroll_teacher(@teacher)
@submission.should be_grants_right(@teacher, nil, :view_turnitin_report)
@submission.turnitin_report_url("submission_#{@submission.id}", @teacher).should_not be_nil
end
it "should let students view the turnitin report after grading" do
@assignment.turnitin_settings[:originality_report_visibility] = 'after_grading'
@assignment.save!
@submission.reload
@submission.should_not be_grants_right(@user, nil, :view_turnitin_report)
@submission.turnitin_report_url("submission_#{@submission.id}", @user).should be_nil
@submission.score = 1
@submission.grade_it!
@submission.should be_grants_right(@user, nil, :view_turnitin_report)
@submission.turnitin_report_url("submission_#{@submission.id}", @user).should_not be_nil
end
it "should let students view the turnitin report immediately if the visibility setting allows it" do
@assignment.turnitin_settings[:originality_report_visibility] = 'after_grading'
@assignment.save
@submission.reload
@submission.should_not be_grants_right(@user, nil, :view_turnitin_report)
@submission.turnitin_report_url("submission_#{@submission.id}", @user).should be_nil
@assignment.turnitin_settings[:originality_report_visibility] = 'immediate'
@assignment.save
@submission.reload
@submission.should be_grants_right(@user, nil, :view_turnitin_report)
@submission.turnitin_report_url("submission_#{@submission.id}", @user).should_not be_nil
end
it "should let students view the turnitin report after the due date if the visibility setting allows it" do
@assignment.turnitin_settings[:originality_report_visibility] = 'after_due_date'
@assignment.due_at = Time.now + 1.day
@assignment.save
@submission.reload
@submission.should_not be_grants_right(@user, nil, :view_turnitin_report)
@submission.turnitin_report_url("submission_#{@submission.id}", @user).should be_nil
@assignment.due_at = Time.now - 1.day
@assignment.save
@submission.reload
@submission.should be_grants_right(@user, nil, :view_turnitin_report)
@submission.turnitin_report_url("submission_#{@submission.id}", @user).should_not be_nil
end
end
end