Skip to content
Snippets Groups Projects
Unverified Commit b4888971 authored by Ahmad Farhat's avatar Ahmad Farhat Committed by GitHub
Browse files

Reverted backend to create room modal (#3434)

parent 6ea4991e
No related branches found
No related tags found
No related merge requests found
......@@ -10,7 +10,6 @@ class Room < ApplicationRecord
validates :meeting_id, presence: true, uniqueness: true
before_validation :set_friendly_id, :set_meeting_id, on: :create
after_create :set_meeting_passwords!
private
......@@ -32,28 +31,4 @@ class Room < ApplicationRecord
rescue StandardError
retry
end
# Fetches and create all saved meeting options for the room
def create_default_meeting_options!(ignore_option_ids)
meeting_option_ids_default_values_hash = MeetingOption.pluck(:id, :default_value).to_h
meeting_option_ids_default_values_hash.each_key do |id|
next if ignore_option_ids.include?(id)
RoomMeetingOption.create! room_id: self.id, meeting_option_id: id, value: meeting_option_ids_default_values_hash[id]
end
end
# Generates and sets the 'attendeePW' and the 'moderatorPW' for the room meeting
def set_meeting_passwords!
password_option_ids = MeetingOption.where('name LIKE ?', '%PW').pluck(:id)
password_option_ids.each do |id|
# TODO: Revisit the password random value.
RoomMeetingOption.create! room_id: self.id, meeting_option_id: id, value: SecureRandom.alphanumeric(20)
end
# After creating the passwords, the room can create all other default meeting options
create_default_meeting_options! password_option_ids
end
end
......@@ -14,14 +14,11 @@ class BigBlueButtonApi
# Start a meeting for a specific room and returns the join URL.
def start_meeting(room:, meeting_starter:, options: {})
# TODO: amir - Revisit this.
room_meeting_option_name_values_hash = room.room_meeting_options.includes(:meeting_option).where.not('name LIKE ?', 'gl%').pluck(:name,
:value).to_h
create_options = room_meeting_option_name_values_hash.merge(options)
create_options = default_create_opts.merge(options)
join_options = { join_via_html5: true } # TODO: amir - Revisit this (createTime,...).
user_name = meeting_starter&.name || 'Someone'
password = (meeting_starter && create_options['moderatorPW']) || create_options['attendeePW']
password = (meeting_starter && create_options[:moderatorPW]) || create_options[:attendeePW]
bbb_server.create_meeting room.name, room.friendly_id, create_options
bbb_server.join_meeting_url room.friendly_id, user_name, password, join_options
......@@ -36,4 +33,20 @@ class BigBlueButtonApi
def bbb_secret
ENV.fetch 'BIGBLUEBUTTON_SECRET', '8cd8ef52e8e101574e400365b55e11a6'
end
def default_create_opts
{
# TODO: amir - revisit this.
record: true,
logoutURL: 'http://localhost',
moderatorPW: 'mp',
attendeePW: 'ap',
moderatorOnlyMessage: 'Welcome Moderator',
muteOnStart: false,
guestPolicy: 'ALWAYS_ACCEPT',
'meta_gl-v3-listed': 'public',
'meta_bbb-origin-version': 3,
'meta_bbb-origin': 'Greenlight'
}
end
end
# frozen_string_literal: true
FactoryBot.define do
factory :meeting_option do
name { Faker::Types.unique.rb_string }
default_value { Faker::Types.rb_string }
end
end
......@@ -29,40 +29,6 @@ RSpec.describe Room, type: :model do
end
end
describe 'after_create' do
before do
create_list :meeting_option, 5
end
describe '#create_default_meeting_options!' do
it 'fetches and creates all saved none password meeting options for the created room with default values' do
room = create(:room)
default_meeting_options_ids_values_hash = MeetingOption.pluck(:id, :default_value).to_h
room_meeting_option_ids_values_hash = room.room_meeting_options.pluck(:meeting_option_id, :value).to_h
expect(room_meeting_option_ids_values_hash).to eq(default_meeting_options_ids_values_hash)
end
end
describe '#set_meeting_passwords' do
before do
create :meeting_option, name: 'somePW', default_value: ''
create :meeting_option, name: 'someOtherPW', default_value: ''
end
it 'creates and sets the password meeting options and the rest of the default options for the created room' do
room = create(:room)
expect(room.room_meeting_options.count).to eq(MeetingOption.count)
password_option_ids_default_values_hash = MeetingOption.where('name LIKE ?', '%PW').pluck(:id, :default_value).to_h
room_meeting_options_ids_values = room.room_meeting_options.pluck(:meeting_option_id, :value).to_h
password_option_ids_default_values_hash&.each_key do |id|
expect(room_meeting_options_ids_values[id]).not_to eq(password_option_ids_default_values_hash[id])
end
end
end
end
describe 'validations' do
subject { create(:room) }
......
......@@ -43,37 +43,28 @@ describe BigBlueButtonApi, type: :service do
let(:bbb_server) { instance_double(BigBlueButton::BigBlueButtonApi) }
let(:room) { create(:room) }
let(:meeting_starter) { room.user }
let(:room_meeting_option_hash) do
room.room_meeting_options.includes(:meeting_option).where.not('name LIKE ?', 'gl%').pluck(:name,
:value).to_h
end
before do
allow(bbb_service).to receive(:default_create_opts).and_return(default_create_opts)
allow(BigBlueButton::BigBlueButtonApi).to receive(:new).and_return(bbb_server)
allow(bbb_server).to receive(:create_meeting).and_return(true)
allow(bbb_server).to receive(:join_meeting_url).and_return(true)
create :meeting_option, name: 'moderatorPW', default_value: 'moderatorPW'
create :meeting_option, name: 'attendeePW', default_value: 'attendeePW'
create :meeting_option, name: 'option', default_value: 'value'
create :meeting_option, name: 'glOption', default_value: 'value'
end
it 'calls bbb_api#create_meeting' do
expect(bbb_server).to receive(:create_meeting).with(room.name, room.friendly_id, room_meeting_option_hash)
expect(bbb_server).to receive(:create_meeting).with(room.name, room.friendly_id, default_create_opts)
bbb_service.start_meeting room:, meeting_starter: nil, options: {}
end
describe 'calls bbb_api#join_meeting_url' do
it 'With Moderator password and the meeting starter name for authenticated requests' do
expect(bbb_server).to receive(:join_meeting_url).with(room.friendly_id, meeting_starter.name, room_meeting_option_hash['moderatorPW'],
expect(bbb_server).to receive(:join_meeting_url).with(room.friendly_id, meeting_starter.name, default_create_opts[:moderatorPW],
default_join_opts)
bbb_service.start_meeting room:, meeting_starter:, options: {}
end
it 'With attendee password and user name as "Someone" for unauthenticated requests' do
expect(bbb_server).to receive(:join_meeting_url).with(room.friendly_id, 'Someone', room_meeting_option_hash['attendeePW'],
default_join_opts)
expect(bbb_server).to receive(:join_meeting_url).with(room.friendly_id, 'Someone', default_create_opts[:attendeePW], default_join_opts)
bbb_service.start_meeting room:, meeting_starter: nil, options: {}
end
end
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment