diff --git a/app/models/submission.rb b/app/models/submission.rb index 9f19dcbc..95fafb08 100644 --- a/app/models/submission.rb +++ b/app/models/submission.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'zip' + class Submission < ApplicationRecord belongs_to :assignment belongs_to :uploaded_by, class_name: 'User' @@ -18,7 +20,7 @@ def self.to_csv attributes = %w[id assignment_id assignment_by_name uploaded_by_id uploaded_by_name created_at updated_at test_results_count successful_test_results_count - language status] + language status code] CSV.generate(headers: true) do |csv| csv << attributes @@ -40,6 +42,18 @@ def self.to_csv successful_test_results_count # store successful tests count in db column end + def code + contents = StringIO.new + + Zip::InputStream.open(file.path) do |io| + while (entry = io.get_next_entry) + contents << "#{io.read}" + end + end + + contents.string + end + def uploaded_by_name uploaded_by&.name end diff --git a/app/views/submissions/index.haml b/app/views/submissions/index.haml index f2b95268..0a113fd6 100644 --- a/app/views/submissions/index.haml +++ b/app/views/submissions/index.haml @@ -8,6 +8,7 @@ = panel title: Submission.model_name.human.pl, context: :primary do .panel-body + -# Rerun submissions button - if can?(:rerun_all, Submission) -# Disable button until all submissions finish rerunning - if @submissions.any?{ |s| !s.checks_completed? } @@ -19,6 +20,10 @@ = link_to 'Export Data', assignment_submissions_path(format: :csv), class: 'btn btn-primary' + -# New submission button + - if @active_team + = link_to 'Upload New Submission', new_assignment_submission_path(@assignment), class: 'btn btn-primary' + = no_results_found_row(4) if @submissions.to_a.empty? %table.table.table-striped %thead %tr @@ -27,9 +32,6 @@ %th= Submission.human_attribute_name(:contributors) %th= Submission.human_attribute_name(:status) %tbody - - if @active_team - = link_to 'Upload New Submission', new_assignment_submission_path(@assignment), class: 'btn btn-primary' - = no_results_found_row(4) if @submissions.to_a.empty? - @submissions.decorate.each do |submission| %tr %td= link_to submission.created_at, assignment_submission_path(@assignment, submission) diff --git a/spec/fixtures/dummy_submissions/dummy b/spec/fixtures/dummy_submissions/dummy new file mode 100755 index 00000000..a84b41a3 --- /dev/null +++ b/spec/fixtures/dummy_submissions/dummy @@ -0,0 +1,6 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +$stdin.readlines.each do |line| + puts line.split(' ').map(&:to_i).inject(:+) +end diff --git a/spec/models/submission_spec.rb b/spec/models/submission_spec.rb index 8a6d4c8a..b93392cd 100644 --- a/spec/models/submission_spec.rb +++ b/spec/models/submission_spec.rb @@ -50,9 +50,17 @@ expect(submission.reload.status).to eq 'success' + submission_contents = StringIO.new + + Zip::InputStream.open(submission.file.path) do |io| + while (entry = io.get_next_entry) + submission_contents << "#{io.read}" + end + end + expected_csv = <<~EXPECTED - id,assignment_id,assignment_by_name,uploaded_by_id,uploaded_by_name,created_at,updated_at,test_results_count,successful_test_results_count,language,status - #{submission.id},#{assignment.id},#{assignment.name},#{user.id},Ruben,2022-01-01 00:00:00 UTC,2022-01-01 00:00:00 UTC,1,1,,success + id,assignment_id,assignment_by_name,uploaded_by_id,uploaded_by_name,created_at,updated_at,test_results_count,successful_test_results_count,language,status,code + #{submission.id},#{assignment.id},#{assignment.name},#{user.id},Ruben,2022-01-01 00:00:00 UTC,2022-01-01 00:00:00 UTC,1,1,,success,"#{submission_contents.string}" EXPECTED expect(Submission.to_csv).to eq expected_csv