135 lines
5.6 KiB
Ruby
135 lines
5.6 KiB
Ruby
#
|
|
# Copyright (C) 2011 - present Instructure, Inc.
|
|
#
|
|
# This file is part of Canvas.
|
|
#
|
|
# Canvas is free software: you can redistribute it and/or modify it under
|
|
# the terms of the GNU Affero General Public License as published by the Free
|
|
# Software Foundation, version 3 of the License.
|
|
#
|
|
# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
|
# details.
|
|
#
|
|
# You should have received a copy of the GNU Affero General Public License along
|
|
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
|
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper.rb')
|
|
require_relative('web_conference_spec_helper')
|
|
|
|
describe WimbaConference do
|
|
include_examples 'WebConference'
|
|
|
|
# implements this WebConference option:
|
|
it { is_expected.to respond_to :admin_settings_url }
|
|
|
|
before(:all) do
|
|
WimbaConference.class_eval do
|
|
# set up a simple double that mimics basic API functionality
|
|
def send_request(action, opts={})
|
|
@mocked_users ||= {:added => [], :admins => [], :joined => []}
|
|
extra = ''
|
|
if action == 'Init'
|
|
@auth_cookie = 'authcookie=secret'
|
|
else
|
|
return nil unless init_session
|
|
return nil unless @auth_cookie == 'authcookie=secret'
|
|
case action
|
|
when 'modifyUser'
|
|
return nil unless @mocked_users[:added].include?(opts['target'])
|
|
when 'createUser'
|
|
@mocked_users[:added] << opts['target']
|
|
when 'createRole'
|
|
@mocked_users[:admins] << opts['user_id'] if opts['role_id'] == 'Instructor'
|
|
when 'getAuthToken'
|
|
return nil unless @mocked_users[:added].include?(opts['target'])
|
|
return nil if @mocked_users[:joined].empty? && !@mocked_users[:admins].include?(opts['target'])
|
|
@mocked_users[:joined] << opts['target']
|
|
extra = "\nauthToken=s3kr1tfor#{opts['target']}\nuser_id=#{opts['target']}\n=END RECORD"
|
|
when 'statusClass'
|
|
extra = "\nnum_users=#{@mocked_users[:joined].size}\nroomlock=\n=END RECORD"
|
|
when 'listClass'
|
|
extra = "\nclass_id=abc123\nlongname=ABC 123\n=END RECORD\nlongname=DEF 456\nclass_id=def456\n=END RECORD"
|
|
end
|
|
end
|
|
"100 OK#{extra}"
|
|
end
|
|
end
|
|
end
|
|
|
|
before :once do
|
|
user_model
|
|
end
|
|
|
|
before :each do
|
|
allow(WebConference).to receive(:plugins).and_return([web_conference_plugin_mock("wimba", {:domain => "wimba.test"})])
|
|
email = "email@email.com"
|
|
allow(@user).to receive(:email).and_return(email)
|
|
end
|
|
|
|
it "should correctly retrieve a config hash" do
|
|
conference = WimbaConference.new
|
|
config = conference.config
|
|
expect(config).not_to be_nil
|
|
expect(config[:conference_type]).to eql('Wimba')
|
|
expect(config[:class_name]).to eql('WimbaConference')
|
|
end
|
|
|
|
it "should confirm valid config" do
|
|
expect(WimbaConference.new.valid_config?).to be_truthy
|
|
expect(WimbaConference.new(:conference_type => "Wimba").valid_config?).to be_truthy
|
|
end
|
|
|
|
it "should be active if an admin has joined" do
|
|
conference = WimbaConference.create!(:title => "my conference", :user => @user, :context => course_factory)
|
|
# this makes it active
|
|
conference.initiate_conference
|
|
expect(conference.admin_join_url(@user)).not_to be_nil
|
|
|
|
expect(conference.conference_status).to eql(:active)
|
|
expect(conference.participant_join_url(@user)).not_to be_nil
|
|
end
|
|
|
|
it "should be closed if it has not been initiated" do
|
|
conference = WimbaConference.create!(:title => "my conference", :user => @user, :context => course_factory)
|
|
expect(conference.conference_status).to eql(:closed)
|
|
expect(conference.participant_join_url(@user)).to be_nil
|
|
end
|
|
|
|
it "should be closed if no admins have joined" do
|
|
conference = WimbaConference.create!(:title => "my conference", :user => @user, :context => course_factory)
|
|
conference.initiate_conference
|
|
expect(conference.conference_status).to eql(:closed)
|
|
expect(conference.participant_join_url(@user)).to be_nil
|
|
end
|
|
|
|
it "should correctly generate join urls" do
|
|
conference = WimbaConference.create!(:title => "my conference", :user => @user, :context => course_factory)
|
|
conference.initiate_conference
|
|
# join urls for admins and participants look the same (though token will vary by user), since
|
|
# someone's admin/participant-ness is negotiated beforehand through api calls and isn't
|
|
# reflected in the token/url
|
|
join_url = "http://wimba.test/launcher.cgi.pl?hzA=s3kr1tfor#{conference.wimba_id(@user.uuid)}&room=#{conference.wimba_id}"
|
|
expect(conference.admin_join_url(@user)).to eql(join_url)
|
|
expect(conference.participant_join_url(@user)).to eql(join_url)
|
|
end
|
|
|
|
it "should correctly return archive urls" do
|
|
conference = WimbaConference.create!(:title => "my conference", :user => @user, :context => course_factory)
|
|
conference.initiate_conference
|
|
conference.admin_join_url(@user)
|
|
conference.started_at = 1.hour.ago
|
|
conference.ended_at = 1.hour.ago
|
|
conference.save
|
|
urls = conference.external_url_for("archive", @user)
|
|
expect(urls).to eql [{:id => "abc123", :name => "ABC 123"}, {:id => "def456", :name => "DEF 456"}]
|
|
end
|
|
|
|
it "should not return archive urls if the conference hasn't started" do
|
|
conference = WimbaConference.create!(:title => "my conference", :user => @user, :duration => 120, :context => course_factory)
|
|
expect(conference.external_url_for("archive", @user)).to be_empty
|
|
end
|
|
end
|