mirror of
https://github.com/discourse/discourse.git
synced 2024-12-15 20:53:40 +08:00
ed0e4582a1
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.
65 lines
1.8 KiB
Ruby
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
|