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