From 5881701e8c80e00624a9191ee82e44e52582ea84 Mon Sep 17 00:00:00 2001 From: James Williams Date: Tue, 19 Jan 2016 13:23:25 -0700 Subject: [PATCH] rails 4.2: api spec fixes refs #CNVS-26056 Change-Id: I082e29c642b9150260f6571f0aa8ef397c6e2cca Reviewed-on: https://gerrit.instructure.com/70593 Reviewed-by: Cody Cutrer Tested-by: Jenkins Product-Review: James Williams QA-Review: James Williams --- app/controllers/courses_controller.rb | 2 +- .../discussion_topics_api_controller.rb | 2 +- app/controllers/lti_api_controller.rb | 2 +- app/models/quizzes/quiz_submission.rb | 2 +- config/application.rb | 1 + config/initializers/json.rb | 20 ------------------- lib/api.rb | 5 +++-- lib/api/v1/conversation.rb | 2 +- lib/api/v1/group_category.rb | 2 +- lib/api/v1/quiz_submission_question.rb | 2 +- spec/apis/auth_spec.rb | 2 +- spec/apis/lti/ims/tool_proxy_api_spec.rb | 4 ++-- spec/apis/v1/conferences_api_spec.rb | 2 +- spec/apis/v1/group_categories_api_spec.rb | 2 +- .../v1/quizzes/quiz_submissions_api_spec.rb | 1 - 15 files changed, 16 insertions(+), 35 deletions(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index e6bce69f896..0ada2e1d2fb 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -817,7 +817,7 @@ class CoursesController < ApplicationController user_id = params[:user_id] if user_id.present? && user = users.where(:users => { :id => user_id }).first position_scope = users.where("#{User.sortable_name_order_by_clause}<=#{User.best_unicode_collation_key('?')}", user.sortable_name) - position = position_scope.count(:select => "users.id", :distinct => true) + position = position_scope.uniq.count(:all) per_page = Api.per_page_for(self) params[:page] = (position.to_f / per_page.to_f).ceil end diff --git a/app/controllers/discussion_topics_api_controller.rb b/app/controllers/discussion_topics_api_controller.rb index f9cac1b7828..a0dbc47d862 100644 --- a/app/controllers/discussion_topics_api_controller.rb +++ b/app/controllers/discussion_topics_api_controller.rb @@ -379,7 +379,7 @@ class DiscussionTopicsApiController < ApplicationController # ] def entry_list ids = Array(params[:ids]) - entries = @topic.discussion_entries.find(ids, :order => :id) + entries = @topic.discussion_entries.order(:id).find(ids) @entries = Api.paginate(entries, self, entry_pagination_url(@topic)) render :json => discussion_entry_api_json(@entries, @context, @current_user, session, []) end diff --git a/app/controllers/lti_api_controller.rb b/app/controllers/lti_api_controller.rb index 4be22089deb..8b05b9a35ac 100644 --- a/app/controllers/lti_api_controller.rb +++ b/app/controllers/lti_api_controller.rb @@ -160,7 +160,7 @@ class LtiApiController < ApplicationController timestamp = Time.zone.at(@signature.request.timestamp.to_i) # 90 minutes is suggested by the LTI spec allowed_delta = Setting.get('oauth.allowed_timestamp_delta', 90.minutes.to_s).to_i - if timestamp < allowed_delta.seconds.ago || timestamp > allowed_delta.from_now + if timestamp < allowed_delta.seconds.ago || timestamp > allowed_delta.seconds.from_now Canvas::Errors::Reporter.raise_canvas_error(BasicLTI::BasicOutcomes::Unauthorized, "Timestamp too old or too far in the future, request has expired", oauth_error_info) end diff --git a/app/models/quizzes/quiz_submission.rb b/app/models/quizzes/quiz_submission.rb index a24286c1f6b..c52cdb17053 100644 --- a/app/models/quizzes/quiz_submission.rb +++ b/app/models/quizzes/quiz_submission.rb @@ -260,7 +260,7 @@ class Quizzes::QuizSubmission < ActiveRecord::Base self.class.where(id: self). where("workflow_state NOT IN ('complete', 'pending_review')"). - update_all(user_id: user_id, submission_data: new_params.to_yaml) + update_all(user_id: user_id, submission_data: CANVAS_RAILS4_0 ? new_params.to_yaml : new_params) record_answer(new_params) diff --git a/config/application.rb b/config/application.rb index 81b709f4306..7d914562372 100644 --- a/config/application.rb +++ b/config/application.rb @@ -93,6 +93,7 @@ module CanvasRails unless CANVAS_RAILS4_0 config.active_record.raise_in_transactional_callbacks = true # may as well opt into the new behavior end + config.active_support.encode_big_decimal_as_string = false config.autoload_paths += %W(#{Rails.root}/app/middleware #{Rails.root}/app/observers diff --git a/config/initializers/json.rb b/config/initializers/json.rb index 58f848c59ab..51987a50d83 100644 --- a/config/initializers/json.rb +++ b/config/initializers/json.rb @@ -1,26 +1,6 @@ if CANVAS_RAILS4_0 ActiveSupport::JSON.backend = :oj MultiJson.dump_options = {:escape_mode => :xss_safe} - - # Rails4 gives an option to opt out of encoding BigDecimal json as a string - if ActiveSupport.respond_to?(:encode_big_decimal_as_string) - ActiveSupport.encode_big_decimal_as_string = false - - # Rails3 changes BigDecimal #to_json to encode as a string. This breaks - # bw-compat in our apis, so this switches it back to the native behavior. - else - require 'bigdecimal' - - class BigDecimal - def as_json(options = nil) - if finite? - self - else - NilClass::AS_JSON - end - end - end - end else require 'json/jwt' require 'oj_mimic_json' # have to load after json/jwt or else the oj_mimic_json will make it never load diff --git a/lib/api.rb b/lib/api.rb index 8931cc1946f..080703ad0cb 100644 --- a/lib/api.rb +++ b/lib/api.rb @@ -430,8 +430,9 @@ module Api def resolve_placeholders(content) host, protocol = get_host_and_protocol_from_request - # content is a json-encoded string; slashes are escaped - content.gsub("#{PLACEHOLDER_PROTOCOL}:\\/\\/#{PLACEHOLDER_HOST}", "#{protocol}:\\/\\/#{host}") + # content is a json-encoded string; slashes are escaped (at least in Rails 4.0) + content.gsub("#{PLACEHOLDER_PROTOCOL}:\\/\\/#{PLACEHOLDER_HOST}", "#{protocol}:\\/\\/#{host}"). + gsub("#{PLACEHOLDER_PROTOCOL}://#{PLACEHOLDER_HOST}", "#{protocol}://#{host}") end def user_can_download_attachment?(attachment, context, user) diff --git a/lib/api/v1/conversation.rb b/lib/api/v1/conversation.rb index 3ac95849e80..4e9cb8c1a98 100644 --- a/lib/api/v1/conversation.rb +++ b/lib/api/v1/conversation.rb @@ -46,7 +46,7 @@ module Api::V1::Conversation unless interleave_submissions result['message_count'] = result[:submissions] ? result['message_count'] - result[:submissions].size : - conversation.messages.human.where(:asset_id => nil).count + conversation.messages.human.where(:asset_id => nil).count(:all) end result[:audience] = audience.map(&:id) result[:audience].map!(&:to_s) if stringify_json_ids? diff --git a/lib/api/v1/group_category.rb b/lib/api/v1/group_category.rb index 6c4cb672fa6..719d9a43ca8 100644 --- a/lib/api/v1/group_category.rb +++ b/lib/api/v1/group_category.rb @@ -52,7 +52,7 @@ module Api::V1::GroupCategory hash['groups_count'] = group_category.groups.active.size end if includes.include?('unassigned_users_count') - hash['unassigned_users_count'] = group_category.unassigned_users.count + hash['unassigned_users_count'] = group_category.unassigned_users.count(:all) end end hash diff --git a/lib/api/v1/quiz_submission_question.rb b/lib/api/v1/quiz_submission_question.rb index a29d18a4f24..449397472b3 100644 --- a/lib/api/v1/quiz_submission_question.rb +++ b/lib/api/v1/quiz_submission_question.rb @@ -30,7 +30,7 @@ module Api::V1::QuizSubmissionQuestion # @param [Boolean] meta[:censored] if answer correctness should be censored out def quiz_submission_questions_json(quiz_questions, quiz_submission, meta = {}) meta[:censored] ||= true - quiz_questions = [ quiz_questions ] unless quiz_questions.kind_of?(Array) + quiz_questions = Array(quiz_questions) unless quiz_questions.kind_of?(Array) includes = (meta[:includes] || []) & INCLUDABLES data = {} diff --git a/spec/apis/auth_spec.rb b/spec/apis/auth_spec.rb index 1633f7e0de9..e91c304b6ca 100644 --- a/spec/apis/auth_spec.rb +++ b/spec/apis/auth_spec.rb @@ -202,7 +202,7 @@ describe "API Authentication", type: :request do Onelogin::Saml::Response.any_instance.stubs(:issuer).returns("saml_entity") Onelogin::Saml::Response.any_instance.stubs(:trusted_roots).returns([]) - post 'saml_consume', :SAMLResponse => "foo" + post '/saml_consume', :SAMLResponse => "foo" end end diff --git a/spec/apis/lti/ims/tool_proxy_api_spec.rb b/spec/apis/lti/ims/tool_proxy_api_spec.rb index 6225eeac32c..e24aa45d94d 100644 --- a/spec/apis/lti/ims/tool_proxy_api_spec.rb +++ b/spec/apis/lti/ims/tool_proxy_api_spec.rb @@ -48,12 +48,12 @@ module Lti end it 'the tool proxy raw data' do - get "api/lti/tool_proxy/#{tool_proxy.guid}", tool_proxy_guid: tool_proxy.guid + get "/api/lti/tool_proxy/#{tool_proxy.guid}", tool_proxy_guid: tool_proxy.guid expect(JSON.parse(body)).to eq tool_proxy.raw_data end it 'has the correct content-type' do - get "api/lti/tool_proxy/#{tool_proxy.guid}", tool_proxy_guid: tool_proxy.guid + get "/api/lti/tool_proxy/#{tool_proxy.guid}", tool_proxy_guid: tool_proxy.guid expect(response.headers['Content-Type']).to include 'application/vnd.ims.lti.v2.toolproxy+json' end diff --git a/spec/apis/v1/conferences_api_spec.rb b/spec/apis/v1/conferences_api_spec.rb index d9c139e2b1f..2fb35fa34fa 100644 --- a/spec/apis/v1/conferences_api_spec.rb +++ b/spec/apis/v1/conferences_api_spec.rb @@ -113,7 +113,7 @@ describe "Conferences API", type: :request do let(:course_id) { conference.context.id } let(:path) do - "api/v1/courses/#{course_id}/conferences/#{conference.id}/recording_ready" + "/api/v1/courses/#{course_id}/conferences/#{conference.id}/recording_ready" end let(:params) do diff --git a/spec/apis/v1/group_categories_api_spec.rb b/spec/apis/v1/group_categories_api_spec.rb index 4b97af15c94..0479564f01b 100644 --- a/spec/apis/v1/group_categories_api_spec.rb +++ b/spec/apis/v1/group_categories_api_spec.rb @@ -30,7 +30,7 @@ describe "Group Categories API", type: :request do "#{category.context_type.downcase}_id" => category.context_id, 'group_limit' => category.group_limit, 'groups_count' => category.groups.size, - 'unassigned_users_count' => category.unassigned_users.count, + 'unassigned_users_count' => category.unassigned_users.count(:all), 'protected' => false, 'allows_multiple_memberships' => false, 'auto_leader' => category.auto_leader, diff --git a/spec/apis/v1/quizzes/quiz_submissions_api_spec.rb b/spec/apis/v1/quizzes/quiz_submissions_api_spec.rb index 570cf0db0bb..844a398ed9e 100644 --- a/spec/apis/v1/quizzes/quiz_submissions_api_spec.rb +++ b/spec/apis/v1/quizzes/quiz_submissions_api_spec.rb @@ -547,7 +547,6 @@ describe Quizzes::QuizSubmissionsApiController, type: :request do question_data: true_false_question_data }) - @quiz.quiz_data = [ @qq1.question_data, @qq2.question_data ] @quiz.generate_quiz_data enroll_student_and_submit({