refactor role finding logic for convert_task_to_exercise
add specs
This commit is contained in:
@ -68,9 +68,7 @@ module ProformaService
|
||||
end
|
||||
|
||||
def tests
|
||||
@exercise.files.filter do |file|
|
||||
file.role == 'teacher_defined_test' || file.role == 'teacher_defined_linter'
|
||||
end.map do |file|
|
||||
@exercise.files.filter(&:teacher_defined_assessment?).map do |file|
|
||||
Proforma::Test.new(
|
||||
id: file.id,
|
||||
title: file.name,
|
||||
|
@ -40,7 +40,7 @@ module ProformaService
|
||||
end
|
||||
|
||||
def files
|
||||
model_solution_files + test_files + task_files.values
|
||||
model_solution_files + test_files + task_files.values.tap {|array| array.each {|file| file.role ||= 'regular_file' } }
|
||||
end
|
||||
|
||||
def test_files
|
||||
@ -48,7 +48,7 @@ module ProformaService
|
||||
task_files.delete(test_object.files.first.id).tap do |file|
|
||||
file.weight = test_object.meta_data[:CodeOcean]&.dig(:weight) || 1.0
|
||||
file.feedback_message = test_object.meta_data[:CodeOcean]&.dig(:'feedback-message').presence || 'Feedback'
|
||||
file.role = 'teacher_defined_test'
|
||||
file.role ||= 'teacher_defined_test'
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -56,7 +56,7 @@ module ProformaService
|
||||
def model_solution_files
|
||||
@task.model_solutions.map do |model_solution_object|
|
||||
task_files.delete(model_solution_object.files.first.id).tap do |file|
|
||||
file.role = 'reference_implementation'
|
||||
file.role ||= 'reference_implementation'
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -75,7 +75,7 @@ module ProformaService
|
||||
hidden: file.visible == 'no',
|
||||
name: File.basename(file.filename, '.*'),
|
||||
read_only: file.usage_by_lms != 'edit',
|
||||
role: @task.meta_data[:CodeOcean]&.dig(:files)&.dig("CO-#{file.id}".to_sym)&.dig(:role) || 'regular_file',
|
||||
role: @task.meta_data[:CodeOcean]&.dig(:files)&.dig("CO-#{file.id}".to_sym)&.dig(:role),
|
||||
path: File.dirname(file.filename).in?(['.', '']) ? nil : File.dirname(file.filename)
|
||||
)
|
||||
if file.binary
|
||||
|
@ -3,8 +3,6 @@
|
||||
require 'rails_helper'
|
||||
|
||||
describe ProformaService::ConvertTaskToExercise do
|
||||
# TODO: Add teacher_defined_linter for tests
|
||||
|
||||
describe '.new' do
|
||||
subject(:convert_to_exercise_service) { described_class.new(task: task, user: user, exercise: exercise) }
|
||||
|
||||
@ -100,7 +98,6 @@ describe ProformaService::ConvertTaskToExercise do
|
||||
visible: 'yes',
|
||||
usage_by_lms: usage_by_lms,
|
||||
binary: binary,
|
||||
internal_description: 'regular_file',
|
||||
mimetype: mimetype
|
||||
)
|
||||
end
|
||||
@ -127,6 +124,14 @@ describe ProformaService::ConvertTaskToExercise do
|
||||
expect { convert_to_exercise_service.save! }.to change(Exercise, :count).by(1)
|
||||
end
|
||||
|
||||
context 'when file is a main_file' do
|
||||
let(:files_meta_data) { {"CO-#{file.id}".to_sym => {role: 'main_file'}} }
|
||||
|
||||
it 'creates an exercise with a file that has the correct attributes' do
|
||||
expect(convert_to_exercise_service.files.first).to have_attributes(role: 'main_file')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when path is folder/' do
|
||||
let(:path) { 'folder/' }
|
||||
|
||||
@ -176,7 +181,7 @@ describe ProformaService::ConvertTaskToExercise do
|
||||
end
|
||||
end
|
||||
|
||||
context 'when file has an unkown file_type' do
|
||||
context 'when file has an unknown file_type' do
|
||||
let(:filename) { 'unknown_file_type.asdf' }
|
||||
|
||||
it 'creates a new Exercise on save' do
|
||||
@ -206,8 +211,7 @@ describe ProformaService::ConvertTaskToExercise do
|
||||
used_by_grader: 'used_by_grader',
|
||||
visible: 'yes',
|
||||
usage_by_lms: 'display',
|
||||
binary: false,
|
||||
internal_description: 'reference_implementation'
|
||||
binary: false
|
||||
)
|
||||
end
|
||||
|
||||
@ -294,6 +298,14 @@ describe ProformaService::ConvertTaskToExercise do
|
||||
)
|
||||
end
|
||||
|
||||
context 'when test file is a teacher_defined_linter' do
|
||||
let(:files_meta_data) { {"CO-#{test_file.id}".to_sym => {role: 'teacher_defined_linter'}} }
|
||||
|
||||
it 'creates an exercise with a test' do
|
||||
expect(convert_to_exercise_service.files.select {|file| file.role == 'teacher_defined_linter' }).to have(1).item
|
||||
end
|
||||
end
|
||||
|
||||
context 'when task has multiple tests' do
|
||||
let(:tests) { [test, test2] }
|
||||
let(:test2) do
|
||||
@ -366,8 +378,7 @@ describe ProformaService::ConvertTaskToExercise do
|
||||
used_by_grader: 'used_by_grader',
|
||||
visible: 'yes',
|
||||
usage_by_lms: 'display',
|
||||
binary: false,
|
||||
internal_description: 'regular_file'
|
||||
binary: false
|
||||
)
|
||||
end
|
||||
let(:tests) { [test] }
|
||||
@ -376,7 +387,6 @@ describe ProformaService::ConvertTaskToExercise do
|
||||
id: 'test-id',
|
||||
title: 'title',
|
||||
description: 'description',
|
||||
internal_description: 'regular_file',
|
||||
test_type: 'test_type',
|
||||
files: test_files,
|
||||
meta_data: {
|
||||
|
Reference in New Issue
Block a user