From 4ebbad991e63486734deb28bbd5a2ff1d05d02e0 Mon Sep 17 00:00:00 2001 From: Sam Date: Thu, 4 May 2017 14:03:07 -0400 Subject: [PATCH] FIX: properly clean up related color schemes on delete --- app/models/theme.rb | 12 ++++++++++++ app/serializers/color_scheme_serializer.rb | 4 ++++ spec/models/theme_spec.rb | 15 +++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/app/models/theme.rb b/app/models/theme.rb index fc199ec600..ca1e965f7b 100644 --- a/app/models/theme.rb +++ b/app/models/theme.rb @@ -44,6 +44,18 @@ class Theme < ActiveRecord::Base if SiteSetting.default_theme_key == self.key Theme.clear_default! end + + if self.id + + ColorScheme + .where(theme_id: self.id) + .where("id NOT IN (SELECT color_scheme_id FROM themes where color_scheme_id IS NOT NULL)") + .destroy_all + + ColorScheme + .where(theme_id: self.id) + .update_all(theme_id: nil) + end end after_commit ->(theme) do diff --git a/app/serializers/color_scheme_serializer.rb b/app/serializers/color_scheme_serializer.rb index f119d79a75..bbdee26f6c 100644 --- a/app/serializers/color_scheme_serializer.rb +++ b/app/serializers/color_scheme_serializer.rb @@ -5,4 +5,8 @@ class ColorSchemeSerializer < ApplicationSerializer def theme_name object.theme&.name end + + def theme_id + object.theme&.id + end end diff --git a/spec/models/theme_spec.rb b/spec/models/theme_spec.rb index c951c02d6d..c92f553d7a 100644 --- a/spec/models/theme_spec.rb +++ b/spec/models/theme_spec.rb @@ -23,6 +23,21 @@ describe Theme do expect(s.key).not_to eq(nil) end + it 'can properly clean up color schemes' do + theme = Theme.create!(name: 'bob', user_id: -1) + scheme = ColorScheme.create!(theme_id: theme.id, name: 'test') + scheme2 = ColorScheme.create!(theme_id: theme.id, name: 'test2') + + Theme.create!(name: 'bob', user_id: -1, color_scheme_id: scheme2.id) + + theme.destroy! + scheme2.reload + + expect(scheme2).not_to eq(nil) + expect(scheme2.theme_id).to eq(nil) + expect(ColorScheme.find_by(id: scheme.id)).to eq(nil) + end + it 'can support child themes' do child = Theme.new(name: '2', user_id: user.id)