create method for returning originality data
fixes PLAT-1912 test plan: - Create an OriginalityReport for an attachment on a submission - Call #originality_data on the submission - You should get back the originality_report data - Create some tii data on a submission - call #originality_data on the submission Change-Id: I35687c9b8d3e87a9d2359efadb5854452a47c8a8 Reviewed-on: https://gerrit.instructure.com/96583 Tested-by: Jenkins Reviewed-by: Weston Dransfield <wdransfield@instructure.com> Reviewed-by: Keith T. Garner <kgarner@instructure.com> QA-Review: August Thornton <august@instructure.com> Product-Review: Nathan Mills <nathanm@instructure.com>
This commit is contained in:
parent
a7755efe34
commit
2c0150a733
|
@ -4,11 +4,12 @@ class OriginalityReport < ActiveRecord::Base
|
|||
belongs_to :attachment
|
||||
belongs_to :originality_report_attachment, class_name: "Attachment"
|
||||
validates :originality_score, :attachment, :submission, presence: true
|
||||
validates :originality_score, inclusion: { in: 0..1, message: 'score must be between 0 and 1' }
|
||||
validates :originality_score, inclusion: { in: 0..100, message: 'score must be between 0 and 100' }
|
||||
validates :workflow_state, inclusion: { in: ['scored', 'error', 'pending'] }
|
||||
|
||||
alias_attribute :file_id, :attachment_id
|
||||
alias_attribute :originality_report_file_id, :originality_report_attachment_id
|
||||
before_validation { self.workflow_state ||= 'pending' }
|
||||
|
||||
def state
|
||||
Turnitin.state_from_similarity_score(originality_score)
|
||||
|
|
|
@ -74,6 +74,7 @@ class Submission < ActiveRecord::Base
|
|||
has_many :rubric_assessments, :as => :artifact
|
||||
has_many :attachment_associations, :as => :context
|
||||
has_many :provisional_grades, class_name: 'ModeratedGrading::ProvisionalGrade'
|
||||
has_many :originality_reports
|
||||
has_one :rubric_assessment, -> { where(assessment_type: 'grading') }, as: :artifact
|
||||
|
||||
# we no longer link submission comments and conversations, but we haven't fixed up existing
|
||||
|
@ -511,6 +512,20 @@ class Submission < ActiveRecord::Base
|
|||
true
|
||||
end
|
||||
|
||||
# This method pulls data from the OriginalityReport table
|
||||
# Preload OriginalityReport before using this method in a collection of submissions
|
||||
def originality_data
|
||||
data = self.originality_reports.each_with_object({}) do |originality_report, hash|
|
||||
hash[Attachment.asset_string(originality_report.attachment_id)] = {
|
||||
similarity_score: originality_report.originality_score.round(2),
|
||||
state: originality_report.state,
|
||||
report_url: originality_report.originality_report_url,
|
||||
status: originality_report.workflow_state
|
||||
}
|
||||
end
|
||||
turnitin_data.merge(data)
|
||||
end
|
||||
|
||||
def turnitin_assets
|
||||
if self.submission_type == 'online_upload'
|
||||
self.attachments.select{ |a| a.turnitinable? }
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
class ChangeOriginalityReportOriginalityScoreToFloat < ActiveRecord::Migration
|
||||
tag :predeploy
|
||||
def change
|
||||
change_column :originality_reports, :originality_score, :float, null: false
|
||||
end
|
||||
end
|
|
@ -173,7 +173,7 @@ describe 'Originality Reports API', type: :request do
|
|||
|
||||
it "does not update originality score if out of range" do
|
||||
user_session(@teacher)
|
||||
put @endpoints[:update], originality_report: {originality_score: 1.5}
|
||||
put @endpoints[:update], originality_report: {originality_score: 150}
|
||||
|
||||
expect(response.status).to eq 400
|
||||
expect(JSON.parse(response.body)['errors'].key? 'originality_score').to be_truthy
|
||||
|
|
|
@ -15,7 +15,7 @@ describe OriginalityReport do
|
|||
it 'requires an originality score' do
|
||||
subject.originality_score = nil
|
||||
subject.valid?
|
||||
expect(subject.errors[:originality_score]).to eq ["can't be blank", "score must be between 0 and 1"]
|
||||
expect(subject.errors[:originality_score]).to eq ["can't be blank", "score must be between 0 and 100"]
|
||||
end
|
||||
|
||||
it 'requires an attachment' do
|
||||
|
@ -58,4 +58,9 @@ describe OriginalityReport do
|
|||
subject.save!
|
||||
expect(subject.originality_report_attachment).to eq originality_attachemnt
|
||||
end
|
||||
|
||||
it 'returns the state of the originality report' do
|
||||
expect(subject.state).to eq 'acceptable'
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -792,6 +792,72 @@ describe Submission do
|
|||
end
|
||||
end
|
||||
|
||||
context "OriginalityReport" do
|
||||
let(:attachment) { attachment_model }
|
||||
let(:course) { course_model }
|
||||
let(:submission) { submission_model }
|
||||
|
||||
let(:originality_report) do
|
||||
OriginalityReport.create!(attachment: attachment, originality_score: '1', submission: submission)
|
||||
end
|
||||
|
||||
describe "#originality_data" do
|
||||
it "generates the originality data" do
|
||||
originality_report.originality_report_url = 'http://example.com'
|
||||
originality_report.save!
|
||||
expect(submission.originality_data).to eq({
|
||||
attachment.asset_string => {
|
||||
similarity_score: originality_report.originality_score,
|
||||
state: originality_report.state,
|
||||
report_url: originality_report.originality_report_url,
|
||||
status: originality_report.workflow_state
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
it "includes tii data" do
|
||||
tii_data = {
|
||||
similarity_score: 10,
|
||||
state: 'acceptable',
|
||||
report_url: 'http://example.com',
|
||||
status: 'scored'
|
||||
}
|
||||
submission.turnitin_data[attachment.asset_string] = tii_data
|
||||
expect(submission.originality_data).to eq({
|
||||
attachment.asset_string => tii_data
|
||||
})
|
||||
end
|
||||
|
||||
it "overrites the tii data with the originality data" do
|
||||
originality_report.originality_report_url = 'http://example.com'
|
||||
originality_report.save!
|
||||
tii_data = {
|
||||
similarity_score: 10,
|
||||
state: 'acceptable',
|
||||
report_url: 'http://example.com/tii',
|
||||
status: 'pending'
|
||||
}
|
||||
submission.turnitin_data[attachment.asset_string] = tii_data
|
||||
expect(submission.originality_data).to eq({
|
||||
attachment.asset_string => {
|
||||
similarity_score: originality_report.originality_score,
|
||||
state: originality_report.state,
|
||||
report_url: originality_report.originality_report_url,
|
||||
status: originality_report.workflow_state
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
it "rounds the score to 2 decimal places" do
|
||||
originality_report.originality_score = 2.94997
|
||||
originality_report.save!
|
||||
expect(submission.originality_data[attachment.asset_string][:similarity_score]).to eq(2.95)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
context "turnitin" do
|
||||
|
||||
context "Turnitin LTI" do
|
||||
|
|
Loading…
Reference in New Issue