From c294e3b4998bc4be5f44c70f8d2f3d1ae9af9604 Mon Sep 17 00:00:00 2001 From: Hauke Klement Date: Sat, 21 Mar 2015 18:46:02 +0100 Subject: [PATCH] do not render the development environment for exercises without visible files --- app/controllers/exercises_controller.rb | 1 + app/views/application/_flash.html.slim | 4 +- config/locales/de.yml | 1 + config/locales/en.yml | 1 + spec/controllers/exercises_controller_spec.rb | 40 ++++++++++++------- 5 files changed, 31 insertions(+), 16 deletions(-) diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb index df16c752..d35c88cd 100644 --- a/app/controllers/exercises_controller.rb +++ b/app/controllers/exercises_controller.rb @@ -82,6 +82,7 @@ class ExercisesController < ApplicationController private :handle_file_uploads def implement + redirect_to(@exercise, alert: t('exercises.implement.no_files')) unless @exercise.files.visible.exists? @submission = current_user.submissions.where(exercise_id: @exercise.id).order('created_at DESC').first @files = (@submission ? @submission.collect_files : @exercise.files).select(&:visible).sort_by(&:name_with_extension) @paths = collect_paths(@files) diff --git a/app/views/application/_flash.html.slim b/app/views/application/_flash.html.slim index b5734fd0..0f854179 100644 --- a/app/views/application/_flash.html.slim +++ b/app/views/application/_flash.html.slim @@ -1,3 +1,3 @@ #flash data-message-failure=t('shared.message_failure') - - %w[danger info notice success warning].each do |severity| - p.alert.flash class="alert-#{severity == 'notice' ? 'success' : severity}" id="flash-#{severity}" = flash[severity] + - %w[alert danger info notice success warning].each do |severity| + p.alert.flash class="alert-#{{'alert' => 'warning', 'notice' => 'success'}.fetch(severity, severity)}" id="flash-#{severity}" = flash[severity] diff --git a/config/locales/de.yml b/config/locales/de.yml index 96088497..c128ce56 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -199,6 +199,7 @@ de: feedback: Feedback file: 'Test-Datei %{number} (%{filename})' hint: Tipp + no_files: Die Aufgabe umfasst noch keine sichtbaren Dateien. no_output: Die letzte Code-Ausführung hat keine Ausgabe erzeugt. no_output_yet: Bisher existiert noch keine Ausgabe. output: Programm-Ausgabe diff --git a/config/locales/en.yml b/config/locales/en.yml index b3f5b32a..847886cb 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -199,6 +199,7 @@ en: feedback: Feedback file: 'Test File %{number} (%{filename})' hint: Hint + no_files: The exercise does not comprise visible files yet. no_output: The last code run has not generated any output. no_output_yet: There is no output yet. output: Program Output diff --git a/spec/controllers/exercises_controller_spec.rb b/spec/controllers/exercises_controller_spec.rb index b2cfb569..b311eb55 100644 --- a/spec/controllers/exercises_controller_spec.rb +++ b/spec/controllers/exercises_controller_spec.rb @@ -146,27 +146,39 @@ describe ExercisesController do describe 'GET #implement' do let(:request) { proc { get :implement, id: exercise.id } } - before(:each) { request.call } - expect_assigns(exercise: :exercise) + context 'with an exercise with visible files' do + let(:exercise) { FactoryGirl.create(:fibonacci) } + before(:each) { request.call } - context 'with an existing submission' do - let!(:submission) { FactoryGirl.create(:submission, exercise_id: exercise.id, user_id: user.id, user_type: InternalUser.class.name) } + expect_assigns(exercise: :exercise) - it "populates the editors with the submission's files' content" do - request.call - expect(assigns(:files)).to eq(submission.files) + context 'with an existing submission' do + let!(:submission) { FactoryGirl.create(:submission, exercise_id: exercise.id, user_id: user.id, user_type: user.class.name) } + + it "populates the editors with the submission's files' content" do + request.call + expect(assigns(:files)).to eq(submission.files) + end end + + context 'without an existing submission' do + it "populates the editors with the exercise's files' content" do + expect(assigns(:files)).to eq(exercise.files.visible) + end + end + + expect_status(200) + expect_template(:implement) end - context 'without an existing submission' do - it "populates the editors with the exercise's files' content" do - expect(assigns(:files)).to eq(exercise.files.visible) - end - end + context 'with an exercise without visible files' do + before(:each) { request.call } - expect_status(200) - expect_template(:implement) + expect_assigns(exercise: :exercise) + expect_flash_message(:alert, :'exercises.implement.no_files') + expect_redirect(:exercise) + end end describe 'GET #index' do