From 9e42473af4a81b06694d1a976dfec6766a08816e Mon Sep 17 00:00:00 2001 From: Gerhard Schlager Date: Thu, 24 Nov 2022 13:44:26 +0100 Subject: [PATCH] FEATURE: Allow setting `default_enabled` for badges (#19178) Otherwise setting `enabled` in `Badge.seed` will always overwrite changes by admins. --- app/models/badge.rb | 9 +++++-- spec/models/badge_spec.rb | 53 +++++++++++++++++++++++++++++++++------ 2 files changed, 53 insertions(+), 9 deletions(-) diff --git a/app/models/badge.rb b/app/models/badge.rb index 77527e2af3e..2a84344cad8 100644 --- a/app/models/badge.rb +++ b/app/models/badge.rb @@ -257,8 +257,13 @@ class Badge < ActiveRecord::Base end def default_allow_title=(val) - return unless self.new_record? - self.allow_title ||= val + return if !self.new_record? + self.allow_title = val + end + + def default_enabled=(val) + return if !self.new_record? + self.enabled = val end def default_badge_grouping_id=(val) diff --git a/spec/models/badge_spec.rb b/spec/models/badge_spec.rb index 7e1c30ce9f1..cc153942a09 100644 --- a/spec/models/badge_spec.rb +++ b/spec/models/badge_spec.rb @@ -217,15 +217,54 @@ RSpec.describe Badge do end describe "#seed" do - let(:regular_badge) do - Badge.find(Badge::Regular) - end + let(:badge_id) { Badge.maximum(:id) + 1 } it "`allow_title` is not updated for existing records" do - regular_badge.update(allow_title: false) - SeedFu.seed - regular_badge.reload - expect(regular_badge.allow_title).to eq(false) + Badge.seed do |b| + b.id = badge_id + b.name = "Foo" + b.badge_type_id = BadgeType::Bronze + b.default_allow_title = true + end + + badge = Badge.find(badge_id) + expect(badge.allow_title).to eq(true) + + badge.update!(allow_title: false) + + Badge.seed do |b| + b.id = badge_id + b.name = "Foo" + b.badge_type_id = BadgeType::Bronze + b.default_allow_title = true + end + + badge.reload + expect(badge.allow_title).to eq(false) + end + + it "`enabled` is not updated for existing records" do + Badge.seed do |b| + b.id = badge_id + b.name = "Foo" + b.badge_type_id = BadgeType::Bronze + b.default_enabled = false + end + + badge = Badge.find(badge_id) + expect(badge.enabled).to eq(false) + + badge.update!(enabled: true) + + Badge.seed do |b| + b.id = badge_id + b.name = "Foo" + b.badge_type_id = BadgeType::Bronze + b.default_enabled = false + end + + badge.reload + expect(badge.enabled).to eq(true) end end end