diff --git a/app/services/proforma_service/convert_exercise_to_task.rb b/app/services/proforma_service/convert_exercise_to_task.rb index fdc3ff6d..937f1898 100644 --- a/app/services/proforma_service/convert_exercise_to_task.rb +++ b/app/services/proforma_service/convert_exercise_to_task.rb @@ -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, diff --git a/app/services/proforma_service/convert_task_to_exercise.rb b/app/services/proforma_service/convert_task_to_exercise.rb index 5c9bee78..7ecf7881 100644 --- a/app/services/proforma_service/convert_task_to_exercise.rb +++ b/app/services/proforma_service/convert_task_to_exercise.rb @@ -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 diff --git a/spec/services/proforma_service/convert_task_to_exercise_spec.rb b/spec/services/proforma_service/convert_task_to_exercise_spec.rb index 071c3472..bf19bb3e 100644 --- a/spec/services/proforma_service/convert_task_to_exercise_spec.rb +++ b/spec/services/proforma_service/convert_task_to_exercise_spec.rb @@ -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: {