67 changes: 62 additions & 5 deletions spec/services/staff_action_logger_spec.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# frozen_string_literal: true

RSpec.describe StaffActionLogger do
let(:long_string) { "Na " * 100_000 + "Batman!" }
fab!(:admin)
let(:logger) { described_class.new(admin) }

Expand Down Expand Up @@ -69,6 +70,13 @@
log_post_deletion
}.to change { UserHistory.count }.by(1)
end

it "truncates overly long values" do
deleted_post.update!(raw: long_string, skip_validation: true)
expect { log_post_deletion }.to change { UserHistory.count }.by(1)
log = UserHistory.last
expect(log.details.size).to be_between(50_000, 110_000)
end
end

describe "log_topic_delete_recover" do
Expand All @@ -90,6 +98,13 @@
it "creates a new UserHistory record" do
expect { log_topic_delete_recover }.to change { UserHistory.count }.by(1)
end

it "truncates overly long values" do
Fabricate(:post, topic: topic, skip_validation: true, raw: long_string)
expect { log_topic_delete_recover }.to change { UserHistory.count }.by(1)
log = UserHistory.last
expect(log.details.size).to be_between(50_000, 110_000)
end
end

context "when recovering topic" do
Expand All @@ -112,6 +127,13 @@
it "creates a new UserHistory record" do
expect { log_topic_delete_recover }.to change { UserHistory.count }.by(1)
end

it "truncates overly long values" do
Fabricate(:post, topic: topic, skip_validation: true, raw: long_string)
expect { log_topic_delete_recover }.to change { UserHistory.count }.by(1)
log = UserHistory.last
expect(log.details.size).to be_between(50_000, 110_000)
end
end
end

Expand Down Expand Up @@ -187,14 +209,12 @@
end

describe "log_theme_change" do
fab!(:theme)

it "raises an error when params are invalid" do
expect { logger.log_theme_change(nil, nil) }.to raise_error(Discourse::InvalidParameters)
end

let! :theme do
Fabricate(:theme)
end

it "logs new site customizations" do
log_record = logger.log_theme_change(nil, theme)
expect(log_record.subject).to eq(theme.name)
Expand Down Expand Up @@ -226,15 +246,28 @@
],
)
end

it "doesn't log values when the json is too large" do
old_json = ThemeSerializer.new(theme, root: false).to_json

theme.set_field(target: :common, name: :scss, value: long_string)

log_record = logger.log_theme_change(old_json, theme)

expect(log_record.previous_value).not_to be_present
expect(log_record.new_value).not_to be_present
expect(log_record.context).to be_present
end
end

describe "log_theme_destroy" do
fab!(:theme)

it "raises an error when params are invalid" do
expect { logger.log_theme_destroy(nil) }.to raise_error(Discourse::InvalidParameters)
end

it "creates a new UserHistory record" do
theme = Fabricate(:theme)
theme.set_field(target: :common, name: :scss, value: "body{margin: 10px;}")

log_record = logger.log_theme_destroy(theme)
Expand All @@ -253,6 +286,15 @@
],
)
end

it "doesn't log values when the json is too large" do
theme.set_field(target: :common, name: :scss, value: long_string)
log_record = logger.log_theme_destroy(theme)

expect(log_record.previous_value).not_to be_present
expect(log_record.new_value).not_to be_present
expect(log_record.context).to be_present
end
end

describe "log_theme_setting_change" do
Expand Down Expand Up @@ -398,6 +440,12 @@
expect(logged.custom_type).to eq("clicked_something")
expect(logged.topic_id).to be === 1234
end

it "truncates overly long values" do
logged = logger.log_custom(:shower_thought, lyrics: long_string)
expect(logged).to be_valid
expect(logged.details.size).to be_between(50_000, 110_000)
end
end

describe "log_category_settings_change" do
Expand Down Expand Up @@ -654,6 +702,15 @@
expect(user_history.action).to eq(UserHistory.actions[:post_rejected])
expect(user_history.details).to include(reviewable.payload["raw"])
end

it "truncates overly long values" do
reviewable.payload["raw"] = long_string
reviewable.save!

expect { log_post_rejected }.to change { UserHistory.count }.by(1)
log = UserHistory.last
expect(log.details.size).to be_between(50_000, 110_000)
end
end

describe "log_topic_closed" do
Expand Down