144 lines
4.9 KiB
Ruby
144 lines
4.9 KiB
Ruby
#
|
|
# Copyright (C) 2011 Instructure, Inc.
|
|
#
|
|
# This file is part of Canvas.
|
|
#
|
|
# Canvas is free software: you can redistribute it and/or modify it under
|
|
# the terms of the GNU Affero General Public License as published by the Free
|
|
# Software Foundation, version 3 of the License.
|
|
#
|
|
# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
|
# details.
|
|
#
|
|
# You should have received a copy of the GNU Affero General Public License along
|
|
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
|
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
|
|
require 'csv'
|
|
|
|
describe GradebookUploadsController do
|
|
def course_with_graded_student
|
|
@group = @course.assignment_groups.create!(:name => "Some Assignment Group", :group_weight => 100)
|
|
@assignment = @course.assignments.create!(:title => "Some Assignment", :points_possible => 10, :assignment_group => @group)
|
|
@assignment.grade_student(@user, :grade => "10")
|
|
@assignment2 = @course.assignments.create!(:title => "Some Assignment 2", :points_possible => 10, :assignment_group => @group)
|
|
@assignment2.grade_student(@user, :grade => "8")
|
|
@course.recompute_student_scores
|
|
@user.reload
|
|
@course.reload
|
|
end
|
|
|
|
def generate_file(include_sis_id=false)
|
|
file = Tempfile.new("csv.csv")
|
|
file.puts(GradebookExporter.new(@course, @teacher, :include_sis_id => include_sis_id).to_csv)
|
|
file.close
|
|
file
|
|
end
|
|
|
|
def upload_gradebook_import(course, file)
|
|
data = Rack::Test::UploadedFile.new(file.path, 'text/csv', true)
|
|
post 'create', course_id: course.id, gradebook_upload: {uploaded_data: data}
|
|
end
|
|
|
|
def check_create_response(include_sis_id=false)
|
|
file = generate_file(include_sis_id)
|
|
upload_gradebook_import(@course, file)
|
|
expect(response).to be_success
|
|
end
|
|
|
|
def setup_DA
|
|
@course_section = @course.course_sections.create
|
|
@student1, @student2, @student3 = create_users(3, return_type: :record)
|
|
@assignment.only_visible_to_overrides = true
|
|
@assignment.save
|
|
@course.enroll_student(@student3, :enrollment_state => 'active')
|
|
@section = @course.course_sections.create!(name: "test section")
|
|
@section2 = @course.course_sections.create!(name: "second test section")
|
|
student_in_section(@section, user: @student1)
|
|
student_in_section(@section2, user: @student2)
|
|
create_section_override_for_assignment(@assignment, {course_section: @section})
|
|
@assignment2.only_visible_to_overrides = true
|
|
@assignment2.save
|
|
create_section_override_for_assignment(@assignment2, {course_section: @section2})
|
|
@course.reload
|
|
@assignment.reload
|
|
@assignment2.reload
|
|
end
|
|
|
|
before :once do
|
|
course_with_teacher active_all: true
|
|
student_in_course active_all: true
|
|
course_with_graded_student
|
|
end
|
|
|
|
describe "POST 'create'" do
|
|
it "should require authorization" do
|
|
post 'create', :course_id => @course.id
|
|
assert_unauthorized
|
|
end
|
|
|
|
context "with authorized teacher" do
|
|
before(:each) { user_session(@teacher) }
|
|
|
|
it "should accept a valid csv upload" do
|
|
check_create_response
|
|
end
|
|
|
|
it "puts the uploaded data into a durable attachment so it's recoverable" do
|
|
gradebook_import_file = generate_file
|
|
upload_gradebook_import(@course, gradebook_import_file)
|
|
attachment = Attachment.last
|
|
expect(gradebook_import_file.path).to include(attachment.filename)
|
|
end
|
|
|
|
context "and final grade column" do
|
|
before(:each) do
|
|
@course.grading_standard_id = 0
|
|
@course.save!
|
|
end
|
|
|
|
it "should accept a valid csv upload with a final grade column" do
|
|
check_create_response
|
|
end
|
|
|
|
it "should accept a valid csv upload with sis id columns" do
|
|
check_create_response(true)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "GET 'data'" do
|
|
it "requires authorization" do
|
|
get 'data', course_id: @course.id
|
|
assert_unauthorized
|
|
end
|
|
|
|
it "retrieves an uploaded gradebook" do
|
|
user_session(@teacher)
|
|
progress = Progress.create!(tag: "test", context: @teacher)
|
|
|
|
@gb_upload = GradebookUpload.new course: @course, user: @teacher, progress: progress, gradebook: {foo: 'bar'}
|
|
@gb_upload.save
|
|
|
|
get 'data', course_id: @course.id
|
|
expect(response).to be_success
|
|
expect(response.body).to eq("while(1);{\"foo\":\"bar\"}")
|
|
end
|
|
|
|
it "destroys an uploaded gradebook after retrieval" do
|
|
user_session(@teacher)
|
|
progress = Progress.create!(tag: "test", context: @teacher)
|
|
@gb_upload = GradebookUpload.new course: @course, user: @teacher, progress: progress, gradebook: {foo: 'bar'}
|
|
@gb_upload.save
|
|
get 'data', course_id: @course.id
|
|
expect { GradebookUpload.find(@gb_upload.id) }.to raise_error(ActiveRecord::RecordNotFound)
|
|
expect(response).to be_success
|
|
end
|
|
end
|
|
end
|