Skip to content

Commit 4215ec9

Browse files
committed
Merge pull request code-dot-org#578 from code-dot-org/no-case-change-level
do not allow changing only case when editing level name
2 parents 43cddda + 745f704 commit 4215ec9

File tree

3 files changed

+40
-8
lines changed

3 files changed

+40
-8
lines changed

dashboard/app/controllers/levels_controller.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,12 @@ def update_blocks
8686
# PATCH/PUT /levels/1
8787
# PATCH/PUT /levels/1.json
8888
def update
89+
if level_params[:name] && @level.name.downcase == level_params[:name].downcase
90+
# do not allow case-only changes in the level name because that confuses git on OSX
91+
@level.errors.add(:name, 'Cannot change only the capitalization of the level name (it confuses git on OSX)')
92+
render json: @level.errors, status: :unprocessable_entity
93+
return
94+
end
8995
if @level.update(level_params)
9096
render json: { redirect: level_url(@level) }.to_json
9197
else

dashboard/app/views/levels/_form.html.haml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
#validation-error{style: 'background-color: yellow'}
2+
- if @level.errors.any?
3+
%h2
4+
= pluralize(@level.errors.count, "error")
5+
prohibited this level from being saved:
6+
%ul
7+
- @level.errors.full_messages.each do |msg|
8+
%li= msg
19
= form_for [@level], method: @level.new_record? ? :post : :patch, remote: true do |f|
210
= f.hidden_field :type, value: @type_class.to_s.presence || @level.type
311
.field
@@ -23,14 +31,6 @@
2331
= render partial: 'levels/editors/dsl', locals: {f: f} if @level.is_a? DSLDefined
2432
.actions
2533
= f.submit
26-
#validation-error
27-
- if @level.errors.any?
28-
%h2
29-
= pluralize(@level.errors.count, "error")
30-
prohibited this level from being saved:
31-
%ul
32-
- @level.errors.full_messages.each do |msg|
33-
%li= msg
3434
:javascript
3535
#{render partial: 'shared/ajax_submit', formats: [:js], locals: {form_selector: @level.new_record? ? '#new_level' : '.edit_level'}}
3636
function make_selection_handler(flag) {

dashboard/test/controllers/levels_controller_test.rb

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,4 +448,30 @@ class LevelsControllerTest < ActionController::TestCase
448448
assert_equal new_level.name, "Fun Level (copy 1)"
449449
assert_redirected_to "/levels/#{new_level.id}/edit"
450450
end
451+
452+
test 'cannot update level name with just a case change' do
453+
level = create :level, name: 'original name'
454+
455+
post :update, id: level.id, level: {name: 'ORIGINAL NAME'}
456+
457+
assert_response 422
458+
459+
# error message
460+
assert assigns(:level).errors[:name]
461+
462+
level = level.reload
463+
# same name
464+
assert_equal 'original name', level.name
465+
end
466+
467+
test 'can update level name' do
468+
level = create :level, name: 'original name'
469+
470+
post :update, id: level.id, level: {name: 'different name'}
471+
472+
level = level.reload
473+
# same name
474+
assert_equal 'different name', level.name
475+
end
476+
451477
end

0 commit comments

Comments
 (0)