canvas-lms/spec/observers/live_events_observer_spec.rb

305 lines
9.1 KiB
Ruby

#
# Copyright (C) 2015 - 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')
describe LiveEventsObserver do
describe "general" do
it "doesn't post events for no change" do
user_model(name: "Joey Joe Joe")
@user.name = "Joey Joe Joe"
expect(Canvas::LiveEvents).to receive(:user_updated).never
@user.save!
end
it "doesn't post events for NOP fields" do
account_model
course_model(name: "CS101", account: @account)
sis = @account.sis_batches.create
@course.name = "CS101"
@course.sis_batch_id = sis.id
expect(Canvas::LiveEvents).to receive(:course_updated).never
@course.save!
end
it "does post event for actual change" do
user_model(name: "Joey Joe Joe")
@user.name = "Joey Joe Joe Jr. Shabadu"
expect(Canvas::LiveEvents).to receive(:user_updated).once
@user.save!
end
end
describe "syllabus" do
it "doesn't post for no changes" do
course_model
@course.syllabus_body = "old syllabus"
@course.save!
expect(Canvas::LiveEvents).to receive(:course_syllabus_updated).never
@course.save!
end
it "posts update events" do
course_model
@course.syllabus_body = "old syllabus"
@course.save!
@course.syllabus_body = "new syllabus"
expect(Canvas::LiveEvents).to receive(:course_syllabus_updated).with(@course, "old syllabus")
@course.save
end
end
describe "wiki" do
it "posts create events" do
expect(Canvas::LiveEvents).to receive(:wiki_page_created).once
wiki_page_model
end
it "posts update events for title" do
wiki_page_model(title: 'old title')
expect(Canvas::LiveEvents).to receive(:wiki_page_updated).with(@page, 'old title', nil)
@page.title = 'new title'
@page.save
end
it "posts update events for body" do
wiki_page_model(body: 'old body')
expect(Canvas::LiveEvents).to receive(:wiki_page_updated).with(@page, nil, 'old body')
@page.body = 'new body'
@page.save
end
it "does not post trivial update events" do
wiki_page_model
expect(Canvas::LiveEvents).to receive(:wiki_page_updated).never
@page.touch
end
it "posts soft delete events" do
wiki_page_model
expect(Canvas::LiveEvents).to receive(:wiki_page_deleted).once
@page.destroy
end
it "posts delete events" do
wiki_page_model
expect(Canvas::LiveEvents).to receive(:wiki_page_deleted).once
@page.destroy_permanently!
end
end
describe "course" do
it "posts create events" do
expect(Canvas::LiveEvents).to receive(:course_created).once
course_model
end
it "posts update events" do
expect(Canvas::LiveEvents).to receive(:course_updated).twice
course_model # creation fires updated as well
@course.name = "Name Changed"
@course.save
end
end
describe "discussion topic" do
it "posts create events" do
course_model
expect(Canvas::LiveEvents).to receive(:discussion_topic_created).once
discussion_topic_model(context: @course)
end
end
describe "discussion entry" do
it "posts create events" do
course_model
expect(Canvas::LiveEvents).to receive(:discussion_entry_created).once
discussion_topic_model(context: @course)
@topic.discussion_entries.create!(:message => 'entry')
end
end
describe "group" do
it "posts create events for group_categories" do
course = course_model
expect(Canvas::LiveEvents).to receive(:group_category_created).once
course.group_categories.create!(name: "project A", create_group_count: 2)
end
it "posts create events for groups" do
course = course_model
expect(Canvas::LiveEvents).to receive(:group_created).twice
course.groups.create!(name: "Group 1")
course.groups.create!(name: "Group 2")
end
it "posts update events for groups" do
course = course_model
group = course.groups.create!(name: "Group 1")
expect(Canvas::LiveEvents).to receive(:group_updated).once
group.name = "New Group Name"
group.save
end
it "posts create events for group_memberships" do
course = course_model
student1 = course.enroll_student(user_model).user
student2 = course.enroll_student(user_model).user
group1 = course.groups.create!(name: "Group 1")
group2 = course.groups.create!(name: "Group 2")
expect(Canvas::LiveEvents).to receive(:group_membership_created).twice
group1.add_user(student1)
group2.add_user(student2)
end
it "posts update events for group_memberships" do
course = course_model
student = course.enroll_student(user_model).user
group = course.groups.create!(name: "Group 1")
membership = group.add_user(student)
expect(Canvas::LiveEvents).to receive(:group_membership_updated).once
membership.moderator = true
membership.save
end
end
describe "assignment" do
it "posts create events" do
expect(Canvas::LiveEvents).to receive(:assignment_created).once
assignment_model
end
it "posts update events" do
expect(Canvas::LiveEvents).to receive(:assignment_updated).once
assignment_model(:title => "original")
@assignment.title = "new title"
@assignment.save
end
end
describe "submission" do
it "posts create events" do
expect(Canvas::LiveEvents).to receive(:submission_created).once
submission_model
end
it "posts update events" do
expect(Canvas::LiveEvents).to receive(:submission_updated).once
s = submission_model
s.excused = true
s.save!
end
end
describe "user" do
it "posts create events" do
expect(Canvas::LiveEvents).to receive(:user_created).once
user_model
end
it "posts update events" do
expect(Canvas::LiveEvents).to receive(:user_updated).once
user_model
@user.name = "Name Changed"
@user.save
end
end
describe "enrollment" do
it "posts create events" do
expect(Canvas::LiveEvents).to receive(:enrollment_created).once
course_with_student
end
it "posts update events" do
expect(Canvas::LiveEvents).to receive(:enrollment_updated).once
course_with_student
@enrollment.workflow_state = 'rejected'
@enrollment.save
end
end
describe "enrollment_state" do
it "posts create events" do
expect(Canvas::LiveEvents).to receive(:enrollment_state_created).once
course_with_student
end
it "posts update events" do
expect(Canvas::LiveEvents).to receive(:enrollment_state_updated).once
course_with_student
@enrollment.limit_privileges_to_course_section = true
@enrollment.save
end
end
describe "user_account_association" do
it "posts create events" do
expect(Canvas::LiveEvents).to receive(:user_account_association_created).once
user_with_pseudonym(account: Account.default, username: 'bobbo', active_all: true)
end
end
describe "account_notification" do
it "posts create events" do
expect(Canvas::LiveEvents).to receive(:account_notification_created).once
account_notification
end
end
describe "quiz_export_complete" do
it "posts update events for quizzes2" do
expect(Canvas::LiveEvents).to receive(:quiz_export_complete).once
course = Account.default.courses.create!
enable_quizzes_next(course)
Account.default.context_external_tools.create!(
name: 'Quizzes.Next',
consumer_key: 'test_key',
shared_secret: 'test_secret',
tool_id: 'Quizzes 2',
url: 'http://example.com/launch'
)
quiz = course.quizzes.create!(:title => 'quiz1')
ce = course.content_exports.create!(
:export_type => ContentExport::QUIZZES2,
:selected_content => quiz.id,
:user => user_model
)
ce.export_without_send_later
end
it "does not post for other ContentExport types" do
expect(Canvas::LiveEvents).to receive(:quiz_export_complete).never
course = Account.default.courses.create!
ce = course.content_exports.create!
ce.export_without_send_later
end
def enable_quizzes_next(course)
course.enable_feature!(:quizzes_next)
# do quizzes next provision
# quizzes_next is available to users only after quizzes next provisioning
course.root_account.settings[:provision] = {'lti' => 'lti url'}
course.root_account.save!
end
end
end