From c0f3e3222161a9a9fa2781ad583adfcfe15daa18 Mon Sep 17 00:00:00 2001 From: David Bailey Date: Fri, 19 Nov 2021 06:59:45 -0800 Subject: [PATCH] omit blank objectives when updating lesson --- dashboard/app/models/lesson.rb | 3 ++- .../controllers/lessons_controller_test.rb | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/dashboard/app/models/lesson.rb b/dashboard/app/models/lesson.rb index 61a04c9c3d385..803ed4805bb29 100644 --- a/dashboard/app/models/lesson.rb +++ b/dashboard/app/models/lesson.rb @@ -713,11 +713,12 @@ def update_objectives(objectives) return unless objectives self.objectives = objectives.map do |objective| + next nil unless objective['description'].present? persisted_objective = objective['id'].blank? ? Objective.new(key: SecureRandom.uuid) : Objective.find(objective['id']) persisted_objective.description = objective['description'] persisted_objective.save! persisted_objective - end + end.compact end # Used for seeding from JSON. Returns the full set of information needed to diff --git a/dashboard/test/controllers/lessons_controller_test.rb b/dashboard/test/controllers/lessons_controller_test.rb index 4fe27833aa40e..c5c1371f9a684 100644 --- a/dashboard/test/controllers/lessons_controller_test.rb +++ b/dashboard/test/controllers/lessons_controller_test.rb @@ -1008,6 +1008,25 @@ class LessonsControllerTest < ActionController::TestCase assert_equal 'edited description', objective.description end + test 'objectives with empty description are removed' do + sign_in @levelbuilder + objective_to_keep = create :objective, description: 'to keep', lesson: @lesson + objective_to_remove = create :objective, description: 'to remove', lesson: @lesson + assert_equal 2, @lesson.objectives.count + + objectives_data = @lesson.summarize_for_lesson_edit[:objectives] + objectives_data[1][:description] = '' + objectives_data.push(id: nil, description: '') + + new_update_params = @update_params.merge({objectives: [objective_to_keep.summarize_for_edit].to_json}) + put :update, params: new_update_params + @lesson.reload + + assert_equal 1, @lesson.objectives.count + assert_nil Objective.find_by_id(objective_to_remove.id) + assert_not_nil objective_to_keep.reload + end + test 'add script level via lesson update' do sign_in @levelbuilder activity = create :lesson_activity, lesson: @lesson