mirror of
https://github.com/discourse/discourse.git
synced 2025-09-07 12:02:53 +08:00
Merge pull request #4297 from tgxworld/handle_user_enabled_readonly_mode
Handle user enabled readonly mode
This commit is contained in:
commit
f256e3afb6
3 changed files with 87 additions and 45 deletions
|
@ -85,50 +85,86 @@ describe Discourse do
|
|||
|
||||
end
|
||||
|
||||
context "#enable_readonly_mode" do
|
||||
context 'readonly mode' do
|
||||
let(:readonly_mode_key) { Discourse::READONLY_MODE_KEY }
|
||||
let(:readonly_mode_ttl) { Discourse::READONLY_MODE_KEY_TTL }
|
||||
let(:user_readonly_mode_key) { Discourse::USER_READONLY_MODE_KEY }
|
||||
|
||||
it "adds a key in redis and publish a message through the message bus" do
|
||||
$redis.expects(:set).with(Discourse.readonly_mode_key, 1)
|
||||
MessageBus.expects(:publish).with(Discourse.readonly_channel, true)
|
||||
Discourse.enable_readonly_mode
|
||||
after do
|
||||
$redis.del(readonly_mode_key)
|
||||
$redis.del(user_readonly_mode_key)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
context "#disable_readonly_mode" do
|
||||
|
||||
it "removes a key from redis and publish a message through the message bus" do
|
||||
$redis.expects(:del).with(Discourse.readonly_mode_key)
|
||||
MessageBus.expects(:publish).with(Discourse.readonly_channel, false)
|
||||
Discourse.disable_readonly_mode
|
||||
def assert_readonly_mode(message, key, ttl = -1)
|
||||
expect(message.channel).to eq(Discourse.readonly_channel)
|
||||
expect(message.data).to eq(true)
|
||||
expect($redis.get(key)).to eq("1")
|
||||
expect($redis.ttl(key)).to eq(ttl)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
context "#readonly_mode?" do
|
||||
it "is false by default" do
|
||||
expect(Discourse.readonly_mode?).to eq(false)
|
||||
def assert_readonly_mode_disabled(message, key)
|
||||
expect(message.channel).to eq(Discourse.readonly_channel)
|
||||
expect(message.data).to eq(false)
|
||||
expect($redis.get(key)).to eq(nil)
|
||||
end
|
||||
|
||||
it "returns true when the key is present in redis" do
|
||||
begin
|
||||
$redis.set(Discourse.readonly_mode_key, 1)
|
||||
expect(Discourse.readonly_mode?).to eq(true)
|
||||
ensure
|
||||
$redis.del(Discourse.readonly_mode_key)
|
||||
describe ".enable_readonly_mode" do
|
||||
it "adds a key in redis and publish a message through the message bus" do
|
||||
expect($redis.get(readonly_mode_key)).to eq(nil)
|
||||
message = MessageBus.track_publish { Discourse.enable_readonly_mode }.first
|
||||
assert_readonly_mode(message, readonly_mode_key, readonly_mode_ttl)
|
||||
end
|
||||
|
||||
context 'user enabled readonly mode' do
|
||||
it "adds a key in redis and publish a message through the message bus" do
|
||||
expect($redis.get(user_readonly_mode_key)).to eq(nil)
|
||||
message = MessageBus.track_publish { Discourse.enable_readonly_mode(user_enabled: true) }.first
|
||||
assert_readonly_mode(message, user_readonly_mode_key)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
it "returns true when Discourse is recently read only" do
|
||||
Discourse.received_readonly!
|
||||
expect(Discourse.readonly_mode?).to eq(true)
|
||||
end
|
||||
end
|
||||
describe ".disable_readonly_mode" do
|
||||
it "removes a key from redis and publish a message through the message bus" do
|
||||
Discourse.enable_readonly_mode
|
||||
|
||||
context ".received_readonly!" do
|
||||
it "sets the right time" do
|
||||
time = Discourse.received_readonly!
|
||||
expect(Discourse.last_read_only['default']).to eq(time)
|
||||
message = MessageBus.track_publish do
|
||||
Discourse.disable_readonly_mode
|
||||
end.first
|
||||
|
||||
assert_readonly_mode_disabled(message, readonly_mode_key)
|
||||
end
|
||||
|
||||
context 'user disabled readonly mode' do
|
||||
it "removes readonly key in redis and publish a message through the message bus" do
|
||||
Discourse.enable_readonly_mode(user_enabled: true)
|
||||
message = MessageBus.track_publish { Discourse.disable_readonly_mode(user_enabled: true) }.first
|
||||
assert_readonly_mode_disabled(message, user_readonly_mode_key)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe ".readonly_mode?" do
|
||||
it "is false by default" do
|
||||
expect(Discourse.readonly_mode?).to eq(false)
|
||||
end
|
||||
|
||||
it "returns true when the key is present in redis" do
|
||||
$redis.set(readonly_mode_key, 1)
|
||||
expect(Discourse.readonly_mode?).to eq(true)
|
||||
end
|
||||
|
||||
it "returns true when Discourse is recently read only" do
|
||||
Discourse.received_readonly!
|
||||
expect(Discourse.readonly_mode?).to eq(true)
|
||||
end
|
||||
end
|
||||
|
||||
describe ".received_readonly!" do
|
||||
it "sets the right time" do
|
||||
time = Discourse.received_readonly!
|
||||
expect(Discourse.last_read_only['default']).to eq(time)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue