qalam_oauth_engine 2.2.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +28 -0
  3. data/README.md +110 -0
  4. data/Rakefile +28 -0
  5. data/app/controllers/canvas_oauth/canvas_controller.rb +26 -0
  6. data/app/controllers/canvas_oauth/oauth_application_controller.rb +5 -0
  7. data/app/models/canvas_oauth/authorization.rb +46 -0
  8. data/config/canvas.yml.example +12 -0
  9. data/config/routes.rb +3 -0
  10. data/db/migrate/20121121005358_create_canvas_oauth_authorizations.rb +16 -0
  11. data/lib/canvas_oauth.rb +26 -0
  12. data/lib/canvas_oauth/canvas_api.rb +331 -0
  13. data/lib/canvas_oauth/canvas_api_extensions.rb +9 -0
  14. data/lib/canvas_oauth/canvas_application.rb +73 -0
  15. data/lib/canvas_oauth/canvas_config.rb +34 -0
  16. data/lib/canvas_oauth/config.rb +3 -0
  17. data/lib/canvas_oauth/default_utf8_parser.rb +13 -0
  18. data/lib/canvas_oauth/engine.rb +15 -0
  19. data/lib/canvas_oauth/version.rb +3 -0
  20. data/lib/tasks/canvas_oauth_tasks.rake +1 -0
  21. data/spec/controllers/canvas_oauth/canvas_controller_spec.rb +90 -0
  22. data/spec/dummy/README.rdoc +261 -0
  23. data/spec/dummy/Rakefile +7 -0
  24. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  25. data/spec/dummy/app/controllers/welcome_controller.rb +5 -0
  26. data/spec/dummy/config.ru +4 -0
  27. data/spec/dummy/config/application.rb +57 -0
  28. data/spec/dummy/config/boot.rb +10 -0
  29. data/spec/dummy/config/canvas.yml +12 -0
  30. data/spec/dummy/config/database.yml +25 -0
  31. data/spec/dummy/config/environment.rb +5 -0
  32. data/spec/dummy/config/environments/development.rb +26 -0
  33. data/spec/dummy/config/environments/production.rb +69 -0
  34. data/spec/dummy/config/environments/test.rb +33 -0
  35. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  36. data/spec/dummy/config/initializers/inflections.rb +15 -0
  37. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  38. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  39. data/spec/dummy/config/initializers/session_store.rb +8 -0
  40. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  41. data/spec/dummy/config/locales/en.yml +5 -0
  42. data/spec/dummy/config/routes.rb +4 -0
  43. data/spec/dummy/db/development.sqlite3 +0 -0
  44. data/spec/dummy/db/migrate/20160711200737_create_canvas_oauth_authorizations.canvas_oauth.rb +16 -0
  45. data/spec/dummy/db/schema.rb +27 -0
  46. data/spec/dummy/db/test.sqlite3 +0 -0
  47. data/spec/dummy/log/development.log +1 -0
  48. data/spec/dummy/log/test.log +1630 -0
  49. data/spec/dummy/public/404.html +26 -0
  50. data/spec/dummy/public/422.html +26 -0
  51. data/spec/dummy/public/500.html +25 -0
  52. data/spec/dummy/public/favicon.ico +0 -0
  53. data/spec/dummy/public/robots.txt +5 -0
  54. data/spec/dummy/script/rails +6 -0
  55. data/spec/lib/canvas_oauth/canvas_api_extensions_spec.rb +13 -0
  56. data/spec/lib/canvas_oauth/canvas_api_spec.rb +364 -0
  57. data/spec/lib/canvas_oauth/default_utf8_parser_spec.rb +21 -0
  58. data/spec/models/canvas_oauth/authorization_spec.rb +47 -0
  59. data/spec/spec_helper.rb +64 -0
  60. metadata +377 -0
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env rake
2
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
3
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
4
+
5
+ require File.expand_path('../config/application', __FILE__)
6
+
7
+ Dummy::Application.load_tasks
@@ -0,0 +1,5 @@
1
+ class ApplicationController < ActionController::Base
2
+ include CanvasOauth::CanvasApplication
3
+
4
+ protect_from_forgery
5
+ end
@@ -0,0 +1,5 @@
1
+ class WelcomeController < ApplicationController
2
+ def index
3
+ render text: "Hello Oauth"
4
+ end
5
+ end
@@ -0,0 +1,4 @@
1
+ # This file is used by Rack-based servers to start the application.
2
+
3
+ require ::File.expand_path('../config/environment', __FILE__)
4
+ run Dummy::Application
@@ -0,0 +1,57 @@
1
+ require File.expand_path('../boot', __FILE__)
2
+
3
+ require 'rails/all'
4
+
5
+ Bundler.require(:default, Rails.env)
6
+ require 'canvas_oauth'
7
+
8
+ module Dummy
9
+ class Application < Rails::Application
10
+ # Settings in config/environments/* take precedence over those specified here.
11
+ # Application configuration should go into files in config/initializers
12
+ # -- all .rb files in that directory are automatically loaded.
13
+
14
+ # Custom directories with classes and modules you want to be autoloadable.
15
+ # config.autoload_paths += %W(#{config.root}/extras)
16
+
17
+ # Only load the plugins named here, in the order given (default is alphabetical).
18
+ # :all can be used as a placeholder for all plugins not explicitly named.
19
+ # config.plugins = [ :exception_notification, :ssl_requirement, :all ]
20
+
21
+ # Activate observers that should always be running.
22
+ # config.active_record.observers = :cacher, :garbage_collector, :forum_observer
23
+
24
+ # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
25
+ # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
26
+ # config.time_zone = 'Central Time (US & Canada)'
27
+
28
+ # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
29
+ # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
30
+ # config.i18n.default_locale = :de
31
+
32
+ # Configure the default encoding used in templates for Ruby 1.9.
33
+ config.encoding = "utf-8"
34
+
35
+ # Configure sensitive parameters which will be filtered from the log file.
36
+ config.filter_parameters += [:password]
37
+
38
+ # Enable escaping HTML in JSON.
39
+ config.active_support.escape_html_entities_in_json = true
40
+
41
+ # Use SQL instead of Active Record's schema dumper when creating the database.
42
+ # This is necessary if your schema can't be completely dumped by the schema dumper,
43
+ # like if you have constraints or database-specific column types
44
+ # config.active_record.schema_format = :sql
45
+
46
+ config.active_record.sqlite3.represent_boolean_as_integer = true
47
+
48
+ # Enable the asset pipeline
49
+ config.assets.enabled = true
50
+
51
+ # Version of your assets, change this if you want to expire all your assets
52
+ config.assets.version = '1.0'
53
+
54
+ # true is the default, setting this explicitly to avoid deprecation warnings
55
+ config.i18n.enforce_available_locales = true
56
+ end
57
+ end
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ gemfile = File.expand_path('../../../../Gemfile', __FILE__)
3
+
4
+ if File.exist?(gemfile)
5
+ ENV['BUNDLE_GEMFILE'] = gemfile
6
+ require 'bundler'
7
+ Bundler.setup
8
+ end
9
+
10
+ $:.unshift File.expand_path('../../../../lib', __FILE__)
@@ -0,0 +1,12 @@
1
+ default: &default
2
+ key: 2
3
+ secret: a1b2c3d4
4
+
5
+ development:
6
+ <<: *default
7
+
8
+ test:
9
+ <<: *default
10
+
11
+ cucumber:
12
+ <<: *default
@@ -0,0 +1,25 @@
1
+ # SQLite version 3.x
2
+ # gem install sqlite3
3
+ #
4
+ # Ensure the SQLite 3 gem is defined in your Gemfile
5
+ # gem 'sqlite3'
6
+ development:
7
+ adapter: sqlite3
8
+ database: db/development.sqlite3
9
+ pool: 5
10
+ timeout: 5000
11
+
12
+ # Warning: The database defined as "test" will be erased and
13
+ # re-generated from your development database when you run "rake".
14
+ # Do not set this db to the same as development or production.
15
+ test:
16
+ adapter: sqlite3
17
+ database: db/test.sqlite3
18
+ pool: 5
19
+ timeout: 5000
20
+
21
+ production:
22
+ adapter: sqlite3
23
+ database: db/production.sqlite3
24
+ pool: 5
25
+ timeout: 5000
@@ -0,0 +1,5 @@
1
+ # Load the rails application
2
+ require File.expand_path('../application', __FILE__)
3
+
4
+ # Initialize the rails application
5
+ Dummy::Application.initialize!
@@ -0,0 +1,26 @@
1
+ Dummy::Application.configure do
2
+ # Settings specified here will take precedence over those in config/application.rb
3
+
4
+ # In the development environment your application's code is reloaded on
5
+ # every request. This slows down response time but is perfect for development
6
+ # since you don't have to restart the web server when you make code changes.
7
+ config.cache_classes = false
8
+
9
+ config.eager_load = false
10
+
11
+ # Show full error reports and disable caching
12
+ config.consider_all_requests_local = true
13
+ config.action_controller.perform_caching = false
14
+
15
+ # Don't care if the mailer can't send
16
+ config.action_mailer.raise_delivery_errors = false
17
+
18
+ # Print deprecation notices to the Rails logger
19
+ config.active_support.deprecation = :log
20
+
21
+ # Do not compress assets
22
+ config.assets.compress = false
23
+
24
+ # Expands the lines which load the assets
25
+ config.assets.debug = true
26
+ end
@@ -0,0 +1,69 @@
1
+ Dummy::Application.configure do
2
+ # Settings specified here will take precedence over those in config/application.rb
3
+
4
+ # Code is not reloaded between requests
5
+ config.cache_classes = true
6
+
7
+ # Full error reports are disabled and caching is turned on
8
+ config.consider_all_requests_local = false
9
+ config.action_controller.perform_caching = true
10
+
11
+ # Disable Rails's static asset server (Apache or nginx will already do this)
12
+ config.serve_static_assets = false
13
+
14
+ # Compress JavaScripts and CSS
15
+ config.assets.compress = true
16
+
17
+ # Don't fallback to assets pipeline if a precompiled asset is missed
18
+ config.assets.compile = false
19
+
20
+ # Generate digests for assets URLs
21
+ config.assets.digest = true
22
+
23
+ # Defaults to nil and saved in location specified by config.assets.prefix
24
+ # config.assets.manifest = YOUR_PATH
25
+
26
+ # Specifies the header that your server uses for sending files
27
+ # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
28
+ # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx
29
+
30
+ # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
31
+ # config.force_ssl = true
32
+
33
+ # See everything in the log (default is :info)
34
+ # config.log_level = :debug
35
+
36
+ # Prepend all log lines with the following tags
37
+ # config.log_tags = [ :subdomain, :uuid ]
38
+
39
+ # Use a different logger for distributed setups
40
+ # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
41
+
42
+ # Use a different cache store in production
43
+ # config.cache_store = :mem_cache_store
44
+
45
+ # Enable serving of images, stylesheets, and JavaScripts from an asset server
46
+ # config.action_controller.asset_host = "http://assets.example.com"
47
+
48
+ # Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added)
49
+ # config.assets.precompile += %w( search.js )
50
+
51
+ # Disable delivery errors, bad email addresses will be ignored
52
+ # config.action_mailer.raise_delivery_errors = false
53
+
54
+ # Enable threaded mode
55
+ # config.threadsafe!
56
+
57
+ # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
58
+ # the I18n.default_locale when a translation can not be found)
59
+ config.i18n.fallbacks = true
60
+
61
+ # Send deprecation notices to registered listeners
62
+ config.active_support.deprecation = :notify
63
+
64
+ config.eager_load = true
65
+
66
+ # Log the query plan for queries taking more than this (works
67
+ # with SQLite, MySQL, and PostgreSQL)
68
+ # config.active_record.auto_explain_threshold_in_seconds = 0.5
69
+ end
@@ -0,0 +1,33 @@
1
+ Dummy::Application.configure do
2
+ # Settings specified here will take precedence over those in config/application.rb
3
+
4
+ # The test environment is used exclusively to run your application's
5
+ # test suite. You never need to work with it otherwise. Remember that
6
+ # your test database is "scratch space" for the test suite and is wiped
7
+ # and recreated between test runs. Don't rely on the data there!
8
+ config.cache_classes = true
9
+
10
+ # Configure static asset server for tests with Cache-Control for performance
11
+ config.serve_static_assets = true
12
+ config.static_cache_control = "public, max-age=3600"
13
+
14
+ config.eager_load = false
15
+
16
+ # Show full error reports and disable caching
17
+ config.consider_all_requests_local = true
18
+ config.action_controller.perform_caching = false
19
+
20
+ # Raise exceptions instead of rendering exception templates
21
+ config.action_dispatch.show_exceptions = false
22
+
23
+ # Disable request forgery protection in test environment
24
+ config.action_controller.allow_forgery_protection = false
25
+
26
+ # Tell Action Mailer not to deliver emails to the real world.
27
+ # The :test delivery method accumulates sent emails in the
28
+ # ActionMailer::Base.deliveries array.
29
+ config.action_mailer.delivery_method = :test
30
+
31
+ # Print deprecation notices to the stderr
32
+ config.active_support.deprecation = :stderr
33
+ end
@@ -0,0 +1,7 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
4
+ # Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
5
+
6
+ # You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
7
+ # Rails.backtrace_cleaner.remove_silencers!
@@ -0,0 +1,15 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # Add new inflection rules using the following format
4
+ # (all these examples are active by default):
5
+ # ActiveSupport::Inflector.inflections do |inflect|
6
+ # inflect.plural /^(ox)$/i, '\1en'
7
+ # inflect.singular /^(ox)en/i, '\1'
8
+ # inflect.irregular 'person', 'people'
9
+ # inflect.uncountable %w( fish sheep )
10
+ # end
11
+ #
12
+ # These inflection rules are supported but not enabled by default:
13
+ # ActiveSupport::Inflector.inflections do |inflect|
14
+ # inflect.acronym 'RESTful'
15
+ # end
@@ -0,0 +1,5 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # Add new mime types for use in respond_to blocks:
4
+ # Mime::Type.register "text/richtext", :rtf
5
+ # Mime::Type.register_alias "text/html", :iphone
@@ -0,0 +1,7 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # Your secret key for verifying the integrity of signed cookies.
4
+ # If you change this key, all old signed cookies will become invalid!
5
+ # Make sure the secret is at least 30 characters and all random,
6
+ # no regular words or you'll be exposed to dictionary attacks.
7
+ Dummy::Application.config.secret_key_base = "b580d616dcbf14f5394aea18bcae2886515306728e54be7ef37f9c6aa48313368c7d00e4f0af95f4ec7b8e37696381ba0a44e1b939833dbc678bd56362aeb7a0"
@@ -0,0 +1,8 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ Dummy::Application.config.session_store :cookie_store, key: '_dummy_session'
4
+
5
+ # Use the database for sessions instead of the cookie-based default,
6
+ # which shouldn't be used to store highly confidential information
7
+ # (create the session table with "rails generate session_migration")
8
+ # Dummy::Application.config.session_store :active_record_store
@@ -0,0 +1,14 @@
1
+ # Be sure to restart your server when you modify this file.
2
+ #
3
+ # This file contains settings for ActionController::ParamsWrapper which
4
+ # is enabled by default.
5
+
6
+ # Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
7
+ ActiveSupport.on_load(:action_controller) do
8
+ wrap_parameters format: [:json]
9
+ end
10
+
11
+ # Disable root element in JSON by default.
12
+ ActiveSupport.on_load(:active_record) do
13
+ self.include_root_in_json = false
14
+ end
@@ -0,0 +1,5 @@
1
+ # Sample localization file for English. Add more files in this directory for other locales.
2
+ # See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
3
+
4
+ en:
5
+ hello: "Hello world"
@@ -0,0 +1,4 @@
1
+ Rails.application.routes.draw do
2
+ root to: "welcome#index"
3
+ mount CanvasOauth::Engine => "/"
4
+ end
File without changes
@@ -0,0 +1,16 @@
1
+ # This migration comes from canvas_oauth (originally 20121121005358)
2
+ class CreateCanvasOauthAuthorizations < ActiveRecord::Migration[4.2]
3
+ def change
4
+ create_table "canvas_oauth_authorizations", :force => true do |t|
5
+ t.integer "canvas_user_id", :limit => 8
6
+ t.string "tool_consumer_instance_guid", :null => false
7
+ t.string "token"
8
+ t.datetime "last_used_at"
9
+ t.datetime "created_at", :null => false
10
+ t.datetime "updated_at", :null => false
11
+ end
12
+
13
+ add_index :canvas_oauth_authorizations, [:canvas_user_id, :tool_consumer_instance_guid],
14
+ name: 'index_canvas_oauth_auths_on_user_id_and_tciguid'
15
+ end
16
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: UTF-8
2
+ # This file is auto-generated from the current state of the database. Instead
3
+ # of editing this file, please use the migrations feature of Active Record to
4
+ # incrementally modify your database, and then regenerate this schema definition.
5
+ #
6
+ # Note that this schema.rb definition is the authoritative source for your
7
+ # database schema. If you need to create the application database on another
8
+ # system, you should be using db:schema:load, not running all the migrations
9
+ # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10
+ # you'll amass, the slower it'll run and the greater likelihood for issues).
11
+ #
12
+ # It's strongly recommended that you check this file into your version control system.
13
+
14
+ ActiveRecord::Schema.define(version: 20121121005358) do
15
+
16
+ create_table "canvas_oauth_authorizations", force: true do |t|
17
+ t.integer "canvas_user_id", limit: 8
18
+ t.string "tool_consumer_instance_guid", null: false
19
+ t.string "token"
20
+ t.datetime "last_used_at"
21
+ t.datetime "created_at", null: false
22
+ t.datetime "updated_at", null: false
23
+ end
24
+
25
+ add_index "canvas_oauth_authorizations", ["canvas_user_id", "tool_consumer_instance_guid"], name: "index_canvas_oauth_auths_on_user_id_and_tciguid"
26
+
27
+ end
File without changes
@@ -0,0 +1 @@
1
+ Initializing Canvas using configuration in /Users/kgarner/exempt/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
@@ -0,0 +1,1630 @@
1
+ Initializing Canvas using configuration in /Users/kgarner/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
2
+  (0.2ms) begin transaction
3
+  (0.0ms) rollback transaction
4
+  (0.0ms) begin transaction
5
+  (0.0ms) rollback transaction
6
+  (0.0ms) begin transaction
7
+  (0.0ms) rollback transaction
8
+  (0.0ms) begin transaction
9
+  (0.0ms) rollback transaction
10
+  (0.0ms) begin transaction
11
+ CanvasOauth::Authorization Load (0.1ms) SELECT "canvas_oauth_authorizations".* FROM "canvas_oauth_authorizations" WHERE "canvas_oauth_authorizations"."canvas_user_id" = 123 AND "canvas_oauth_authorizations"."tool_consumer_instance_guid" = 'abc123' ORDER BY created_at DESC LIMIT 1
12
+ SQLite3::SQLException: no such table: canvas_oauth_authorizations: SELECT "canvas_oauth_authorizations".* FROM "canvas_oauth_authorizations" WHERE "canvas_oauth_authorizations"."canvas_user_id" = 123 AND "canvas_oauth_authorizations"."tool_consumer_instance_guid" = 'abc123' ORDER BY created_at DESC LIMIT 1
13
+  (0.0ms) rollback transaction
14
+  (0.0ms) begin transaction
15
+  (0.0ms) rollback transaction
16
+  (0.0ms) begin transaction
17
+  (0.0ms) rollback transaction
18
+  (0.0ms) begin transaction
19
+  (0.0ms) rollback transaction
20
+  (0.0ms) begin transaction
21
+  (0.0ms) rollback transaction
22
+  (0.0ms) begin transaction
23
+  (0.0ms) rollback transaction
24
+  (0.0ms) begin transaction
25
+ Processing by CanvasOauth::CanvasController#oauth as HTML
26
+ Rendered text template (0.0ms)
27
+ Completed 200 OK in 4ms (Views: 3.9ms | ActiveRecord: 0.0ms)
28
+  (0.1ms) rollback transaction
29
+  (0.0ms) begin transaction
30
+ CanvasOauth::Authorization Load (0.1ms) SELECT "canvas_oauth_authorizations".* FROM "canvas_oauth_authorizations" WHERE "canvas_oauth_authorizations"."canvas_user_id" IS NULL AND "canvas_oauth_authorizations"."tool_consumer_instance_guid" IS NULL ORDER BY created_at DESC LIMIT 1
31
+ SQLite3::SQLException: no such table: canvas_oauth_authorizations: SELECT "canvas_oauth_authorizations".* FROM "canvas_oauth_authorizations" WHERE "canvas_oauth_authorizations"."canvas_user_id" IS NULL AND "canvas_oauth_authorizations"."tool_consumer_instance_guid" IS NULL ORDER BY created_at DESC LIMIT 1
32
+  (0.0ms) rollback transaction
33
+  (0.0ms) begin transaction
34
+ CanvasOauth::Authorization Load (0.1ms) SELECT "canvas_oauth_authorizations".* FROM "canvas_oauth_authorizations" WHERE "canvas_oauth_authorizations"."canvas_user_id" IS NULL AND "canvas_oauth_authorizations"."tool_consumer_instance_guid" IS NULL ORDER BY created_at DESC LIMIT 1
35
+ SQLite3::SQLException: no such table: canvas_oauth_authorizations: SELECT "canvas_oauth_authorizations".* FROM "canvas_oauth_authorizations" WHERE "canvas_oauth_authorizations"."canvas_user_id" IS NULL AND "canvas_oauth_authorizations"."tool_consumer_instance_guid" IS NULL ORDER BY created_at DESC LIMIT 1
36
+  (0.0ms) rollback transaction
37
+  (0.0ms) begin transaction
38
+ Processing by CanvasOauth::CanvasController#oauth as HTML
39
+ Parameters: {"code"=>"valid"}
40
+ Completed 200 OK in 0ms (Views: 0.1ms | ActiveRecord: 0.0ms)
41
+  (0.0ms) rollback transaction
42
+  (0.0ms) begin transaction
43
+ Processing by CanvasOauth::CanvasController#oauth as HTML
44
+ Parameters: {"code"=>"valid", "state"=>"zzyyxx"}
45
+ Completed 200 OK in 0ms (Views: 0.1ms | ActiveRecord: 0.0ms)
46
+  (0.0ms) rollback transaction
47
+  (0.0ms) begin transaction
48
+ CanvasOauth::Authorization Load (0.1ms) SELECT "canvas_oauth_authorizations".* FROM "canvas_oauth_authorizations" WHERE "canvas_oauth_authorizations"."canvas_user_id" IS NULL AND "canvas_oauth_authorizations"."tool_consumer_instance_guid" IS NULL ORDER BY created_at DESC LIMIT 1
49
+ SQLite3::SQLException: no such table: canvas_oauth_authorizations: SELECT "canvas_oauth_authorizations".* FROM "canvas_oauth_authorizations" WHERE "canvas_oauth_authorizations"."canvas_user_id" IS NULL AND "canvas_oauth_authorizations"."tool_consumer_instance_guid" IS NULL ORDER BY created_at DESC LIMIT 1
50
+  (0.0ms) rollback transaction
51
+  (0.0ms) begin transaction
52
+ CanvasOauth::Authorization Load (0.1ms) SELECT "canvas_oauth_authorizations".* FROM "canvas_oauth_authorizations" WHERE "canvas_oauth_authorizations"."canvas_user_id" IS NULL AND "canvas_oauth_authorizations"."tool_consumer_instance_guid" IS NULL ORDER BY created_at DESC LIMIT 1
53
+ SQLite3::SQLException: no such table: canvas_oauth_authorizations: SELECT "canvas_oauth_authorizations".* FROM "canvas_oauth_authorizations" WHERE "canvas_oauth_authorizations"."canvas_user_id" IS NULL AND "canvas_oauth_authorizations"."tool_consumer_instance_guid" IS NULL ORDER BY created_at DESC LIMIT 1
54
+  (0.0ms) rollback transaction
55
+  (0.0ms) begin transaction
56
+ CanvasOauth::Authorization Load (0.1ms) SELECT "canvas_oauth_authorizations".* FROM "canvas_oauth_authorizations" WHERE "canvas_oauth_authorizations"."canvas_user_id" IS NULL AND "canvas_oauth_authorizations"."tool_consumer_instance_guid" IS NULL ORDER BY created_at DESC LIMIT 1
57
+ SQLite3::SQLException: no such table: canvas_oauth_authorizations: SELECT "canvas_oauth_authorizations".* FROM "canvas_oauth_authorizations" WHERE "canvas_oauth_authorizations"."canvas_user_id" IS NULL AND "canvas_oauth_authorizations"."tool_consumer_instance_guid" IS NULL ORDER BY created_at DESC LIMIT 1
58
+  (0.0ms) rollback transaction
59
+  (0.0ms) begin transaction
60
+  (0.0ms) rollback transaction
61
+  (0.0ms) begin transaction
62
+  (0.0ms) rollback transaction
63
+  (0.0ms) begin transaction
64
+  (0.0ms) rollback transaction
65
+  (0.0ms) begin transaction
66
+  (0.0ms) rollback transaction
67
+  (0.0ms) begin transaction
68
+  (0.0ms) rollback transaction
69
+  (0.0ms) begin transaction
70
+  (0.0ms) rollback transaction
71
+  (0.0ms) begin transaction
72
+  (0.0ms) rollback transaction
73
+  (0.0ms) begin transaction
74
+  (0.0ms) rollback transaction
75
+  (0.0ms) begin transaction
76
+  (0.0ms) rollback transaction
77
+  (0.0ms) begin transaction
78
+  (0.0ms) rollback transaction
79
+  (0.0ms) begin transaction
80
+  (0.0ms) rollback transaction
81
+  (0.0ms) begin transaction
82
+  (0.0ms) rollback transaction
83
+  (0.1ms) begin transaction
84
+  (0.0ms) rollback transaction
85
+  (0.0ms) begin transaction
86
+  (0.0ms) rollback transaction
87
+  (0.0ms) begin transaction
88
+  (0.1ms) rollback transaction
89
+  (0.0ms) begin transaction
90
+  (0.0ms) rollback transaction
91
+  (0.0ms) begin transaction
92
+  (0.0ms) rollback transaction
93
+  (0.1ms) begin transaction
94
+ API call (0.03ms): put ["/api/v1/courses/1/assignments/2/submissions/3", {:body=>{}, :headers=>{}}]
95
+  (0.0ms) rollback transaction
96
+  (0.0ms) begin transaction
97
+  (0.0ms) rollback transaction
98
+  (0.0ms) begin transaction
99
+ API call (0.04ms): get ["/path", {:query=>"stuff", :headers=>{}}]
100
+  (0.0ms) rollback transaction
101
+  (0.0ms) begin transaction
102
+ API call (0.05ms): get ["/path", {:headers=>{}}]
103
+  (0.1ms) rollback transaction
104
+  (0.0ms) begin transaction
105
+ API call (0.02ms): get ["/path", {:headers=>{}}]
106
+  (0.0ms) rollback transaction
107
+  (0.0ms) begin transaction
108
+ API call (0.08ms): get ["/api/v1/courses", {:query=>{:per_page=>50}, :headers=>{}}]
109
+  (0.0ms) rollback transaction
110
+  (0.0ms) begin transaction
111
+ API call (0.02ms): get ["/api/v1/courses/123/students", {:query=>{:per_page=>50}, :headers=>{}}]
112
+  (0.0ms) rollback transaction
113
+  (0.1ms) begin transaction
114
+  (0.0ms) rollback transaction
115
+  (0.0ms) begin transaction
116
+ API call (0.02ms): get ["/api/v1/courses/123/sections", {:query=>{:include=>["students", "avatar_url", "enrollments"], :per_page=>50}, :headers=>{}}]
117
+  (0.1ms) rollback transaction
118
+  (0.0ms) begin transaction
119
+  (0.0ms) rollback transaction
120
+  (0.0ms) begin transaction
121
+ API call (0.02ms): get ["/api/v1/users/123/profile", {:headers=>{}}]
122
+  (0.0ms) rollback transaction
123
+  (0.0ms) begin transaction
124
+ API call (0.02ms): get ["/api/v1/accounts/1/courses", {:query=>{:per_page=>50}, :headers=>{}}]
125
+  (0.0ms) rollback transaction
126
+  (0.0ms) begin transaction
127
+  (0.0ms) rollback transaction
128
+  (0.1ms) begin transaction
129
+  (0.0ms) rollback transaction
130
+  (0.0ms) begin transaction
131
+ API call (0.04ms): get ["/api/v1/accounts/1/users", {:query=>{:per_page=>50}, :headers=>{}}]
132
+  (0.0ms) rollback transaction
133
+  (0.0ms) begin transaction
134
+  (0.0ms) rollback transaction
135
+  (0.1ms) begin transaction
136
+ API call (0.02ms): get ["/api/v1/courses/123/assignments", {:query=>{:per_page=>50}, :headers=>{}}]
137
+  (0.1ms) rollback transaction
138
+  (0.0ms) begin transaction
139
+ API call (0.02ms): post ["/api/v1/courses/123/assignments", {:body=>{:assignment=>{:name=>"Assignment"}}, :headers=>{}}]
140
+  (0.1ms) rollback transaction
141
+  (0.0ms) begin transaction
142
+  (0.0ms) rollback transaction
143
+  (0.0ms) begin transaction
144
+ API call (0.02ms): get ["/api/v1/courses/123", {:headers=>{}}]
145
+  (0.0ms) rollback transaction
146
+  (0.0ms) begin transaction
147
+  (0.1ms) rollback transaction
148
+  (0.0ms) begin transaction
149
+  (0.0ms) rollback transaction
150
+  (0.0ms) begin transaction
151
+  (0.0ms) rollback transaction
152
+ Initializing Canvas using configuration in /Users/kgarner/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
153
+  (0.3ms) begin transaction
154
+  (0.1ms) rollback transaction
155
+ Initializing Canvas using configuration in /Users/kgarner/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
156
+  (0.2ms) begin transaction
157
+  (0.1ms) rollback transaction
158
+ Initializing Canvas using configuration in /Users/kgarner/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
159
+  (0.2ms) begin transaction
160
+  (0.1ms) rollback transaction
161
+ Initializing Canvas using configuration in /Users/kgarner/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
162
+  (0.2ms) begin transaction
163
+  (0.1ms) rollback transaction
164
+ Initializing Canvas using configuration in /Users/kgarner/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
165
+  (0.2ms) begin transaction
166
+  (0.1ms) rollback transaction
167
+ Initializing Canvas using configuration in /Users/kgarner/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
168
+  (0.2ms) begin transaction
169
+  (0.1ms) rollback transaction
170
+ Initializing Canvas using configuration in /Users/kgarner/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
171
+  (0.2ms) begin transaction
172
+  (0.1ms) rollback transaction
173
+ Initializing Canvas using configuration in /Users/kgarner/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
174
+  (0.2ms) begin transaction
175
+  (0.1ms) rollback transaction
176
+ Initializing Canvas using configuration in /Users/kgarner/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
177
+  (0.2ms) begin transaction
178
+  (0.0ms) rollback transaction
179
+ Initializing Canvas using configuration in /Users/kgarner/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
180
+  (0.2ms) begin transaction
181
+  (0.0ms) rollback transaction
182
+ Initializing Canvas using configuration in /Users/kgarner/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
183
+  (0.2ms) begin transaction
184
+  (0.0ms) rollback transaction
185
+  (0.0ms) begin transaction
186
+  (0.0ms) rollback transaction
187
+  (0.0ms) begin transaction
188
+  (0.0ms) rollback transaction
189
+  (0.0ms) begin transaction
190
+  (0.0ms) rollback transaction
191
+  (0.0ms) begin transaction
192
+  (0.0ms) rollback transaction
193
+ Initializing Canvas using configuration in /Users/kgarner/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
194
+  (0.2ms) begin transaction
195
+  (0.1ms) rollback transaction
196
+  (0.0ms) begin transaction
197
+  (0.1ms) rollback transaction
198
+  (0.0ms) begin transaction
199
+  (0.0ms) rollback transaction
200
+  (0.0ms) begin transaction
201
+  (0.0ms) rollback transaction
202
+  (0.0ms) begin transaction
203
+  (0.0ms) rollback transaction
204
+ Initializing Canvas using configuration in /Users/kgarner/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
205
+  (0.2ms) begin transaction
206
+  (0.1ms) rollback transaction
207
+  (0.0ms) begin transaction
208
+  (0.0ms) rollback transaction
209
+  (0.0ms) begin transaction
210
+  (0.0ms) rollback transaction
211
+  (0.0ms) begin transaction
212
+  (0.1ms) rollback transaction
213
+  (0.0ms) begin transaction
214
+  (0.0ms) rollback transaction
215
+ Initializing Canvas using configuration in /Users/kgarner/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
216
+  (0.2ms) begin transaction
217
+  (0.0ms) rollback transaction
218
+  (0.0ms) begin transaction
219
+  (0.0ms) rollback transaction
220
+  (0.0ms) begin transaction
221
+  (0.0ms) rollback transaction
222
+  (0.0ms) begin transaction
223
+  (0.0ms) rollback transaction
224
+  (0.0ms) begin transaction
225
+  (0.0ms) rollback transaction
226
+ Initializing Canvas using configuration in /Users/kgarner/exempt/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
227
+  (0.0ms) begin transaction
228
+ API call (0.09ms): get ["/path", {:headers=>{}}]
229
+  (0.1ms) rollback transaction
230
+  (0.0ms) begin transaction
231
+ API call (0.05ms): get ["/path", {:headers=>{}}]
232
+  (0.0ms) rollback transaction
233
+  (0.0ms) begin transaction
234
+ API call (0.04ms): get ["/path", {:query=>"stuff", :headers=>{}}]
235
+  (0.0ms) rollback transaction
236
+  (0.1ms) begin transaction
237
+ API call (0.03ms): get ["/api/v1/courses/123/sections", {:query=>{:include=>["students", "avatar_url", "enrollments"], :per_page=>50}, :headers=>{}}]
238
+  (0.0ms) rollback transaction
239
+  (0.0ms) begin transaction
240
+  (0.0ms) rollback transaction
241
+  (0.0ms) begin transaction
242
+ API call (0.08ms): get ["/api/v1/accounts/1/courses", {:query=>{:per_page=>50}, :headers=>{}}]
243
+  (0.1ms) rollback transaction
244
+  (0.0ms) begin transaction
245
+  (0.0ms) rollback transaction
246
+  (0.0ms) begin transaction
247
+  (0.0ms) rollback transaction
248
+  (0.0ms) begin transaction
249
+ API call (0.03ms): put ["/api/v1/courses/123/assignments/345", {:body=>{:assignment=>{:omit_from_final_grade=>true}}, :headers=>{}}]
250
+  (0.0ms) rollback transaction
251
+  (0.0ms) begin transaction
252
+  (0.0ms) rollback transaction
253
+  (0.0ms) begin transaction
254
+ API call (0.03ms): get ["/api/v1/courses/123/assignments", {:query=>{:per_page=>50}, :headers=>{}}]
255
+  (0.0ms) rollback transaction
256
+  (0.0ms) begin transaction
257
+ API call (0.07ms): post ["/api/v1/courses/123/assignments", {:body=>{:assignment=>{:name=>"Assignment"}}, :headers=>{}}]
258
+  (0.0ms) rollback transaction
259
+  (0.0ms) begin transaction
260
+  (0.0ms) rollback transaction
261
+  (0.0ms) begin transaction
262
+  (0.0ms) rollback transaction
263
+  (0.0ms) begin transaction
264
+ API call (0.03ms): get ["/api/v1/courses", {:query=>{:per_page=>50}, :headers=>{}}]
265
+  (0.0ms) rollback transaction
266
+  (0.0ms) begin transaction
267
+ API call (0.03ms): get ["/api/v1/users/123/profile", {:headers=>{}}]
268
+  (0.0ms) rollback transaction
269
+  (0.0ms) begin transaction
270
+ API call (0.03ms): get ["/api/v1/courses/123", {:headers=>{}}]
271
+  (0.0ms) rollback transaction
272
+  (0.0ms) begin transaction
273
+ API call (0.03ms): put ["/api/v1/courses/1/assignments/2/submissions/3", {:body=>{}, :headers=>{}}]
274
+  (0.0ms) rollback transaction
275
+  (0.0ms) begin transaction
276
+  (0.0ms) rollback transaction
277
+  (0.0ms) begin transaction
278
+  (0.0ms) rollback transaction
279
+  (0.0ms) begin transaction
280
+ API call (0.07ms): get ["/api/v1/courses/123/students", {:query=>{:per_page=>50}, :headers=>{}}]
281
+  (0.0ms) rollback transaction
282
+  (0.0ms) begin transaction
283
+  (0.1ms) rollback transaction
284
+  (0.1ms) begin transaction
285
+  (0.1ms) rollback transaction
286
+  (0.0ms) begin transaction
287
+  (0.1ms) rollback transaction
288
+  (0.1ms) begin transaction
289
+ API call (0.12ms): get ["/api/v1/accounts/1/users", {:query=>{:per_page=>50}, :headers=>{}}]
290
+  (0.1ms) rollback transaction
291
+  (0.1ms) begin transaction
292
+  (0.0ms) rollback transaction
293
+  (0.0ms) begin transaction
294
+  (0.0ms) rollback transaction
295
+  (0.1ms) begin transaction
296
+  (0.0ms) rollback transaction
297
+  (0.0ms) begin transaction
298
+  (0.0ms) rollback transaction
299
+  (0.1ms) begin transaction
300
+  (0.0ms) rollback transaction
301
+  (0.1ms) begin transaction
302
+  (0.1ms) rollback transaction
303
+  (0.0ms) begin transaction
304
+  (0.0ms) rollback transaction
305
+  (0.0ms) begin transaction
306
+  (0.1ms) rollback transaction
307
+  (0.0ms) begin transaction
308
+  (0.0ms) rollback transaction
309
+  (0.0ms) begin transaction
310
+  (0.0ms) rollback transaction
311
+  (0.0ms) begin transaction
312
+  (0.0ms) rollback transaction
313
+  (0.0ms) begin transaction
314
+  (0.1ms) rollback transaction
315
+  (0.1ms) begin transaction
316
+  (0.0ms) rollback transaction
317
+  (0.0ms) begin transaction
318
+  (0.1ms) rollback transaction
319
+  (0.0ms) begin transaction
320
+  (0.0ms) rollback transaction
321
+  (0.0ms) begin transaction
322
+  (0.0ms) rollback transaction
323
+  (0.0ms) begin transaction
324
+  (0.0ms) rollback transaction
325
+  (0.0ms) begin transaction
326
+  (0.0ms) rollback transaction
327
+  (0.0ms) begin transaction
328
+  (0.0ms) rollback transaction
329
+  (0.0ms) begin transaction
330
+  (0.0ms) rollback transaction
331
+  (0.0ms) begin transaction
332
+  (0.0ms) rollback transaction
333
+  (0.0ms) begin transaction
334
+ Processing by CanvasOauth::CanvasController#oauth as HTML
335
+ Rendering text template
336
+ Rendered text template (0.0ms)
337
+ Completed 200 OK in 3ms (Views: 3.1ms | ActiveRecord: 0.0ms)
338
+  (0.1ms) rollback transaction
339
+  (0.0ms) begin transaction
340
+ Processing by CanvasOauth::CanvasController#oauth as HTML
341
+ Parameters: {"code"=>"valid", "state"=>"zzyyxx"}
342
+ Rendering text template
343
+ Rendered text template (0.0ms)
344
+ Completed 200 OK in 1ms (Views: 0.4ms | ActiveRecord: 0.0ms)
345
+  (0.0ms) rollback transaction
346
+  (0.0ms) begin transaction
347
+ Processing by CanvasOauth::CanvasController#oauth as HTML
348
+ Parameters: {"code"=>"valid"}
349
+ Rendering text template
350
+ Rendered text template (0.0ms)
351
+ Completed 200 OK in 0ms (Views: 0.3ms | ActiveRecord: 0.0ms)
352
+  (0.0ms) rollback transaction
353
+  (0.1ms) begin transaction
354
+ Processing by CanvasOauth::CanvasController#oauth as HTML
355
+ Parameters: {"code"=>"valid", "state"=>"mismatch"}
356
+ Rendering text template
357
+ Rendered text template (0.0ms)
358
+ Completed 200 OK in 1ms (Views: 0.3ms | ActiveRecord: 0.0ms)
359
+  (0.0ms) rollback transaction
360
+  (0.0ms) begin transaction
361
+ Processing by CanvasOauth::CanvasController#oauth as HTML
362
+ Parameters: {"code"=>"valid", "state"=>"zzyyxx"}
363
+ Completed 500 Internal Server Error in 2ms (ActiveRecord: 1.6ms)
364
+  (0.0ms) rollback transaction
365
+  (0.0ms) begin transaction
366
+ Processing by CanvasOauth::CanvasController#oauth as HTML
367
+ Parameters: {"code"=>"invalid"}
368
+ Rendering text template
369
+ Rendered text template (0.0ms)
370
+ Completed 200 OK in 1ms (Views: 0.3ms | ActiveRecord: 0.0ms)
371
+  (0.0ms) rollback transaction
372
+  (0.0ms) begin transaction
373
+ Processing by CanvasOauth::CanvasController#oauth as HTML
374
+ Parameters: {"code"=>"valid"}
375
+ Rendering text template
376
+ Rendered text template (0.0ms)
377
+ Completed 200 OK in 1ms (Views: 0.3ms | ActiveRecord: 0.0ms)
378
+  (0.0ms) rollback transaction
379
+  (0.0ms) begin transaction
380
+ Processing by CanvasOauth::CanvasController#oauth as HTML
381
+ Parameters: {"code"=>"valid"}
382
+ Completed 500 Internal Server Error in 1ms (ActiveRecord: 0.1ms)
383
+  (0.0ms) rollback transaction
384
+  (0.0ms) begin transaction
385
+  (0.0ms) rollback transaction
386
+  (0.1ms) begin transaction
387
+  (0.0ms) rollback transaction
388
+  (0.0ms) begin transaction
389
+  (0.0ms) rollback transaction
390
+  (0.0ms) begin transaction
391
+  (0.0ms) rollback transaction
392
+  (0.0ms) begin transaction
393
+  (0.0ms) rollback transaction
394
+  (0.0ms) begin transaction
395
+  (0.1ms) rollback transaction
396
+  (0.0ms) begin transaction
397
+  (0.0ms) rollback transaction
398
+  (0.0ms) begin transaction
399
+  (0.0ms) rollback transaction
400
+  (0.0ms) begin transaction
401
+  (0.0ms) rollback transaction
402
+  (0.0ms) begin transaction
403
+  (0.0ms) rollback transaction
404
+  (0.0ms) begin transaction
405
+  (0.0ms) rollback transaction
406
+  (0.0ms) begin transaction
407
+  (0.0ms) rollback transaction
408
+  (0.0ms) begin transaction
409
+  (0.0ms) rollback transaction
410
+ Initializing Canvas using configuration in /Users/kgarner/exempt/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
411
+  (0.0ms) begin transaction
412
+  (0.0ms) rollback transaction
413
+  (0.0ms) begin transaction
414
+  (0.0ms) rollback transaction
415
+  (0.0ms) begin transaction
416
+  (0.0ms) rollback transaction
417
+  (0.0ms) begin transaction
418
+  (0.0ms) rollback transaction
419
+  (0.1ms) begin transaction
420
+  (0.0ms) rollback transaction
421
+  (0.0ms) begin transaction
422
+  (0.1ms) rollback transaction
423
+  (0.0ms) begin transaction
424
+  (0.0ms) rollback transaction
425
+  (0.0ms) begin transaction
426
+  (0.0ms) rollback transaction
427
+  (0.0ms) begin transaction
428
+  (0.0ms) rollback transaction
429
+  (0.0ms) begin transaction
430
+  (0.0ms) rollback transaction
431
+  (0.0ms) begin transaction
432
+  (0.0ms) rollback transaction
433
+  (0.0ms) begin transaction
434
+  (0.0ms) rollback transaction
435
+  (0.0ms) begin transaction
436
+  (0.0ms) rollback transaction
437
+  (0.0ms) begin transaction
438
+  (0.0ms) rollback transaction
439
+  (0.0ms) begin transaction
440
+  (0.0ms) rollback transaction
441
+  (0.0ms) begin transaction
442
+  (0.0ms) rollback transaction
443
+  (0.0ms) begin transaction
444
+  (0.0ms) rollback transaction
445
+  (0.0ms) begin transaction
446
+  (0.0ms) rollback transaction
447
+  (0.0ms) begin transaction
448
+  (0.0ms) rollback transaction
449
+  (0.0ms) begin transaction
450
+  (0.0ms) rollback transaction
451
+  (0.0ms) begin transaction
452
+ API call (0.06ms): get ["/api/v1/courses", {:query=>{:per_page=>50}, :headers=>{}}]
453
+  (0.0ms) rollback transaction
454
+  (0.0ms) begin transaction
455
+  (0.1ms) rollback transaction
456
+  (0.0ms) begin transaction
457
+ API call (0.03ms): put ["/api/v1/courses/123/assignments/345", {:body=>{:assignment=>{:omit_from_final_grade=>true}}, :headers=>{}}]
458
+  (0.0ms) rollback transaction
459
+  (0.0ms) begin transaction
460
+ API call (0.03ms): get ["/api/v1/courses/123", {:headers=>{}}]
461
+  (0.0ms) rollback transaction
462
+  (0.0ms) begin transaction
463
+ API call (0.09ms): post ["/api/v1/courses/123/assignments", {:body=>{:assignment=>{:name=>"Assignment"}}, :headers=>{}}]
464
+  (0.1ms) rollback transaction
465
+  (0.0ms) begin transaction
466
+  (0.0ms) rollback transaction
467
+  (0.0ms) begin transaction
468
+ API call (0.04ms): get ["/api/v1/users/123/profile", {:headers=>{}}]
469
+  (0.0ms) rollback transaction
470
+  (0.0ms) begin transaction
471
+  (0.1ms) rollback transaction
472
+  (0.1ms) begin transaction
473
+  (0.1ms) rollback transaction
474
+  (0.1ms) begin transaction
475
+  (0.2ms) rollback transaction
476
+  (0.1ms) begin transaction
477
+ API call (0.09ms): get ["/api/v1/accounts/1/courses", {:query=>{:per_page=>50}, :headers=>{}}]
478
+  (0.1ms) rollback transaction
479
+  (0.1ms) begin transaction
480
+  (0.1ms) rollback transaction
481
+  (0.0ms) begin transaction
482
+ API call (0.12ms): get ["/path", {:headers=>{}}]
483
+  (0.2ms) rollback transaction
484
+  (0.0ms) begin transaction
485
+ API call (0.05ms): get ["/path", {:query=>"stuff", :headers=>{}}]
486
+  (0.0ms) rollback transaction
487
+  (0.0ms) begin transaction
488
+ API call (0.07ms): get ["/path", {:headers=>{}}]
489
+  (0.0ms) rollback transaction
490
+  (0.1ms) begin transaction
491
+ API call (0.05ms): get ["/api/v1/accounts/1/users", {:query=>{:per_page=>50}, :headers=>{}}]
492
+  (0.0ms) rollback transaction
493
+  (0.0ms) begin transaction
494
+  (0.0ms) rollback transaction
495
+  (0.0ms) begin transaction
496
+  (0.0ms) rollback transaction
497
+  (0.0ms) begin transaction
498
+ API call (0.03ms): put ["/api/v1/courses/1/assignments/2/submissions/3", {:body=>{}, :headers=>{}}]
499
+  (0.0ms) rollback transaction
500
+  (0.1ms) begin transaction
501
+ API call (0.04ms): get ["/api/v1/courses/123/assignments", {:query=>{:per_page=>50}, :headers=>{}}]
502
+  (0.0ms) rollback transaction
503
+  (0.1ms) begin transaction
504
+  (0.0ms) rollback transaction
505
+  (0.0ms) begin transaction
506
+ API call (0.05ms): get ["/api/v1/courses/123/sections", {:query=>{:include=>["students", "avatar_url", "enrollments"], :per_page=>50}, :headers=>{}}]
507
+  (0.0ms) rollback transaction
508
+  (0.0ms) begin transaction
509
+  (0.0ms) rollback transaction
510
+  (0.0ms) begin transaction
511
+  (0.1ms) rollback transaction
512
+  (0.0ms) begin transaction
513
+ API call (0.03ms): get ["/api/v1/courses/123/students", {:query=>{:per_page=>50}, :headers=>{}}]
514
+  (0.1ms) rollback transaction
515
+  (0.0ms) begin transaction
516
+  (0.0ms) rollback transaction
517
+ Initializing Canvas using configuration in /Users/kgarner/exempt/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
518
+  (0.1ms) begin transaction
519
+  (0.1ms) rollback transaction
520
+  (0.1ms) begin transaction
521
+  (0.1ms) rollback transaction
522
+  (0.1ms) begin transaction
523
+  (0.1ms) rollback transaction
524
+  (0.1ms) begin transaction
525
+ Processing by CanvasOauth::CanvasController#oauth as HTML
526
+ Parameters: {"code"=>"valid", "state"=>"zzyyxx"}
527
+ Completed 500 Internal Server Error in 3ms (ActiveRecord: 1.9ms)
528
+  (0.1ms) rollback transaction
529
+  (0.0ms) begin transaction
530
+ Processing by CanvasOauth::CanvasController#oauth as HTML
531
+ Parameters: {"code"=>"valid", "state"=>"mismatch"}
532
+ Rendering text template
533
+ Rendered text template (0.0ms)
534
+ Completed 200 OK in 5ms (Views: 4.9ms | ActiveRecord: 0.0ms)
535
+  (0.1ms) rollback transaction
536
+  (0.0ms) begin transaction
537
+ Processing by CanvasOauth::CanvasController#oauth as HTML
538
+ Rendering text template
539
+ Rendered text template (0.0ms)
540
+ Completed 200 OK in 0ms (Views: 0.3ms | ActiveRecord: 0.0ms)
541
+  (0.0ms) rollback transaction
542
+  (0.0ms) begin transaction
543
+ Processing by CanvasOauth::CanvasController#oauth as HTML
544
+ Parameters: {"code"=>"valid", "state"=>"zzyyxx"}
545
+ Rendering text template
546
+ Rendered text template (0.0ms)
547
+ Completed 200 OK in 0ms (Views: 0.2ms | ActiveRecord: 0.0ms)
548
+  (0.1ms) rollback transaction
549
+  (0.0ms) begin transaction
550
+ Processing by CanvasOauth::CanvasController#oauth as HTML
551
+ Parameters: {"code"=>"valid"}
552
+ Rendering text template
553
+ Rendered text template (0.0ms)
554
+ Completed 200 OK in 0ms (Views: 0.3ms | ActiveRecord: 0.0ms)
555
+  (0.1ms) rollback transaction
556
+  (0.1ms) begin transaction
557
+ Processing by CanvasOauth::CanvasController#oauth as HTML
558
+ Parameters: {"code"=>"invalid"}
559
+ Rendering text template
560
+ Rendered text template (0.0ms)
561
+ Completed 200 OK in 1ms (Views: 0.6ms | ActiveRecord: 0.0ms)
562
+  (0.1ms) rollback transaction
563
+  (0.1ms) begin transaction
564
+ Processing by CanvasOauth::CanvasController#oauth as HTML
565
+ Parameters: {"code"=>"valid"}
566
+ Rendering text template
567
+ Rendered text template (0.0ms)
568
+ Completed 200 OK in 1ms (Views: 0.3ms | ActiveRecord: 0.0ms)
569
+  (0.1ms) rollback transaction
570
+  (0.1ms) begin transaction
571
+ Processing by CanvasOauth::CanvasController#oauth as HTML
572
+ Parameters: {"code"=>"valid"}
573
+ Completed 500 Internal Server Error in 1ms (ActiveRecord: 0.1ms)
574
+  (0.0ms) rollback transaction
575
+  (0.0ms) begin transaction
576
+  (0.0ms) rollback transaction
577
+  (0.0ms) begin transaction
578
+  (0.0ms) rollback transaction
579
+  (0.0ms) begin transaction
580
+  (0.0ms) rollback transaction
581
+  (0.0ms) begin transaction
582
+  (0.0ms) rollback transaction
583
+  (0.0ms) begin transaction
584
+  (0.0ms) rollback transaction
585
+  (0.1ms) begin transaction
586
+  (0.0ms) rollback transaction
587
+  (0.1ms) begin transaction
588
+  (0.0ms) rollback transaction
589
+  (0.1ms) begin transaction
590
+  (0.0ms) rollback transaction
591
+  (0.0ms) begin transaction
592
+  (0.0ms) rollback transaction
593
+  (0.1ms) begin transaction
594
+  (0.0ms) rollback transaction
595
+  (0.1ms) begin transaction
596
+  (0.0ms) rollback transaction
597
+  (0.0ms) begin transaction
598
+  (0.0ms) rollback transaction
599
+  (0.0ms) begin transaction
600
+  (0.0ms) rollback transaction
601
+  (0.0ms) begin transaction
602
+  (0.0ms) rollback transaction
603
+  (0.0ms) begin transaction
604
+  (0.0ms) rollback transaction
605
+  (0.0ms) begin transaction
606
+  (0.0ms) rollback transaction
607
+  (0.0ms) begin transaction
608
+  (0.0ms) rollback transaction
609
+  (0.0ms) begin transaction
610
+  (0.0ms) rollback transaction
611
+  (0.0ms) begin transaction
612
+  (0.0ms) rollback transaction
613
+  (0.0ms) begin transaction
614
+  (0.0ms) rollback transaction
615
+  (0.0ms) begin transaction
616
+  (0.0ms) rollback transaction
617
+  (0.0ms) begin transaction
618
+  (0.0ms) rollback transaction
619
+  (0.0ms) begin transaction
620
+  (0.0ms) rollback transaction
621
+  (0.0ms) begin transaction
622
+  (0.0ms) rollback transaction
623
+  (0.0ms) begin transaction
624
+  (0.0ms) rollback transaction
625
+  (0.0ms) begin transaction
626
+  (0.0ms) rollback transaction
627
+  (0.0ms) begin transaction
628
+  (0.0ms) rollback transaction
629
+  (0.0ms) begin transaction
630
+  (0.0ms) rollback transaction
631
+  (0.0ms) begin transaction
632
+  (0.0ms) rollback transaction
633
+  (0.0ms) begin transaction
634
+  (0.0ms) rollback transaction
635
+  (0.0ms) begin transaction
636
+  (0.0ms) rollback transaction
637
+  (0.0ms) begin transaction
638
+ API call (0.03ms): get ["/api/v1/courses/123/students", {:query=>{:per_page=>50}, :headers=>{}}]
639
+  (0.0ms) rollback transaction
640
+  (0.0ms) begin transaction
641
+  (0.0ms) rollback transaction
642
+  (0.0ms) begin transaction
643
+  (0.0ms) rollback transaction
644
+  (0.0ms) begin transaction
645
+ API call (0.03ms): get ["/api/v1/accounts/1/users", {:query=>{:per_page=>50}, :headers=>{}}]
646
+  (0.0ms) rollback transaction
647
+  (0.0ms) begin transaction
648
+  (0.0ms) rollback transaction
649
+  (0.0ms) begin transaction
650
+ API call (0.03ms): get ["/api/v1/courses/123/assignments", {:query=>{:per_page=>50}, :headers=>{}}]
651
+  (0.0ms) rollback transaction
652
+  (0.0ms) begin transaction
653
+ API call (0.03ms): get ["/api/v1/courses", {:query=>{:per_page=>50}, :headers=>{}}]
654
+  (0.0ms) rollback transaction
655
+  (0.0ms) begin transaction
656
+ API call (0.03ms): get ["/api/v1/users/123/profile", {:headers=>{}}]
657
+  (0.0ms) rollback transaction
658
+  (0.0ms) begin transaction
659
+ API call (0.03ms): get ["/api/v1/courses/123", {:headers=>{}}]
660
+  (0.0ms) rollback transaction
661
+  (0.0ms) begin transaction
662
+  (0.0ms) rollback transaction
663
+  (0.0ms) begin transaction
664
+ API call (0.03ms): put ["/api/v1/courses/123/assignments/345", {:body=>{:assignment=>{:omit_from_final_grade=>true}}, :headers=>{}}]
665
+  (0.0ms) rollback transaction
666
+  (0.0ms) begin transaction
667
+ API call (0.05ms): get ["/path", {:headers=>{}}]
668
+  (0.0ms) rollback transaction
669
+  (0.0ms) begin transaction
670
+ API call (0.03ms): get ["/path", {:headers=>{}}]
671
+  (0.0ms) rollback transaction
672
+  (0.0ms) begin transaction
673
+ API call (0.03ms): get ["/path", {:query=>"stuff", :headers=>{}}]
674
+  (0.0ms) rollback transaction
675
+  (0.0ms) begin transaction
676
+  (0.0ms) rollback transaction
677
+  (0.0ms) begin transaction
678
+ API call (0.03ms): get ["/api/v1/courses/123/sections", {:query=>{:include=>["students", "avatar_url", "enrollments"], :per_page=>50}, :headers=>{}}]
679
+  (0.0ms) rollback transaction
680
+  (0.0ms) begin transaction
681
+ API call (0.02ms): get ["/api/v1/accounts/1/courses", {:query=>{:per_page=>50}, :headers=>{}}]
682
+  (0.0ms) rollback transaction
683
+  (0.0ms) begin transaction
684
+  (0.0ms) rollback transaction
685
+  (0.1ms) begin transaction
686
+  (0.1ms) rollback transaction
687
+  (0.1ms) begin transaction
688
+  (0.1ms) rollback transaction
689
+  (0.2ms) begin transaction
690
+  (0.1ms) rollback transaction
691
+  (0.1ms) begin transaction
692
+ API call (0.04ms): post ["/api/v1/courses/123/assignments", {:body=>{:assignment=>{:name=>"Assignment"}}, :headers=>{}}]
693
+  (0.0ms) rollback transaction
694
+  (0.0ms) begin transaction
695
+  (0.0ms) rollback transaction
696
+  (0.0ms) begin transaction
697
+ API call (0.08ms): put ["/api/v1/courses/1/assignments/2/submissions/3", {:body=>{}, :headers=>{}}]
698
+  (0.0ms) rollback transaction
699
+  (0.0ms) begin transaction
700
+  (0.0ms) rollback transaction
701
+ Initializing Canvas using configuration in /Users/kgarner/exempt/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
702
+  (0.0ms) begin transaction
703
+  (0.1ms) rollback transaction
704
+  (0.1ms) begin transaction
705
+  (0.1ms) rollback transaction
706
+  (0.0ms) begin transaction
707
+  (0.0ms) rollback transaction
708
+  (0.0ms) begin transaction
709
+  (0.0ms) rollback transaction
710
+  (0.0ms) begin transaction
711
+  (0.0ms) rollback transaction
712
+  (0.0ms) begin transaction
713
+  (0.1ms) rollback transaction
714
+  (0.2ms) begin transaction
715
+  (0.0ms) rollback transaction
716
+  (0.0ms) begin transaction
717
+  (0.0ms) rollback transaction
718
+  (0.0ms) begin transaction
719
+  (0.0ms) rollback transaction
720
+  (0.0ms) begin transaction
721
+  (0.1ms) rollback transaction
722
+  (0.0ms) begin transaction
723
+  (0.0ms) rollback transaction
724
+  (0.1ms) begin transaction
725
+  (0.1ms) rollback transaction
726
+  (0.1ms) begin transaction
727
+  (0.1ms) rollback transaction
728
+  (0.1ms) begin transaction
729
+  (0.1ms) rollback transaction
730
+  (0.1ms) begin transaction
731
+  (0.1ms) rollback transaction
732
+  (0.1ms) begin transaction
733
+  (0.0ms) rollback transaction
734
+  (0.0ms) begin transaction
735
+  (0.0ms) rollback transaction
736
+  (0.1ms) begin transaction
737
+  (0.1ms) rollback transaction
738
+  (0.0ms) begin transaction
739
+  (0.1ms) rollback transaction
740
+  (0.0ms) begin transaction
741
+ API call (0.05ms): put ["/api/v1/courses/123/assignments/345", {:body=>{:assignment=>{:omit_from_final_grade=>true}}, :headers=>{}}]
742
+  (0.0ms) rollback transaction
743
+  (0.0ms) begin transaction
744
+  (0.0ms) rollback transaction
745
+  (0.0ms) begin transaction
746
+  (0.1ms) rollback transaction
747
+  (0.0ms) begin transaction
748
+  (0.0ms) rollback transaction
749
+  (0.0ms) begin transaction
750
+ API call (0.05ms): put ["/api/v1/courses/1/assignments/2/submissions/3", {:body=>{}, :headers=>{}}]
751
+  (0.0ms) rollback transaction
752
+  (0.0ms) begin transaction
753
+ API call (0.03ms): get ["/path", {:query=>"stuff", :headers=>{}}]
754
+  (0.0ms) rollback transaction
755
+  (0.0ms) begin transaction
756
+ API call (0.05ms): get ["/path", {:headers=>{}}]
757
+  (0.1ms) rollback transaction
758
+  (0.0ms) begin transaction
759
+ API call (0.05ms): get ["/path", {:headers=>{}}]
760
+  (0.0ms) rollback transaction
761
+  (0.0ms) begin transaction
762
+ API call (0.04ms): get ["/api/v1/courses", {:query=>{:per_page=>50}, :headers=>{}}]
763
+  (0.0ms) rollback transaction
764
+  (0.0ms) begin transaction
765
+ API call (0.03ms): get ["/api/v1/courses/123/sections", {:query=>{:include=>["students", "avatar_url", "enrollments"], :per_page=>50}, :headers=>{}}]
766
+  (0.0ms) rollback transaction
767
+  (0.0ms) begin transaction
768
+  (0.0ms) rollback transaction
769
+  (0.1ms) begin transaction
770
+ API call (0.06ms): get ["/api/v1/courses/123/students", {:query=>{:per_page=>50}, :headers=>{}}]
771
+  (0.0ms) rollback transaction
772
+  (0.0ms) begin transaction
773
+  (0.0ms) rollback transaction
774
+  (0.0ms) begin transaction
775
+  (0.1ms) rollback transaction
776
+  (0.1ms) begin transaction
777
+  (0.1ms) rollback transaction
778
+  (0.0ms) begin transaction
779
+  (0.1ms) rollback transaction
780
+  (0.2ms) begin transaction
781
+ API call (0.14ms): get ["/api/v1/courses/123", {:headers=>{}}]
782
+  (0.2ms) rollback transaction
783
+  (0.1ms) begin transaction
784
+  (0.1ms) rollback transaction
785
+  (0.1ms) begin transaction
786
+ API call (0.04ms): get ["/api/v1/accounts/1/courses", {:query=>{:per_page=>50}, :headers=>{}}]
787
+  (0.0ms) rollback transaction
788
+  (0.0ms) begin transaction
789
+ API call (0.06ms): post ["/api/v1/courses/123/assignments", {:body=>{:assignment=>{:name=>"Assignment"}}, :headers=>{}}]
790
+  (0.1ms) rollback transaction
791
+  (0.1ms) begin transaction
792
+  (0.0ms) rollback transaction
793
+  (0.0ms) begin transaction
794
+ API call (0.03ms): get ["/api/v1/users/123/profile", {:headers=>{}}]
795
+  (0.0ms) rollback transaction
796
+  (0.1ms) begin transaction
797
+ API call (0.06ms): get ["/api/v1/courses/123/assignments", {:query=>{:per_page=>50}, :headers=>{}}]
798
+  (0.1ms) rollback transaction
799
+  (0.0ms) begin transaction
800
+  (0.0ms) rollback transaction
801
+  (0.0ms) begin transaction
802
+  (0.0ms) rollback transaction
803
+  (0.0ms) begin transaction
804
+ API call (0.03ms): get ["/api/v1/accounts/1/users", {:query=>{:per_page=>50}, :headers=>{}}]
805
+  (0.0ms) rollback transaction
806
+  (0.0ms) begin transaction
807
+  (0.0ms) rollback transaction
808
+ Initializing Canvas using configuration in /Users/kgarner/exempt/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
809
+  (0.0ms) begin transaction
810
+  (0.1ms) rollback transaction
811
+  (0.0ms) begin transaction
812
+  (0.0ms) rollback transaction
813
+  (0.0ms) begin transaction
814
+  (0.0ms) rollback transaction
815
+  (0.0ms) begin transaction
816
+  (0.0ms) rollback transaction
817
+  (0.0ms) begin transaction
818
+  (0.7ms) rollback transaction
819
+  (0.0ms) begin transaction
820
+  (0.0ms) rollback transaction
821
+  (0.0ms) begin transaction
822
+  (0.0ms) rollback transaction
823
+  (0.0ms) begin transaction
824
+  (0.0ms) rollback transaction
825
+  (0.0ms) begin transaction
826
+  (0.0ms) rollback transaction
827
+  (0.0ms) begin transaction
828
+  (0.1ms) rollback transaction
829
+  (0.1ms) begin transaction
830
+  (0.0ms) rollback transaction
831
+  (0.0ms) begin transaction
832
+  (0.1ms) rollback transaction
833
+  (0.1ms) begin transaction
834
+  (0.1ms) rollback transaction
835
+  (0.0ms) begin transaction
836
+  (0.0ms) rollback transaction
837
+  (0.0ms) begin transaction
838
+ API call (0.04ms): post ["/api/v1/courses/123/assignments", {:body=>{:assignment=>{:name=>"Assignment"}}, :headers=>{}}]
839
+  (0.0ms) rollback transaction
840
+  (0.0ms) begin transaction
841
+  (0.0ms) rollback transaction
842
+  (0.0ms) begin transaction
843
+  (0.0ms) rollback transaction
844
+  (0.0ms) begin transaction
845
+ API call (0.03ms): get ["/api/v1/courses/123/assignments", {:query=>{:per_page=>50}, :headers=>{}}]
846
+  (0.0ms) rollback transaction
847
+  (0.0ms) begin transaction
848
+  (0.0ms) rollback transaction
849
+  (0.0ms) begin transaction
850
+ API call (0.51ms): get ["/api/v1/accounts/1/users", {:query=>{:per_page=>50}, :headers=>{}}]
851
+  (0.0ms) rollback transaction
852
+  (0.0ms) begin transaction
853
+  (0.0ms) rollback transaction
854
+  (0.0ms) begin transaction
855
+ API call (0.03ms): get ["/api/v1/accounts/1/courses", {:query=>{:per_page=>50}, :headers=>{}}]
856
+  (0.0ms) rollback transaction
857
+  (0.0ms) begin transaction
858
+ API call (0.03ms): get ["/api/v1/users/123/profile", {:headers=>{}}]
859
+  (0.5ms) rollback transaction
860
+  (0.0ms) begin transaction
861
+  (0.0ms) rollback transaction
862
+  (0.0ms) begin transaction
863
+ API call (0.03ms): put ["/api/v1/courses/1/assignments/2/submissions/3", {:body=>{}, :headers=>{}}]
864
+  (0.0ms) rollback transaction
865
+  (0.0ms) begin transaction
866
+ API call (0.03ms): get ["/api/v1/courses/123/sections", {:query=>{:include=>["students", "avatar_url", "enrollments"], :per_page=>50}, :headers=>{}}]
867
+  (0.0ms) rollback transaction
868
+  (0.0ms) begin transaction
869
+  (0.0ms) rollback transaction
870
+  (0.1ms) begin transaction
871
+  (0.1ms) rollback transaction
872
+  (0.1ms) begin transaction
873
+  (0.0ms) rollback transaction
874
+  (0.0ms) begin transaction
875
+  (0.1ms) rollback transaction
876
+  (0.2ms) begin transaction
877
+ API call (0.08ms): get ["/path", {:headers=>{}}]
878
+  (0.1ms) rollback transaction
879
+  (0.0ms) begin transaction
880
+ API call (0.09ms): get ["/path", {:headers=>{}}]
881
+  (0.1ms) rollback transaction
882
+  (0.1ms) begin transaction
883
+ API call (0.06ms): get ["/path", {:query=>"stuff", :headers=>{}}]
884
+  (0.0ms) rollback transaction
885
+  (0.0ms) begin transaction
886
+ API call (0.04ms): get ["/api/v1/courses/123", {:headers=>{}}]
887
+  (0.0ms) rollback transaction
888
+  (0.0ms) begin transaction
889
+ API call (0.04ms): put ["/api/v1/courses/123/assignments/345", {:body=>{:assignment=>{:omit_from_final_grade=>true}}, :headers=>{}}]
890
+  (0.0ms) rollback transaction
891
+  (0.0ms) begin transaction
892
+  (0.0ms) rollback transaction
893
+  (0.1ms) begin transaction
894
+ API call (0.06ms): get ["/api/v1/courses", {:query=>{:per_page=>50}, :headers=>{}}]
895
+  (0.0ms) rollback transaction
896
+  (0.1ms) begin transaction
897
+  (0.0ms) rollback transaction
898
+  (0.0ms) begin transaction
899
+ API call (0.03ms): get ["/api/v1/courses/123/students", {:query=>{:per_page=>50}, :headers=>{}}]
900
+  (0.0ms) rollback transaction
901
+  (0.0ms) begin transaction
902
+  (0.0ms) rollback transaction
903
+  (0.1ms) begin transaction
904
+  (0.1ms) rollback transaction
905
+  (0.0ms) begin transaction
906
+  (0.0ms) rollback transaction
907
+  (0.0ms) begin transaction
908
+  (0.0ms) rollback transaction
909
+  (0.0ms) begin transaction
910
+  (0.0ms) rollback transaction
911
+  (0.0ms) begin transaction
912
+  (0.1ms) rollback transaction
913
+  (0.0ms) begin transaction
914
+  (0.0ms) rollback transaction
915
+ Initializing Canvas using configuration in /Users/kgarner/exempt/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
916
+ Initializing Canvas using configuration in /Users/kgarner/exempt/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
917
+ Initializing Canvas using configuration in /Users/kgarner/exempt/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
918
+ Initializing Canvas using configuration in /Users/kgarner/exempt/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
919
+ Initializing Canvas using configuration in /Users/kgarner/exempt/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
920
+  (0.0ms) begin transaction
921
+  (0.0ms) rollback transaction
922
+  (0.0ms) begin transaction
923
+  (0.1ms) rollback transaction
924
+  (0.0ms) begin transaction
925
+  (0.0ms) rollback transaction
926
+  (0.0ms) begin transaction
927
+  (0.0ms) rollback transaction
928
+  (0.0ms) begin transaction
929
+  (0.0ms) rollback transaction
930
+  (0.0ms) begin transaction
931
+  (0.0ms) rollback transaction
932
+  (0.0ms) begin transaction
933
+  (0.0ms) rollback transaction
934
+  (0.0ms) begin transaction
935
+  (0.0ms) rollback transaction
936
+  (0.0ms) begin transaction
937
+  (0.1ms) rollback transaction
938
+  (0.0ms) begin transaction
939
+  (0.0ms) rollback transaction
940
+  (0.0ms) begin transaction
941
+ Processing by CanvasOauth::CanvasController#oauth as HTML
942
+ Rendering text template
943
+ Rendered text template (0.0ms)
944
+ Completed 200 OK in 6ms (Views: 5.4ms | ActiveRecord: 0.0ms)
945
+  (0.1ms) rollback transaction
946
+  (0.0ms) begin transaction
947
+ Processing by CanvasOauth::CanvasController#oauth as HTML
948
+ Parameters: {"code"=>"valid", "state"=>"zzyyxx"}
949
+ Rendering text template
950
+ Rendered text template (0.0ms)
951
+ Completed 200 OK in 1ms (Views: 0.2ms | ActiveRecord: 0.0ms)
952
+  (0.0ms) rollback transaction
953
+  (0.0ms) begin transaction
954
+ Processing by CanvasOauth::CanvasController#oauth as HTML
955
+ Parameters: {"code"=>"valid"}
956
+ Rendering text template
957
+ Rendered text template (0.0ms)
958
+ Completed 200 OK in 0ms (Views: 0.2ms | ActiveRecord: 0.0ms)
959
+  (0.0ms) rollback transaction
960
+  (0.0ms) begin transaction
961
+ Processing by CanvasOauth::CanvasController#oauth as HTML
962
+ Parameters: {"code"=>"invalid"}
963
+ Rendering text template
964
+ Rendered text template (0.0ms)
965
+ Completed 200 OK in 1ms (Views: 0.2ms | ActiveRecord: 0.0ms)
966
+  (0.0ms) rollback transaction
967
+  (0.0ms) begin transaction
968
+ Processing by CanvasOauth::CanvasController#oauth as HTML
969
+ Parameters: {"code"=>"valid"}
970
+ Completed 500 Internal Server Error in 1ms (ActiveRecord: 0.1ms)
971
+  (0.0ms) rollback transaction
972
+  (0.0ms) begin transaction
973
+ Processing by CanvasOauth::CanvasController#oauth as HTML
974
+ Parameters: {"code"=>"valid"}
975
+ Rendering text template
976
+ Rendered text template (0.0ms)
977
+ Completed 200 OK in 1ms (Views: 0.6ms | ActiveRecord: 0.0ms)
978
+  (0.0ms) rollback transaction
979
+  (0.0ms) begin transaction
980
+ Processing by CanvasOauth::CanvasController#oauth as HTML
981
+ Parameters: {"code"=>"valid", "state"=>"mismatch"}
982
+ Rendering text template
983
+ Rendered text template (0.0ms)
984
+ Completed 200 OK in 1ms (Views: 0.3ms | ActiveRecord: 0.0ms)
985
+  (0.0ms) rollback transaction
986
+  (0.0ms) begin transaction
987
+ Processing by CanvasOauth::CanvasController#oauth as HTML
988
+ Parameters: {"code"=>"valid", "state"=>"zzyyxx"}
989
+ Completed 500 Internal Server Error in 1ms (ActiveRecord: 0.1ms)
990
+  (0.0ms) rollback transaction
991
+  (0.0ms) begin transaction
992
+  (0.0ms) rollback transaction
993
+  (0.0ms) begin transaction
994
+  (0.0ms) rollback transaction
995
+  (0.0ms) begin transaction
996
+  (0.1ms) rollback transaction
997
+  (0.0ms) begin transaction
998
+  (0.1ms) rollback transaction
999
+  (0.0ms) begin transaction
1000
+  (0.0ms) rollback transaction
1001
+  (0.0ms) begin transaction
1002
+  (0.0ms) rollback transaction
1003
+  (0.0ms) begin transaction
1004
+  (0.0ms) rollback transaction
1005
+  (0.0ms) begin transaction
1006
+  (0.0ms) rollback transaction
1007
+  (0.0ms) begin transaction
1008
+  (0.0ms) rollback transaction
1009
+  (0.0ms) begin transaction
1010
+  (0.0ms) rollback transaction
1011
+  (0.0ms) begin transaction
1012
+  (0.0ms) rollback transaction
1013
+  (0.0ms) begin transaction
1014
+  (0.1ms) rollback transaction
1015
+  (0.1ms) begin transaction
1016
+  (0.1ms) rollback transaction
1017
+  (0.2ms) begin transaction
1018
+  (0.0ms) rollback transaction
1019
+  (0.0ms) begin transaction
1020
+ API call (0.09ms): get ["/api/v1/courses/123/sections", {:query=>{:include=>["students", "avatar_url", "enrollments"], :per_page=>50}, :headers=>{}}]
1021
+  (0.0ms) rollback transaction
1022
+  (0.0ms) begin transaction
1023
+ API call (0.04ms): get ["/api/v1/courses", {:query=>{:per_page=>50}, :headers=>{}}]
1024
+  (0.0ms) rollback transaction
1025
+  (0.0ms) begin transaction
1026
+  (0.0ms) rollback transaction
1027
+  (0.0ms) begin transaction
1028
+ API call (0.03ms): post ["/api/v1/courses/123/assignments", {:body=>{:assignment=>{:name=>"Assignment"}}, :headers=>{}}]
1029
+  (0.0ms) rollback transaction
1030
+  (0.0ms) begin transaction
1031
+  (0.0ms) rollback transaction
1032
+  (0.0ms) begin transaction
1033
+ API call (0.41ms): get ["/api/v1/accounts/1/courses", {:query=>{:per_page=>50}, :headers=>{}}]
1034
+  (0.0ms) rollback transaction
1035
+  (0.0ms) begin transaction
1036
+  (0.0ms) rollback transaction
1037
+  (0.0ms) begin transaction
1038
+ API call (0.08ms): get ["/path", {:headers=>{}}]
1039
+  (0.1ms) rollback transaction
1040
+  (0.6ms) begin transaction
1041
+ API call (0.05ms): get ["/path", {:query=>"stuff", :headers=>{}}]
1042
+  (0.0ms) rollback transaction
1043
+  (0.0ms) begin transaction
1044
+ API call (0.06ms): get ["/path", {:headers=>{}}]
1045
+  (0.1ms) rollback transaction
1046
+  (0.0ms) begin transaction
1047
+  (0.0ms) rollback transaction
1048
+  (0.6ms) begin transaction
1049
+ API call (0.03ms): get ["/api/v1/courses/123/students", {:query=>{:per_page=>50}, :headers=>{}}]
1050
+  (0.0ms) rollback transaction
1051
+  (0.0ms) begin transaction
1052
+ API call (0.03ms): put ["/api/v1/courses/1/assignments/2/submissions/3", {:body=>{}, :headers=>{}}]
1053
+  (0.0ms) rollback transaction
1054
+  (0.0ms) begin transaction
1055
+  (0.0ms) rollback transaction
1056
+  (0.0ms) begin transaction
1057
+  (0.0ms) rollback transaction
1058
+  (0.0ms) begin transaction
1059
+ API call (0.04ms): get ["/api/v1/accounts/1/users", {:query=>{:per_page=>50}, :headers=>{}}]
1060
+  (0.0ms) rollback transaction
1061
+  (0.0ms) begin transaction
1062
+ API call (0.03ms): get ["/api/v1/courses/123", {:headers=>{}}]
1063
+  (0.0ms) rollback transaction
1064
+  (0.0ms) begin transaction
1065
+  (0.0ms) rollback transaction
1066
+  (0.1ms) begin transaction
1067
+ API call (0.03ms): get ["/api/v1/courses/123/assignments", {:query=>{:per_page=>50}, :headers=>{}}]
1068
+  (0.0ms) rollback transaction
1069
+  (0.0ms) begin transaction
1070
+  (0.0ms) rollback transaction
1071
+  (0.0ms) begin transaction
1072
+ API call (0.03ms): put ["/api/v1/courses/123/assignments/345", {:body=>{:assignment=>{:omit_from_final_grade=>true}}, :headers=>{}}]
1073
+  (0.0ms) rollback transaction
1074
+  (0.0ms) begin transaction
1075
+ API call (0.03ms): get ["/api/v1/users/123/profile", {:headers=>{}}]
1076
+  (0.0ms) rollback transaction
1077
+  (0.0ms) begin transaction
1078
+  (0.0ms) rollback transaction
1079
+  (0.0ms) begin transaction
1080
+  (0.0ms) rollback transaction
1081
+  (0.0ms) begin transaction
1082
+  (0.1ms) rollback transaction
1083
+  (0.0ms) begin transaction
1084
+  (0.0ms) rollback transaction
1085
+  (0.0ms) begin transaction
1086
+  (0.0ms) rollback transaction
1087
+  (0.0ms) begin transaction
1088
+  (0.0ms) rollback transaction
1089
+  (0.0ms) begin transaction
1090
+  (0.0ms) rollback transaction
1091
+  (0.0ms) begin transaction
1092
+  (0.0ms) rollback transaction
1093
+  (0.0ms) begin transaction
1094
+  (0.0ms) rollback transaction
1095
+  (0.0ms) begin transaction
1096
+  (0.1ms) rollback transaction
1097
+  (0.0ms) begin transaction
1098
+  (0.0ms) rollback transaction
1099
+  (0.0ms) begin transaction
1100
+  (0.0ms) rollback transaction
1101
+  (0.0ms) begin transaction
1102
+  (0.0ms) rollback transaction
1103
+  (0.0ms) begin transaction
1104
+  (0.0ms) rollback transaction
1105
+  (0.0ms) begin transaction
1106
+  (0.0ms) rollback transaction
1107
+ Initializing Canvas using configuration in /Users/kgarner/exempt/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
1108
+  (0.0ms) begin transaction
1109
+  (0.0ms) rollback transaction
1110
+  (0.1ms) begin transaction
1111
+  (0.0ms) rollback transaction
1112
+ Initializing Canvas using configuration in /Users/kgarner/exempt/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
1113
+  (0.0ms) begin transaction
1114
+  (0.0ms) rollback transaction
1115
+  (0.0ms) begin transaction
1116
+  (0.0ms) rollback transaction
1117
+ Initializing Canvas using configuration in /Users/kgarner/exempt/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
1118
+  (0.0ms) begin transaction
1119
+  (0.1ms) rollback transaction
1120
+  (0.0ms) begin transaction
1121
+ KTG LOOK AT ME
1122
+  (0.0ms) rollback transaction
1123
+ Initializing Canvas using configuration in /Users/kgarner/exempt/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
1124
+  (0.0ms) begin transaction
1125
+ Processing by CanvasOauth::CanvasController#oauth as HTML
1126
+ Rendering text template
1127
+ Rendered text template (0.0ms)
1128
+ Completed 200 OK in 3ms (Views: 3.0ms | ActiveRecord: 0.0ms)
1129
+  (0.0ms) rollback transaction
1130
+  (0.0ms) begin transaction
1131
+ Processing by CanvasOauth::CanvasController#oauth as HTML
1132
+ Parameters: {"code"=>"valid", "state"=>"mismatch"}
1133
+ Rendering text template
1134
+ Rendered text template (0.0ms)
1135
+ Completed 200 OK in 4ms (Views: 4.0ms | ActiveRecord: 0.0ms)
1136
+  (0.0ms) rollback transaction
1137
+  (0.0ms) begin transaction
1138
+ Processing by CanvasOauth::CanvasController#oauth as HTML
1139
+ Parameters: {"code"=>"valid", "state"=>"zzyyxx"}
1140
+ Completed 500 Internal Server Error in 2ms (ActiveRecord: 1.4ms)
1141
+  (0.0ms) rollback transaction
1142
+  (0.0ms) begin transaction
1143
+ Processing by CanvasOauth::CanvasController#oauth as HTML
1144
+ Parameters: {"code"=>"valid"}
1145
+ Completed 500 Internal Server Error in 0ms (ActiveRecord: 0.1ms)
1146
+  (0.0ms) rollback transaction
1147
+  (0.1ms) begin transaction
1148
+ Processing by CanvasOauth::CanvasController#oauth as HTML
1149
+ Parameters: {"code"=>"valid"}
1150
+ Rendering text template
1151
+ Rendered text template (0.0ms)
1152
+ Completed 200 OK in 0ms (Views: 0.3ms | ActiveRecord: 0.0ms)
1153
+  (0.0ms) rollback transaction
1154
+  (0.0ms) begin transaction
1155
+ Processing by CanvasOauth::CanvasController#oauth as HTML
1156
+ Parameters: {"code"=>"invalid"}
1157
+ Rendering text template
1158
+ Rendered text template (0.0ms)
1159
+ Completed 200 OK in 0ms (Views: 0.3ms | ActiveRecord: 0.0ms)
1160
+  (0.1ms) rollback transaction
1161
+  (0.1ms) begin transaction
1162
+ Processing by CanvasOauth::CanvasController#oauth as HTML
1163
+ Parameters: {"code"=>"valid", "state"=>"zzyyxx"}
1164
+ Rendering text template
1165
+ Rendered text template (0.0ms)
1166
+ Completed 200 OK in 0ms (Views: 0.3ms | ActiveRecord: 0.0ms)
1167
+  (0.0ms) rollback transaction
1168
+  (0.0ms) begin transaction
1169
+ Processing by CanvasOauth::CanvasController#oauth as HTML
1170
+ Parameters: {"code"=>"valid"}
1171
+ Rendering text template
1172
+ Rendered text template (0.0ms)
1173
+ Completed 200 OK in 0ms (Views: 0.3ms | ActiveRecord: 0.0ms)
1174
+  (0.0ms) rollback transaction
1175
+  (0.0ms) begin transaction
1176
+  (0.0ms) rollback transaction
1177
+  (0.0ms) begin transaction
1178
+  (0.0ms) rollback transaction
1179
+  (0.0ms) begin transaction
1180
+  (0.0ms) rollback transaction
1181
+  (0.0ms) begin transaction
1182
+ API call (0.05ms): get ["/api/v1/accounts/1/courses", {:query=>{:per_page=>50}, :headers=>{}}]
1183
+  (0.0ms) rollback transaction
1184
+  (0.0ms) begin transaction
1185
+  (0.0ms) rollback transaction
1186
+  (0.0ms) begin transaction
1187
+ API call (0.04ms): get ["/api/v1/courses", {:query=>{:per_page=>50}, :headers=>{}}]
1188
+  (0.0ms) rollback transaction
1189
+  (0.0ms) begin transaction
1190
+  (0.1ms) rollback transaction
1191
+  (0.1ms) begin transaction
1192
+  (0.0ms) rollback transaction
1193
+  (0.1ms) begin transaction
1194
+  (0.1ms) rollback transaction
1195
+  (0.1ms) begin transaction
1196
+ API call (0.05ms): get ["/api/v1/accounts/1/users", {:query=>{:per_page=>50}, :headers=>{}}]
1197
+  (0.2ms) rollback transaction
1198
+  (0.0ms) begin transaction
1199
+  (0.0ms) rollback transaction
1200
+  (0.0ms) begin transaction
1201
+ API call (0.04ms): put ["/api/v1/courses/123/assignments/345", {:body=>{:assignment=>{:omit_from_final_grade=>true}}, :headers=>{}}]
1202
+  (0.0ms) rollback transaction
1203
+  (0.0ms) begin transaction
1204
+  (0.1ms) rollback transaction
1205
+  (0.0ms) begin transaction
1206
+  (0.0ms) rollback transaction
1207
+  (0.0ms) begin transaction
1208
+ API call (0.03ms): put ["/api/v1/courses/1/assignments/2/submissions/3", {:body=>{}, :headers=>{}}]
1209
+  (0.0ms) rollback transaction
1210
+  (0.0ms) begin transaction
1211
+  (0.1ms) rollback transaction
1212
+  (0.1ms) begin transaction
1213
+ API call (0.07ms): get ["/path", {:headers=>{}}]
1214
+  (0.0ms) rollback transaction
1215
+  (0.0ms) begin transaction
1216
+ API call (0.07ms): get ["/path", {:headers=>{}}]
1217
+  (0.0ms) rollback transaction
1218
+  (0.0ms) begin transaction
1219
+ API call (0.07ms): get ["/path", {:query=>"stuff", :headers=>{}}]
1220
+  (0.0ms) rollback transaction
1221
+  (0.0ms) begin transaction
1222
+ API call (0.03ms): get ["/api/v1/users/123/profile", {:headers=>{}}]
1223
+  (0.0ms) rollback transaction
1224
+  (0.0ms) begin transaction
1225
+ API call (0.03ms): get ["/api/v1/courses/123/assignments", {:query=>{:per_page=>50}, :headers=>{}}]
1226
+  (0.0ms) rollback transaction
1227
+  (0.0ms) begin transaction
1228
+  (0.0ms) rollback transaction
1229
+  (0.0ms) begin transaction
1230
+  (0.0ms) rollback transaction
1231
+  (0.0ms) begin transaction
1232
+ API call (0.03ms): post ["/api/v1/courses/123/assignments", {:body=>{:assignment=>{:name=>"Assignment"}}, :headers=>{}}]
1233
+  (0.0ms) rollback transaction
1234
+  (0.0ms) begin transaction
1235
+ API call (0.05ms): get ["/api/v1/courses/123", {:headers=>{}}]
1236
+  (0.0ms) rollback transaction
1237
+  (0.0ms) begin transaction
1238
+  (0.0ms) rollback transaction
1239
+  (0.0ms) begin transaction
1240
+ API call (0.04ms): get ["/api/v1/courses/123/students", {:query=>{:per_page=>50}, :headers=>{}}]
1241
+  (0.0ms) rollback transaction
1242
+  (0.0ms) begin transaction
1243
+ API call (0.03ms): get ["/api/v1/courses/123/sections", {:query=>{:include=>["students", "avatar_url", "enrollments"], :per_page=>50}, :headers=>{}}]
1244
+  (0.0ms) rollback transaction
1245
+  (0.0ms) begin transaction
1246
+  (0.0ms) rollback transaction
1247
+  (0.0ms) begin transaction
1248
+  (0.0ms) rollback transaction
1249
+  (0.0ms) begin transaction
1250
+  (0.0ms) rollback transaction
1251
+  (0.0ms) begin transaction
1252
+  (0.0ms) rollback transaction
1253
+  (0.0ms) begin transaction
1254
+  (0.0ms) rollback transaction
1255
+  (0.0ms) begin transaction
1256
+  (0.0ms) rollback transaction
1257
+  (0.0ms) begin transaction
1258
+  (0.0ms) rollback transaction
1259
+  (0.1ms) begin transaction
1260
+  (0.0ms) rollback transaction
1261
+  (0.0ms) begin transaction
1262
+  (0.0ms) rollback transaction
1263
+  (0.0ms) begin transaction
1264
+  (0.0ms) rollback transaction
1265
+  (0.0ms) begin transaction
1266
+  (0.0ms) rollback transaction
1267
+  (0.0ms) begin transaction
1268
+  (0.1ms) rollback transaction
1269
+  (0.0ms) begin transaction
1270
+  (0.0ms) rollback transaction
1271
+  (0.0ms) begin transaction
1272
+  (0.0ms) rollback transaction
1273
+  (0.0ms) begin transaction
1274
+  (0.0ms) rollback transaction
1275
+  (0.0ms) begin transaction
1276
+  (0.1ms) rollback transaction
1277
+  (0.0ms) begin transaction
1278
+  (0.0ms) rollback transaction
1279
+  (0.0ms) begin transaction
1280
+  (0.0ms) rollback transaction
1281
+  (0.0ms) begin transaction
1282
+  (0.0ms) rollback transaction
1283
+  (0.0ms) begin transaction
1284
+  (0.0ms) rollback transaction
1285
+  (0.1ms) begin transaction
1286
+  (0.0ms) rollback transaction
1287
+  (0.0ms) begin transaction
1288
+ KTG LOOK AT ME
1289
+  (0.1ms) rollback transaction
1290
+  (0.0ms) begin transaction
1291
+  (0.0ms) rollback transaction
1292
+  (0.0ms) begin transaction
1293
+  (0.0ms) rollback transaction
1294
+  (0.0ms) begin transaction
1295
+  (0.0ms) rollback transaction
1296
+  (0.0ms) begin transaction
1297
+  (0.0ms) rollback transaction
1298
+  (0.0ms) begin transaction
1299
+  (0.0ms) rollback transaction
1300
+  (0.0ms) begin transaction
1301
+  (0.0ms) rollback transaction
1302
+  (0.0ms) begin transaction
1303
+  (0.0ms) rollback transaction
1304
+  (0.0ms) begin transaction
1305
+  (0.0ms) rollback transaction
1306
+  (0.0ms) begin transaction
1307
+  (0.0ms) rollback transaction
1308
+  (0.0ms) begin transaction
1309
+  (0.0ms) rollback transaction
1310
+  (0.0ms) begin transaction
1311
+  (0.0ms) rollback transaction
1312
+ Initializing Canvas using configuration in /Users/kgarner/exempt/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
1313
+  (0.0ms) begin transaction
1314
+  (0.0ms) rollback transaction
1315
+  (0.0ms) begin transaction
1316
+  (0.0ms) rollback transaction
1317
+  (0.0ms) begin transaction
1318
+  (0.0ms) rollback transaction
1319
+  (0.0ms) begin transaction
1320
+  (0.0ms) rollback transaction
1321
+  (0.0ms) begin transaction
1322
+  (0.0ms) rollback transaction
1323
+  (0.0ms) begin transaction
1324
+  (0.0ms) rollback transaction
1325
+  (0.1ms) begin transaction
1326
+  (0.0ms) rollback transaction
1327
+  (0.4ms) begin transaction
1328
+  (0.0ms) rollback transaction
1329
+  (0.0ms) begin transaction
1330
+  (0.0ms) rollback transaction
1331
+  (0.0ms) begin transaction
1332
+  (0.0ms) rollback transaction
1333
+  (0.0ms) begin transaction
1334
+  (0.1ms) rollback transaction
1335
+  (0.0ms) begin transaction
1336
+  (0.0ms) rollback transaction
1337
+  (0.0ms) begin transaction
1338
+  (0.0ms) rollback transaction
1339
+  (0.0ms) begin transaction
1340
+  (0.0ms) rollback transaction
1341
+  (0.0ms) begin transaction
1342
+  (0.0ms) rollback transaction
1343
+  (0.0ms) begin transaction
1344
+  (0.0ms) rollback transaction
1345
+  (0.0ms) begin transaction
1346
+  (0.0ms) rollback transaction
1347
+  (0.0ms) begin transaction
1348
+  (0.0ms) rollback transaction
1349
+  (0.1ms) begin transaction
1350
+  (0.0ms) rollback transaction
1351
+  (0.1ms) begin transaction
1352
+  (0.0ms) rollback transaction
1353
+  (0.0ms) begin transaction
1354
+  (0.0ms) rollback transaction
1355
+  (0.0ms) begin transaction
1356
+  (0.0ms) rollback transaction
1357
+  (0.0ms) begin transaction
1358
+  (0.0ms) rollback transaction
1359
+  (0.0ms) begin transaction
1360
+  (0.0ms) rollback transaction
1361
+  (0.0ms) begin transaction
1362
+  (0.0ms) rollback transaction
1363
+  (0.0ms) begin transaction
1364
+  (0.0ms) rollback transaction
1365
+  (0.0ms) begin transaction
1366
+  (0.0ms) rollback transaction
1367
+  (0.0ms) begin transaction
1368
+  (0.0ms) rollback transaction
1369
+  (0.0ms) begin transaction
1370
+  (0.0ms) rollback transaction
1371
+  (0.0ms) begin transaction
1372
+  (0.0ms) rollback transaction
1373
+  (0.0ms) begin transaction
1374
+  (0.0ms) rollback transaction
1375
+  (0.0ms) begin transaction
1376
+ API call (0.03ms): get ["/api/v1/users/123/profile", {:headers=>{}}]
1377
+  (0.0ms) rollback transaction
1378
+  (0.0ms) begin transaction
1379
+  (0.0ms) rollback transaction
1380
+  (0.0ms) begin transaction
1381
+ API call (0.03ms): put ["/api/v1/courses/1/assignments/2/submissions/3", {:body=>{}, :headers=>{}}]
1382
+  (0.0ms) rollback transaction
1383
+  (0.0ms) begin transaction
1384
+  (0.0ms) rollback transaction
1385
+  (0.0ms) begin transaction
1386
+ API call (0.03ms): get ["/api/v1/accounts/1/courses", {:query=>{:per_page=>50}, :headers=>{}}]
1387
+  (0.0ms) rollback transaction
1388
+  (0.0ms) begin transaction
1389
+  (0.1ms) rollback transaction
1390
+  (0.0ms) begin transaction
1391
+  (0.1ms) rollback transaction
1392
+  (0.0ms) begin transaction
1393
+  (0.0ms) rollback transaction
1394
+  (0.1ms) begin transaction
1395
+  (0.0ms) rollback transaction
1396
+  (0.0ms) begin transaction
1397
+ API call (0.03ms): get ["/api/v1/courses/123/sections", {:query=>{:include=>["students", "avatar_url", "enrollments"], :per_page=>50}, :headers=>{}}]
1398
+  (0.0ms) rollback transaction
1399
+  (0.0ms) begin transaction
1400
+ API call (0.03ms): get ["/api/v1/courses", {:query=>{:per_page=>50}, :headers=>{}}]
1401
+  (0.0ms) rollback transaction
1402
+  (0.0ms) begin transaction
1403
+ API call (0.08ms): post ["/api/v1/courses/123/assignments", {:body=>{:assignment=>{:name=>"Assignment"}}, :headers=>{}}]
1404
+  (0.0ms) rollback transaction
1405
+  (0.1ms) begin transaction
1406
+  (0.0ms) rollback transaction
1407
+  (0.0ms) begin transaction
1408
+  (0.0ms) rollback transaction
1409
+  (0.1ms) begin transaction
1410
+ API call (0.03ms): get ["/api/v1/courses/123/assignments", {:query=>{:per_page=>50}, :headers=>{}}]
1411
+  (0.0ms) rollback transaction
1412
+  (0.1ms) begin transaction
1413
+ API call (0.03ms): put ["/api/v1/courses/123/assignments/345", {:body=>{:assignment=>{:omit_from_final_grade=>true}}, :headers=>{}}]
1414
+  (0.0ms) rollback transaction
1415
+  (0.0ms) begin transaction
1416
+  (0.0ms) rollback transaction
1417
+  (0.0ms) begin transaction
1418
+ API call (0.08ms): get ["/path", {:headers=>{}}]
1419
+  (0.1ms) rollback transaction
1420
+  (0.0ms) begin transaction
1421
+ API call (0.04ms): get ["/path", {:headers=>{}}]
1422
+  (0.0ms) rollback transaction
1423
+  (0.0ms) begin transaction
1424
+ API call (0.04ms): get ["/path", {:query=>"stuff", :headers=>{}}]
1425
+  (0.0ms) rollback transaction
1426
+  (0.0ms) begin transaction
1427
+ API call (0.03ms): get ["/api/v1/courses/123", {:headers=>{}}]
1428
+  (0.0ms) rollback transaction
1429
+  (0.0ms) begin transaction
1430
+ API call (0.03ms): get ["/api/v1/courses/123/students", {:query=>{:per_page=>50}, :headers=>{}}]
1431
+  (0.0ms) rollback transaction
1432
+  (0.0ms) begin transaction
1433
+  (0.0ms) rollback transaction
1434
+  (0.0ms) begin transaction
1435
+  (0.0ms) rollback transaction
1436
+  (0.0ms) begin transaction
1437
+ API call (0.03ms): get ["/api/v1/accounts/1/users", {:query=>{:per_page=>50}, :headers=>{}}]
1438
+  (0.0ms) rollback transaction
1439
+  (0.0ms) begin transaction
1440
+  (0.0ms) rollback transaction
1441
+  (0.0ms) begin transaction
1442
+  (0.0ms) rollback transaction
1443
+  (0.0ms) begin transaction
1444
+  (0.0ms) rollback transaction
1445
+  (0.0ms) begin transaction
1446
+ Processing by CanvasOauth::CanvasController#oauth as HTML
1447
+ Parameters: {"code"=>"valid"}
1448
+ Completed 500 Internal Server Error in 1ms (ActiveRecord: 0.1ms)
1449
+  (0.0ms) rollback transaction
1450
+  (0.0ms) begin transaction
1451
+ Processing by CanvasOauth::CanvasController#oauth as HTML
1452
+ Parameters: {"code"=>"valid"}
1453
+ Rendering text template
1454
+ Rendered text template (0.0ms)
1455
+ Completed 200 OK in 6ms (Views: 5.3ms | ActiveRecord: 0.0ms)
1456
+  (0.1ms) rollback transaction
1457
+  (0.0ms) begin transaction
1458
+ Processing by CanvasOauth::CanvasController#oauth as HTML
1459
+ Parameters: {"code"=>"invalid"}
1460
+ Rendering text template
1461
+ Rendered text template (0.0ms)
1462
+ Completed 200 OK in 0ms (Views: 0.3ms | ActiveRecord: 0.0ms)
1463
+  (0.0ms) rollback transaction
1464
+  (0.0ms) begin transaction
1465
+ Processing by CanvasOauth::CanvasController#oauth as HTML
1466
+ Parameters: {"code"=>"valid", "state"=>"mismatch"}
1467
+ Rendering text template
1468
+ Rendered text template (0.0ms)
1469
+ Completed 200 OK in 0ms (Views: 0.2ms | ActiveRecord: 0.0ms)
1470
+  (0.0ms) rollback transaction
1471
+  (0.0ms) begin transaction
1472
+ Processing by CanvasOauth::CanvasController#oauth as HTML
1473
+ Parameters: {"code"=>"valid", "state"=>"zzyyxx"}
1474
+ Completed 500 Internal Server Error in 0ms (ActiveRecord: 0.1ms)
1475
+  (0.0ms) rollback transaction
1476
+  (0.0ms) begin transaction
1477
+ Processing by CanvasOauth::CanvasController#oauth as HTML
1478
+ Rendering text template
1479
+ Rendered text template (0.0ms)
1480
+ Completed 200 OK in 0ms (Views: 0.2ms | ActiveRecord: 0.0ms)
1481
+  (0.0ms) rollback transaction
1482
+  (0.0ms) begin transaction
1483
+ Processing by CanvasOauth::CanvasController#oauth as HTML
1484
+ Parameters: {"code"=>"valid"}
1485
+ Rendering text template
1486
+ Rendered text template (0.0ms)
1487
+ Completed 200 OK in 0ms (Views: 0.2ms | ActiveRecord: 0.0ms)
1488
+  (0.0ms) rollback transaction
1489
+  (0.0ms) begin transaction
1490
+ Processing by CanvasOauth::CanvasController#oauth as HTML
1491
+ Parameters: {"code"=>"valid", "state"=>"zzyyxx"}
1492
+ Rendering text template
1493
+ Rendered text template (0.0ms)
1494
+ Completed 200 OK in 0ms (Views: 0.2ms | ActiveRecord: 0.0ms)
1495
+  (0.0ms) rollback transaction
1496
+  (0.0ms) begin transaction
1497
+  (0.0ms) rollback transaction
1498
+  (0.0ms) begin transaction
1499
+ KTG LOOK AT ME
1500
+  (0.0ms) rollback transaction
1501
+ Initializing Canvas using configuration in /Users/kgarner/exempt/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
1502
+  (0.1ms) begin transaction
1503
+  (0.1ms) rollback transaction
1504
+  (0.0ms) begin transaction
1505
+  (0.0ms) rollback transaction
1506
+  (0.0ms) begin transaction
1507
+  (0.0ms) rollback transaction
1508
+  (0.0ms) begin transaction
1509
+  (0.0ms) rollback transaction
1510
+  (0.0ms) begin transaction
1511
+ API call (0.07ms): get ["/api/v1/courses/123", {:headers=>{}}]
1512
+  (0.0ms) rollback transaction
1513
+  (0.1ms) begin transaction
1514
+  (0.1ms) rollback transaction
1515
+  (0.1ms) begin transaction
1516
+ API call (0.04ms): get ["/api/v1/courses/123/sections", {:query=>{:include=>["students", "avatar_url", "enrollments"], :per_page=>50}, :headers=>{}}]
1517
+  (0.1ms) rollback transaction
1518
+  (0.0ms) begin transaction
1519
+  (0.0ms) rollback transaction
1520
+  (0.0ms) begin transaction
1521
+ API call (0.03ms): put ["/api/v1/courses/123/assignments/345", {:body=>{:assignment=>{:omit_from_final_grade=>true}}, :headers=>{}}]
1522
+  (0.0ms) rollback transaction
1523
+  (0.0ms) begin transaction
1524
+ API call (0.1ms): get ["/api/v1/courses/123/assignments", {:query=>{:per_page=>50}, :headers=>{}}]
1525
+  (0.0ms) rollback transaction
1526
+  (0.0ms) begin transaction
1527
+  (0.0ms) rollback transaction
1528
+  (0.0ms) begin transaction
1529
+ API call (0.03ms): get ["/api/v1/accounts/1/courses", {:query=>{:per_page=>50}, :headers=>{}}]
1530
+  (0.0ms) rollback transaction
1531
+  (0.0ms) begin transaction
1532
+  (0.0ms) rollback transaction
1533
+  (0.0ms) begin transaction
1534
+  (0.0ms) rollback transaction
1535
+  (0.0ms) begin transaction
1536
+ API call (0.03ms): get ["/api/v1/courses/123/students", {:query=>{:per_page=>50}, :headers=>{}}]
1537
+  (0.0ms) rollback transaction
1538
+  (0.0ms) begin transaction
1539
+  (0.0ms) rollback transaction
1540
+  (0.1ms) begin transaction
1541
+  (0.0ms) rollback transaction
1542
+  (0.0ms) begin transaction
1543
+ API call (0.03ms): post ["/api/v1/courses/123/assignments", {:body=>{:assignment=>{:name=>"Assignment"}}, :headers=>{}}]
1544
+  (0.0ms) rollback transaction
1545
+  (0.0ms) begin transaction
1546
+  (0.0ms) rollback transaction
1547
+  (0.0ms) begin transaction
1548
+ API call (0.03ms): get ["/api/v1/accounts/1/users", {:query=>{:per_page=>50}, :headers=>{}}]
1549
+  (0.0ms) rollback transaction
1550
+  (0.1ms) begin transaction
1551
+ API call (0.04ms): get ["/api/v1/courses", {:query=>{:per_page=>50}, :headers=>{}}]
1552
+  (0.0ms) rollback transaction
1553
+  (0.1ms) begin transaction
1554
+ API call (0.05ms): get ["/path", {:headers=>{}}]
1555
+  (0.0ms) rollback transaction
1556
+  (0.0ms) begin transaction
1557
+ API call (0.03ms): get ["/path", {:query=>"stuff", :headers=>{}}]
1558
+  (0.0ms) rollback transaction
1559
+  (0.0ms) begin transaction
1560
+ API call (0.03ms): get ["/path", {:headers=>{}}]
1561
+  (0.0ms) rollback transaction
1562
+  (0.1ms) begin transaction
1563
+ API call (0.05ms): put ["/api/v1/courses/1/assignments/2/submissions/3", {:body=>{}, :headers=>{}}]
1564
+  (0.0ms) rollback transaction
1565
+  (0.0ms) begin transaction
1566
+  (0.0ms) rollback transaction
1567
+  (0.0ms) begin transaction
1568
+ API call (0.03ms): get ["/api/v1/users/123/profile", {:headers=>{}}]
1569
+  (0.0ms) rollback transaction
1570
+  (0.0ms) begin transaction
1571
+  (0.0ms) rollback transaction
1572
+  (0.0ms) begin transaction
1573
+  (0.0ms) rollback transaction
1574
+  (0.0ms) begin transaction
1575
+  (0.1ms) rollback transaction
1576
+  (0.1ms) begin transaction
1577
+  (0.1ms) rollback transaction
1578
+  (0.1ms) begin transaction
1579
+  (0.1ms) rollback transaction
1580
+  (0.0ms) begin transaction
1581
+  (0.0ms) rollback transaction
1582
+  (0.0ms) begin transaction
1583
+  (0.0ms) rollback transaction
1584
+  (0.0ms) begin transaction
1585
+  (0.0ms) rollback transaction
1586
+  (0.0ms) begin transaction
1587
+  (0.0ms) rollback transaction
1588
+  (0.0ms) begin transaction
1589
+  (0.0ms) rollback transaction
1590
+  (0.0ms) begin transaction
1591
+  (0.0ms) rollback transaction
1592
+  (0.0ms) begin transaction
1593
+  (0.0ms) rollback transaction
1594
+  (0.0ms) begin transaction
1595
+  (0.0ms) rollback transaction
1596
+  (0.0ms) begin transaction
1597
+  (0.0ms) rollback transaction
1598
+  (0.0ms) begin transaction
1599
+  (0.0ms) rollback transaction
1600
+  (0.1ms) begin transaction
1601
+  (0.0ms) rollback transaction
1602
+  (0.0ms) begin transaction
1603
+  (0.0ms) rollback transaction
1604
+  (0.0ms) begin transaction
1605
+  (0.0ms) rollback transaction
1606
+  (0.0ms) begin transaction
1607
+  (0.0ms) rollback transaction
1608
+  (0.0ms) begin transaction
1609
+  (0.0ms) rollback transaction
1610
+ Initializing Canvas using configuration in /Users/kgarner/exempt/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
1611
+  (0.0ms) begin transaction
1612
+  (0.1ms) rollback transaction
1613
+  (0.0ms) begin transaction
1614
+  (0.0ms) rollback transaction
1615
+  (0.0ms) begin transaction
1616
+  (0.1ms) rollback transaction
1617
+  (0.1ms) begin transaction
1618
+  (0.1ms) rollback transaction
1619
+ Initializing Canvas using configuration in /Users/kgarner/exempt/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
1620
+  (0.0ms) begin transaction
1621
+  (0.1ms) rollback transaction
1622
+ Initializing Canvas using configuration in /Users/kgarner/exempt/instructure/canvas_oauth_engine/spec/dummy/config/canvas.yml
1623
+  (0.0ms) begin transaction
1624
+  (0.1ms) rollback transaction
1625
+  (0.0ms) begin transaction
1626
+  (0.1ms) rollback transaction
1627
+  (0.1ms) begin transaction
1628
+  (0.1ms) rollback transaction
1629
+  (0.1ms) begin transaction
1630
+  (0.1ms) rollback transaction