cartodb/spec/models/carto/visualization/watcher_spec.rb
2020-06-15 10:58:47 +08:00

78 lines
2.3 KiB
Ruby

require_relative '../../../spec_helper'
describe Carto::Visualization::Watcher do
before(:all) do
$tables_metadata.flushdb
end
after(:all) do
$tables_metadata.flushdb
end
describe '#basic_tests' do
it 'tests notify and list methods' do
watcher_ttl = 2
org_id = UUIDTools::UUID.timestamp_create.to_s
organization_mock = mock
organization_mock.stubs(:id).returns(org_id)
# Normal user
user1_name = 'wadus1'
user1_mock = mock
user1_mock.stubs(:username).returns(user1_name)
user1_mock.stubs(:organization).returns(organization_mock)
#Another org user
user2_name = 'wadus2'
user2_mock = mock
user2_mock.stubs(:username).returns(user2_name)
user2_mock.stubs(:organization).returns(organization_mock)
vis_id = UUIDTools::UUID.timestamp_create.to_s
visualization_mock = mock
visualization_mock.stubs(:id).returns(vis_id)
# Try to create a watcher from a non-org user
expect {
non_org_user_mock = mock
non_org_user_mock.stubs(:organization).returns(nil)
Carto::Visualization::Watcher.new(non_org_user_mock, visualization_mock)
}.to raise_exception Carto::Visualization::WatcherError
u1_watcher = Carto::Visualization::Watcher.new(user1_mock, visualization_mock, watcher_ttl)
u1_watcher.nil?.should eq false
u1_watcher.list.should eq []
u1_watcher.notify
u1_watcher.list.should eq [user1_mock.username]
sleep(watcher_ttl+1)
u1_watcher.list.should eq []
u1_watcher.notify
u1_watcher.list.should eq [user1_mock.username]
u2_watcher = Carto::Visualization::Watcher.new(user2_mock, visualization_mock, watcher_ttl)
u2_watcher.nil?.should eq false
# All watchers must notify all users
u2_watcher.list.should eq [user1_mock.username]
u2_watcher.notify
# Both watchers should be now updated
(u2_watcher.list - [user1_mock.username, user2_mock.username]).should eq []
(u1_watcher.list - [user1_mock.username, user2_mock.username]).should eq []
sleep(watcher_ttl+1)
# And empty
u1_watcher.list.should eq []
u2_watcher.list.should eq []
u2_watcher.notify
sleep(1)
u1_watcher.list.should eq [user2_mock.username]
u2_watcher.list.should eq [user2_mock.username]
end
end
end