From c14a98322851a0118b3fa8ab46a8a21bf3a3ea07 Mon Sep 17 00:00:00 2001 From: Ruben Stranders Date: Fri, 15 Apr 2022 01:32:28 +0100 Subject: [PATCH] Add tests for CSV export --- app/models/submission.rb | 12 ++++++++++-- spec/models/submission_spec.rb | 20 ++++++++++++++++++++ spec/spec_helper.rb | 2 ++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/app/models/submission.rb b/app/models/submission.rb index 9656e3e4..2cd4dbba 100644 --- a/app/models/submission.rb +++ b/app/models/submission.rb @@ -15,13 +15,13 @@ class Submission < ApplicationRecord end def self.to_csv - attributes = %w[id uploaded_by_id created_at updated_at test_results_count successful_test_results_count language status] + attributes = %w[id uploaded_by_name created_at updated_at test_results_count successful_test_results_count language status] CSV.generate(headers: true) do |csv| csv << attributes all.each do |submission| - csv << submission.attributes.values_at(*attributes) + csv << attributes.map { |a| submission.send(a) } end end end @@ -34,12 +34,19 @@ def self.to_csv next unless checks_completed? notify_users + successful_test_results_count # store successful tests count in db column + end + + def uploaded_by_name + uploaded_by&.name end def successful_test_results_count value = self[:successful_test_results_count] return value if value + return unless test_results.any? + self.successful_test_results_count = test_results.where(status: %w[success skipped]).count save successful_test_results_count @@ -84,6 +91,7 @@ def tempdir end def rerun_tests + update(successful_test_results_count: nil) SubmissionCheckWorker.perform_async(id) end diff --git a/spec/models/submission_spec.rb b/spec/models/submission_spec.rb index a9ba8f03..4cedd714 100644 --- a/spec/models/submission_spec.rb +++ b/spec/models/submission_spec.rb @@ -37,4 +37,24 @@ expect(result.submission).to eq submission end end + + it 'can be exported to csv' do + travel_to '2022-01-01' + assignment = create(:assignment) + assignment.tests << create(:expected_output_test) + + user = create(:user, name: 'Ruben') + submission = build(:file_submission, assignment: assignment, uploaded_by: user) + submission.file = File.new('spec/fixtures/dummy_submissions/correct.zip') + submission.save! + + expect(submission.reload.status).to eq 'success' + + expected_csv = <<~EXPECTED + id,uploaded_by_name,created_at,updated_at,test_results_count,successful_test_results_count,language,status + #{submission.id},Ruben,2022-01-01 00:00:00 UTC,2022-01-01 00:00:00 UTC,1,1,,success + EXPECTED + + expect(Submission.to_csv).to eq expected_csv + end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index c2f210f0..6d8452cd 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -34,6 +34,8 @@ expectations.include_chain_clauses_in_custom_matcher_descriptions = true end + config.include ActiveSupport::Testing::TimeHelpers + # rspec-mocks config goes here. You can use an alternate test double # library (such as bogus or mocha) by changing the `mock_with` option here. config.mock_with :rspec do |mocks|