Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion app/services/foreman_templates/cleaner.rb
Original file line number Diff line number Diff line change
@@ -1,13 +1,26 @@
module ForemanTemplates
class Cleaner
PERMISSIONS = %w[import_templates export_templates view_template_syncs].freeze

def clean_up!
remove_settings
remove_permissions
end

private

def remove_settings
Setting::TemplateSync.destroy_all
Setting.where('name LIKE ?', 'template_sync_%').delete_all
end

def remove_permissions
permission_ids = Permission.where(name: PERMISSIONS).pluck(:id)
return if permission_ids.empty?

filter_ids = Filtering.where(permission_id: permission_ids).distinct.pluck(:filter_id)
Filtering.where(permission_id: permission_ids).delete_all
Filter.where(id: filter_ids).find_each { |filter| filter.destroy if filter.filterings.reload.empty? }
Permission.where(id: permission_ids).delete_all
end
end
end
27 changes: 27 additions & 0 deletions test/unit/cleaner_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
require 'test_plugin_helper'

module ForemanTemplates
class CleanerTest < ActiveSupport::TestCase
setup do
@import = Permission.find_or_create_by!(name: 'import_templates', resource_type: 'Template')
@view = Permission.find_or_create_by!(name: 'view_template_syncs', resource_type: 'Template')
@role = FactoryBot.create(:role)
@plugin_filter = FactoryBot.create(:filter, role: @role, permissions: [@import, @view])
@other_filter = FactoryBot.create(:filter, role: @role, permissions: Permission.where(name: 'view_architectures'))
Setting[:template_sync_dirname] = '/cleaner-test'
end

test 'removes the stored template sync settings' do
Cleaner.new.clean_up!
assert_empty Setting.where('name LIKE ?', 'template_sync_%')
end

test 'removes the plugin permissions and the filters left empty' do
Cleaner.new.clean_up!
assert_empty Permission.where(name: Cleaner::PERMISSIONS)
refute Filter.exists?(@plugin_filter.id)
assert Filter.exists?(@other_filter.id)
assert Role.exists?(@role.id)
end
end
end
Loading