Initial commit
This commit is contained in:
60
spec/lib/duplicate_remover_spec.rb
Normal file
60
spec/lib/duplicate_remover_spec.rb
Normal file
@@ -0,0 +1,60 @@
|
||||
require 'rails_helper'
|
||||
require 'duplicate_remover'
|
||||
|
||||
describe DuplicateRemover do
|
||||
before(:all) do
|
||||
Temping.create :person do
|
||||
validates :name, uniqueness: true
|
||||
|
||||
with_columns do |t|
|
||||
t.string :name
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
after(:all) do
|
||||
Temping.teardown
|
||||
end
|
||||
|
||||
context 'when record attribute is unique' do
|
||||
it 'does not update the record' do
|
||||
person = create_person("Jane")
|
||||
|
||||
DuplicateRemover.new(person, :name).perform!
|
||||
|
||||
expect(person.name).to eq("Jane")
|
||||
end
|
||||
end
|
||||
|
||||
context 'when record attribute is a duplicate' do
|
||||
it 'updates the record with a unique name' do
|
||||
create_person("Jane")
|
||||
person = create_person("Jane")
|
||||
|
||||
DuplicateRemover.new(person, :name).perform!
|
||||
|
||||
expect(person.name).to eq("Jane (2)")
|
||||
end
|
||||
end
|
||||
|
||||
context 'when record attribute is a duplicate multiple times' do
|
||||
it 'updates the record with a unique name' do
|
||||
create_person("Jane")
|
||||
create_person("Jane (2)")
|
||||
create_person("Jane (3)")
|
||||
person = create_person("Jane")
|
||||
|
||||
DuplicateRemover.new(person, :name).perform!
|
||||
|
||||
expect(person.name).to eq("Jane (4)")
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def create_person(name)
|
||||
Person.new(name: name) do |person|
|
||||
person.save(validate: false)
|
||||
end
|
||||
end
|
||||
end
|
||||
143
spec/lib/zoom_gateway_spec.rb
Normal file
143
spec/lib/zoom_gateway_spec.rb
Normal file
@@ -0,0 +1,143 @@
|
||||
require 'rails_helper'
|
||||
require 'zoom_gateway'
|
||||
|
||||
RSpec.describe ZoomGateway do
|
||||
let(:roles_list_response) { {"roles" => [{"name" => 'pro-directme-host', "id" => "host_role_id"}, {"name" => 'basic-directme-host', "id" => "host_role_id"}]} }
|
||||
let(:host_user_hash) { {"email" => "user1@directme", "id" => "host_user_id"} }
|
||||
let(:roles_members_response) { {"members" => [host_user_hash]} }
|
||||
let(:user_create_response) { {"id" => "new_host_id"} }
|
||||
let(:roles_assign_response) { {"ids" => ["new_host_id"]} }
|
||||
let(:meeting_hash) { {"id" => "meeting_id", "start_url" => "https://start_url", "join_url" => "https://join_url"} }
|
||||
let(:gateway) { ZoomGateway.new }
|
||||
|
||||
describe "constants" do
|
||||
context '.USER_TYPE_NAME' do
|
||||
it 'defaults to "basic"' do
|
||||
expect(ZoomGateway.USER_TYPE_NAME).to eq('basic')
|
||||
end
|
||||
|
||||
it 'depends ENV["ZOOM_USER_TYPE"]' do
|
||||
stub_env_variable('ZOOM_USER_TYPE', 'pro')
|
||||
expect(ZoomGateway.USER_TYPE_NAME).to eq('pro')
|
||||
end
|
||||
|
||||
it 'only accepts "pro" as an alternative' do
|
||||
stub_env_variable('ZOOM_USER_TYPE', 'wrong')
|
||||
expect(ZoomGateway.USER_TYPE_NAME).to eq('basic')
|
||||
end
|
||||
end
|
||||
|
||||
context '.USER_TYPE' do
|
||||
it 'defaults to 1 (basic)' do
|
||||
expect(ZoomGateway.USER_TYPE).to eq(1)
|
||||
end
|
||||
|
||||
it 'depends on ENV["ZOOM_USER_TYPE"]' do
|
||||
stub_env_variable('ZOOM_USER_TYPE', 'pro')
|
||||
expect(ZoomGateway.USER_TYPE).to eq(2)
|
||||
end
|
||||
|
||||
it 'only accepts "pro" as an alternative to "basic"' do
|
||||
stub_env_variable('ZOOM_USER_TYPE', 'wrong')
|
||||
expect(ZoomGateway.USER_TYPE).to eq(1)
|
||||
end
|
||||
end
|
||||
|
||||
context '.USER_LIMIT' do
|
||||
it 'defaults to 3' do
|
||||
expect(ZoomGateway.PRO_USERS_LIMIT).to eq(3)
|
||||
end
|
||||
|
||||
it 'depends on ENV["ZOOM_PRO_USERS_LIMIT"]' do
|
||||
stub_env_variable('ZOOM_PRO_USERS_LIMIT', 10)
|
||||
expect(ZoomGateway.PRO_USERS_LIMIT).to eq(10)
|
||||
end
|
||||
end
|
||||
|
||||
context '.HOST_ROLE' do
|
||||
it 'has a default' do
|
||||
expect(ZoomGateway.HOST_ROLE).to eq('basic-directme-host')
|
||||
end
|
||||
|
||||
it 'depends on user type' do
|
||||
stub_env_variable('ZOOM_USER_TYPE', 'pro')
|
||||
expect(ZoomGateway.HOST_ROLE).to eq('pro-directme-host')
|
||||
end
|
||||
end
|
||||
|
||||
context '.enable_recordings?' do
|
||||
it 'is truthy when ZOOM_ENABLE_RECORDINGS is set to 1' do
|
||||
stub_env_variable('ZOOM_ENABLE_RECORDINGS', '1')
|
||||
expect(ZoomGateway.enable_recordings?).to be_truthy
|
||||
end
|
||||
|
||||
it 'is falsey otherwise' do
|
||||
stub_env_variable('ZOOM_ENABLE_RECORDINGS', '0')
|
||||
expect(ZoomGateway.enable_recordings?).to be_falsey
|
||||
|
||||
stub_env_variable('ZOOM_ENABLE_RECORDINGS', '2')
|
||||
expect(ZoomGateway.enable_recordings?).to be_falsey
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe ".find_meeting" do
|
||||
it "returns meeting hash" do
|
||||
allow_any_instance_of(Zoom.new.class).to receive(:meeting_get).and_return(meeting_hash)
|
||||
|
||||
meeting = gateway.find_meeting("meeting_id")
|
||||
expect(meeting).to eq(meeting_hash)
|
||||
end
|
||||
end
|
||||
|
||||
describe ".create_meeting" do
|
||||
before(:each) { allow_any_instance_of(Zoom.new.class).to receive(:meeting_create).and_return(meeting_hash) }
|
||||
|
||||
it "returns a meeting id" do
|
||||
meeting_id = gateway.create_meeting(topic: "Test topic", user_id: "user_id")
|
||||
expect(meeting_id).to eq("meeting_id")
|
||||
end
|
||||
end
|
||||
|
||||
describe ".create_host" do
|
||||
before do
|
||||
allow_any_instance_of(Zoom.new.class).to receive(:roles_list).and_return(roles_list_response)
|
||||
end
|
||||
|
||||
it "returns new host id" do
|
||||
allow_any_instance_of(Zoom.new.class).to receive(:user_create).and_return(user_create_response)
|
||||
allow_any_instance_of(Zoom.new.class).to receive(:roles_assign).and_return(roles_assign_response)
|
||||
|
||||
expect(gateway.create_host("host-email@address")).to eq("new_host_id")
|
||||
end
|
||||
|
||||
context 'USER_TYPE=pro and PRO_USERS_LIMIT exceeded' do
|
||||
before :each do
|
||||
allow_any_instance_of(Zoom.new.class).to receive(:roles_members).and_return({'total_records' => 2})
|
||||
end
|
||||
|
||||
it 'raises an exception' do
|
||||
allow(ENV).to receive(:[]).and_call_original
|
||||
allow(ENV).to receive(:[]).with('ZOOM_USER_TYPE').and_return('pro')
|
||||
allow(ENV).to receive(:[]).with('ZOOM_PRO_USERS_LIMIT').and_return('2')
|
||||
|
||||
expect { gateway.create_host('host-email@address') }.to raise_error(ZoomGateway::TooManyHosts)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '.delete_recording' do
|
||||
it 'calls api client to delete recording' do
|
||||
expect_any_instance_of(Zoom.new.class).to receive(:recording_delete)
|
||||
gateway.delete_recording('meeting-id', 'recording-id')
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def stub_env_variable(name, value)
|
||||
allow(ENV).to receive(:[]).and_call_original
|
||||
allow(ENV).to receive(:[]).with(name.to_s).and_return(value.to_s)
|
||||
end
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user