discourse/spec/script/import_scripts/base_spec.rb
Blake Erickson ed0e4582a1
DEV: If disabled do not change setting after import (#12142)
When running an import script there are many site settings that are
changed but we reset them back to where they were originally before the
import. However, there are two settings that we don't roll back:

```
purge_unactivated_users_grace_period_days
purge_deleted_uploads_grace_period_days
```

which could have some unintended consequences.

My first question is do we *really* have to change these settings? I'm
not a huge fan of changing someones settings without them really knowing
they were changed.

If we really do have to change these settings here is my proposed PR
where we don't alter the `purge_unactivated_users_grace_period_days` if
it has been disabled.

As I'm writing this another change we could make is that we don't change
either of these site settings if we detect that they aren't set to the
default values.

The drive behind this PR is that there is a discourse instance which
relies on staged users as part of their workflow and this setting was
changed by accident via the import script causing users to be deleted
that shouldn't have been.
2021-02-19 09:33:35 -07:00

65 lines
1.8 KiB
Ruby

# frozen_string_literal: true
require 'rails_helper'
require_relative '../../../script/import_scripts/base'
describe ImportScripts::Base do
before do
STDOUT.stubs(:write)
end
class MockSpecImporter < ImportScripts::Base
def initialize(data)
super()
@import_data = data
end
def execute
import_users
import_posts
import_bookmarks
end
def import_users
users = @import_data[:users]
create_users(users) do |row|
{ email: row[:email], id: row[:id] }
end
end
def import_posts
posts = @import_data[:posts]
create_posts(posts) do |row|
user_id = @lookup.user_id_from_imported_user_id(row[:user_id]) || -1
{ user_id: user_id, raw: row[:raw], id: row[:id], title: "Test topic for post #{row[:id]}" }
end
end
def import_bookmarks
bookmarks = @import_data[:bookmarks]
create_bookmarks(bookmarks) do |row|
{ post_id: row[:post_id], user_id: row[:user_id] }
end
end
end
let(:import_data) do
import_file = Rack::Test::UploadedFile.new(file_from_fixtures("base-import-data.json", "json"))
ActiveSupport::HashWithIndifferentAccess.new(JSON.parse(import_file.read))
end
it "creates bookmarks, posts, and users" do
MockSpecImporter.new(import_data).perform
expect(Bookmark.count).to eq(5)
expect(Post.count).to eq(5)
expect(User.where('id > 0').count).to eq(1)
expect(SiteSetting.purge_unactivated_users_grace_period_days).to eq(60)
end
it "does not change purge unactivated users setting if disabled" do
SiteSetting.purge_unactivated_users_grace_period_days = 0
MockSpecImporter.new(import_data).perform
expect(SiteSetting.purge_unactivated_users_grace_period_days).to eq(0)
end
end