fix google doc submissions with submissions folder enabled

test plan:
 - enable the Google Drive plugin
   (see instructions in the wiki article "OtherServiceTestAccounts",
    section "Google (Beta)")
 - enable the submissions folder feature
 - ensure that you can submit an assignment that accepts file
   uploads via the Google Doc tab

fixes CNVS-29307

Change-Id: I5bb953abd89bfcd1a8c0845eb76b1dcb78f4ef89
Reviewed-on: https://gerrit.instructure.com/79379
Tested-by: Jenkins
Reviewed-by: Steven Burnett <sburnett@instructure.com>
QA-Review: Deepeeca Soundarrajan <dsoundarrajan@instructure.com>
Product-Review: Jeremy Stanley <jeremy@instructure.com>
This commit is contained in:
Jeremy Stanley 2016-05-11 16:56:56 -06:00
parent ae57b0609d
commit c152d006e0
2 changed files with 46 additions and 5 deletions

View File

@ -240,7 +240,9 @@ class SubmissionsController < ApplicationController
end
params[:submission][:attachments] = params[:submission][:attachments].compact.uniq
copy_attachments_to_submissions_folder! if @context.root_account.feature_enabled?(:submissions_folder)
if @context.root_account.feature_enabled?(:submissions_folder)
params[:submission][:attachments] = self.class.copy_attachments_to_submissions_folder(@context, params[:submission][:attachments])
end
begin
@submission = @assignment.submit_homework(@current_user, params[:submission])
@ -299,12 +301,14 @@ class SubmissionsController < ApplicationController
end
private :lookup_existing_attachments
def copy_attachments_to_submissions_folder!
params[:submission][:attachments].map! do |attachment|
if attachment.folder.for_submissions?
def self.copy_attachments_to_submissions_folder(assignment_context, attachments)
attachments.map do |attachment|
if attachment.folder && attachment.folder.for_submissions?
attachment # already in a submissions folder
elsif attachment.context.respond_to?(:submissions_folder)
attachment.copy_to_folder!(attachment.context.submissions_folder(assignment_context))
else
attachment.copy_to_folder!(attachment.context.submissions_folder(@context))
attachment # in a weird context; leave it alone
end
end
end

View File

@ -620,4 +620,41 @@ describe SubmissionsController do
end
end
describe "copy_attachments_to_submissions_folder" do
before(:once) do
course_with_student
attachment_model(context: @student)
end
it "copies a user attachment into the user's submissions folder" do
atts = SubmissionsController.copy_attachments_to_submissions_folder(@course, [@attachment])
expect(atts.length).to eq 1
expect(atts[0]).not_to eq @attachment
expect(atts[0].folder).to eq @student.submissions_folder(@course)
end
it "leaves files already in submissions folders alone" do
@attachment.folder = @student.submissions_folder(@course)
@attachment.save!
atts = SubmissionsController.copy_attachments_to_submissions_folder(@course, [@attachment])
expect(atts).to eq [@attachment]
end
it "copies a group attachment into the group submission folder" do
group_model(context: @course)
attachment_model(context: @group)
atts = SubmissionsController.copy_attachments_to_submissions_folder(@course, [@attachment])
expect(atts.length).to eq 1
expect(atts[0]).not_to eq @attachment
expect(atts[0].folder).to eq @group.submissions_folder
end
it "leaves files in non user/group context alone" do
assignment_model(context: @course)
weird_file = @assignment.attachments.create! name: 'blah', uploaded_data: default_uploaded_data
atts = SubmissionsController.copy_attachments_to_submissions_folder(@course, [weird_file])
expect(atts).to eq [weird_file]
end
end
end