canvas-lms/spec/integration/page_view_spec.rb

90 lines
3.4 KiB
Ruby

# frozen_string_literal: true
#
# 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')
describe "page views" do
before(:each) do
Setting.set('enable_page_views', 'db')
end
it "should record the context when commenting on a discussion" do
user_with_pseudonym(active_all: 1)
course_with_teacher_logged_in(active_all: 1, user: @user)
@topic = @course.discussion_topics.create!
post "/api/v1/courses/#{@course.id}/discussion_topics/#{@topic.id}/entries", params: {:message => 'hello'}
expect(response).to be_successful
pv = PageView.last
expect(pv.context).to eq @course
expect(pv.controller).to eq 'discussion_topics_api'
expect(pv.action).to eq 'add_entry'
end
it "should record get request for api request" do
course_with_teacher(active_all: 1, user: user_with_pseudonym)
@topic = @course.discussion_topics.create!
enable_default_developer_key!
get "/api/v1/courses/#{@course.id}/discussion_topics/#{@topic.id}/entries", params: {access_token: @user.access_tokens.create!.full_token}
pv = PageView.last
expect(pv.http_method).to eq 'get'
end
it "should not record gets for api request when setting disabled" do
Setting.set('create_get_api_page_views', 'false')
course_with_teacher(active_all: 1, user: user_with_pseudonym)
@topic = @course.discussion_topics.create!
expect do
get "/api/v1/courses/#{@course.id}/discussion_topics/#{@topic.id}/entries", params: {access_token: @user.access_tokens.create!.full_token}
end.not_to change(PageView, :count)
end
it "records the developer key when an access token was used" do
user_with_pseudonym(active_all: 1)
course_with_teacher(active_all: 1, user: @user)
@topic = @course.discussion_topics.create!
enable_default_developer_key!
post "/api/v1/courses/#{@course.id}/discussion_topics/#{@topic.id}/entries", params: {:message => 'hello', access_token: @user.access_tokens.create!.full_token}
expect(response).to be_successful
pv = PageView.last
expect(pv.context).to eq @course
expect(pv.controller).to eq 'discussion_topics_api'
expect(pv.action).to eq 'add_entry'
expect(pv.developer_key).to eq DeveloperKey.default
end
describe "update" do
it "should set the canvas meta header on interaction_seconds update" do
course_with_teacher_logged_in(:active_all => 1)
page_view = PageView.new
page_view.request_id = rand(10000000).to_s
page_view.user = @user
page_view.save
put "/page_views/#{page_view.id}", params: {:page_view_token => page_view.token, :interaction_seconds => 42}, xhr: true
expect(response).to be_successful
expect(response['X-Canvas-Meta']).to match(/r=#{page_view.request_id}\|#{page_view.created_at.iso8601(2)}\|42;/)
end
end
end