fixing tests p2 lti_spec tests all passed

This commit is contained in:
Tom Staubitz
2017-01-13 00:37:07 +01:00
parent 5fe12bfa78
commit 4af24d4317
3 changed files with 41 additions and 37 deletions

View File

@ -102,12 +102,14 @@ module Lti
::NewRelic::Agent.add_custom_parameters({ score: score, session: session }) ::NewRelic::Agent.add_custom_parameters({ score: score, session: session })
fail(Error, "Score #{score} must be between 0 and #{MAXIMUM_SCORE}!") unless (0..MAXIMUM_SCORE).include?(score) fail(Error, "Score #{score} must be between 0 and #{MAXIMUM_SCORE}!") unless (0..MAXIMUM_SCORE).include?(score)
lti_parameter = LtiParameter.where(consumers_id: session[:consumer_id], if session[:consumer_id]
external_users_id: user_id, lti_parameter = LtiParameter.where(consumers_id: session[:consumer_id],
exercises_id: exercise_id).first external_users_id: user_id,
exercises_id: exercise_id).first
consumer = Consumer.find_by(id: session[:consumer_id]) consumer = Consumer.find_by(id: session[:consumer_id])
provider = build_tool_provider(consumer: consumer, parameters: lti_parameter.lti_parameters) provider = build_tool_provider(consumer: consumer, parameters: lti_parameter.lti_parameters)
end
if provider.nil? if provider.nil?
{status: 'error'} {status: 'error'}
@ -130,15 +132,16 @@ module Lti
exercise = Exercise.where(token: options[:parameters][:custom_token]).first exercise = Exercise.where(token: options[:parameters][:custom_token]).first
exercise_id = exercise.id unless exercise.nil? exercise_id = exercise.id unless exercise.nil?
current_user = ExternalUser.find_or_create_by(consumer_id: options[:consumer].id, external_id: options[:parameters][:user_id].to_s)
lti_parameters = LtiParameter.find_or_create_by(consumers_id: options[:consumer].id, lti_parameters = LtiParameter.find_or_create_by(consumers_id: options[:consumer].id,
external_users_id: @current_user.id, #options[:parameters][:user_id].to_s, external_users_id: current_user.id,
exercises_id: exercise_id) exercises_id: exercise_id)
lti_parameters.lti_parameters = options[:parameters].slice(*SESSION_PARAMETERS).to_json lti_parameters.lti_parameters = options[:parameters].slice(*SESSION_PARAMETERS).to_json
lti_parameters.save! lti_parameters.save!
session[:consumer_id] = options[:consumer].id session[:consumer_id] = options[:consumer].id
session[:external_user_id] = @current_user.id session[:external_user_id] = current_user.id
end end
private :store_lti_session_data private :store_lti_session_data

View File

@ -105,29 +105,25 @@ describe Lti do
describe '#send_score' do describe '#send_score' do
let(:consumer) { FactoryGirl.create(:consumer) } let(:consumer) { FactoryGirl.create(:consumer) }
let(:score) { 0.5 } let(:score) { 0.5 }
#let(:exercise) { FactoryGirl.create(:math) }
let(:submission) { FactoryGirl.create(:submission) } let(:submission) { FactoryGirl.create(:submission) }
let!(:lti_parameter) { FactoryGirl.create(:lti_parameter)} let!(:lti_parameter) { FactoryGirl.create(:lti_parameter)}
context 'with an invalid score' do context 'with an invalid score' do
it 'raises an exception' do it 'raises an exception' do
expect { controller.send(:send_score, Lti::MAXIMUM_SCORE * 2, submission.exercise_id, submission.user_id) }.to raise_error(Lti::Error) expect { controller.send(:send_score, submission.exercise_id, Lti::MAXIMUM_SCORE * 2, submission.user_id) }.to raise_error(Lti::Error)
end end
end end
context 'with an valid score' do context 'with an valid score' do
context 'with a tool provider' do context 'with a tool consumer' do
before(:each) do before(:each) do
#Todo replace session with lti_parameter
controller.session[:consumer_id] = consumer.id controller.session[:consumer_id] = consumer.id
# controller.session[:lti_parameters] = {}
#Todo create empty LtiParameter instead
end end
context 'when grading is not supported' do context 'when grading is not supported' do
it 'returns a corresponding status' do it 'returns a corresponding status' do
expect_any_instance_of(IMS::LTI::ToolProvider).to receive(:outcome_service?).and_return(false) expect_any_instance_of(IMS::LTI::ToolProvider).to receive(:outcome_service?).and_return(false)
expect(controller.send(:send_score, score)[:status]).to eq('unsupported') expect(controller.send(:send_score, submission.exercise_id, score, submission.user_id)[:status]).to eq('unsupported')
end end
end end
@ -144,11 +140,11 @@ describe Lti do
end end
it 'sends the score' do it 'sends the score' do
controller.send(:send_score, score) controller.send(:send_score, submission.exercise_id, score, submission.user_id)
end end
it 'returns code, message, and status' do it 'returns code, message, and status' do
result = controller.send(:send_score, score) result = controller.send(:send_score, submission.exercise_id, score, submission.user_id)
expect(result[:code]).to eq(response.response_code) expect(result[:code]).to eq(response.response_code)
expect(result[:message]).to eq(response.body) expect(result[:message]).to eq(response.body)
expect(result[:status]).to eq(response.code_major) expect(result[:status]).to eq(response.code_major)
@ -156,34 +152,28 @@ describe Lti do
end end
end end
context 'without a tool provider' do context 'without a tool consumer' do
it 'returns a corresponding status' do it 'returns a corresponding status' do
expect(controller).to receive(:build_tool_provider).and_return(nil) expect(controller.send(:send_score, submission.exercise_id, score, submission.user_id)[:status]).to eq('error')
expect(controller.send(:send_score, score)[:status]).to eq('error')
end end
end end
end end
end end
describe '#store_lti_session_data' do describe '#store_lti_session_data' do
#Todo replace session with lti_parameter
let(:parameters) { {} } let(:parameters) { {} }
before_count = LtiParameter.count
before(:each) { controller.instance_variable_set(:@current_user, FactoryGirl.create(:external_user)) }
#Todo do this with lti_parameter object
after(:each) { controller.send(:store_lti_session_data, consumer: FactoryGirl.build(:consumer), parameters: parameters) }
it 'stores data in the session' do it 'stores data in the session' do
#Todo replace session with lti_parameter controller.instance_variable_set(:@current_user, FactoryGirl.create(:external_user))
expect(controller.session).to receive(:[]=).with(:consumer_id, anything) expect(controller.session).to receive(:[]=).with(:consumer_id, anything)
expect(controller.session).to receive(:[]=).with(:external_user_id, anything) expect(controller.session).to receive(:[]=).with(:external_user_id, anything)
# expect(controller.session).to receive(:[]=).with(:lti_parameters, kind_of(Hash)) controller.send(:store_lti_session_data, consumer: FactoryGirl.build(:consumer), parameters: parameters)
#Todo it creates an LtiParameter Object
expect(LtiParameter.count).to eq(before_count + 1)
end end
it 'stores only selected tuples' do it 'it creates an LtiParameter Object' do
expect(parameters).to receive(:slice).with(*Lti::SESSION_PARAMETERS) before_count = LtiParameter.count
controller.send(:store_lti_session_data, consumer: FactoryGirl.build(:consumer), parameters: parameters)
expect(LtiParameter.count).to eq(before_count + 1)
end end
end end

View File

@ -1,12 +1,23 @@
FactoryGirl.define do FactoryGirl.define do
#TODO do this proper
factory :lti_parameter do factory :lti_parameter do
association :consumers_id, factory: :consumer consumers_id 1
association :exercises_id, factory: :math exercises_id 1
association :external_users_id, factory: :external_user external_users_id 1
lti_parameters JSON.parse('{"lis_result_sourcedid": "c2db0c7c-4411-4b27-a52b-ddfc3dc32065",
trait :lti_parameters do "lis_outcome_service_url": "http://172.16.54.235:3000/courses/0132156a-9afb-434d-83cc-704780104105/sections/21c6c6f4-1fb6-43b4-af3c-04fdc098879e/items/999b1fe6-d4b6-47b7-a577-ea2b4b1041ec/tool_grading",
JSON.parse('{"lis_result_sourcedid": "c2db0c7c-4411-4b27-a52b-ddfc3dc32065", "lis_outcome_service_url": "http://172.16.54.235:3000/courses/0132156a-9afb-434d-83cc-704780104105/sections/21c6c6f4-1fb6-43b4-af3c-04fdc098879e/items/999b1fe6-d4b6-47b7-a577-ea2b4b1041ec/tool_grading", "launch_presentation_return_url": "http://172.16.54.235:3000/courses/0132156a-9afb-434d-83cc-704780104105/sections/21c6c6f4-1fb6-43b4-af3c-04fdc098879e/items/999b1fe6-d4b6-47b7-a577-ea2b4b1041ec/tool_return"}') "launch_presentation_return_url": "http://172.16.54.235:3000/courses/0132156a-9afb-434d-83cc-704780104105/sections/21c6c6f4-1fb6-43b4-af3c-04fdc098879e/items/999b1fe6-d4b6-47b7-a577-ea2b4b1041ec/tool_return"}')
end
end end
# factory :lti_parameter do
# association :consumers_id, factory: :consumer
# association :exercises_id, factory: :math
# association :external_users_id, factory: :external_user
#
#
# trait :lti_parameters do
# JSON.parse('{"lis_result_sourcedid": "c2db0c7c-4411-4b27-a52b-ddfc3dc32065", "lis_outcome_service_url": "http://172.16.54.235:3000/courses/0132156a-9afb-434d-83cc-704780104105/sections/21c6c6f4-1fb6-43b4-af3c-04fdc098879e/items/999b1fe6-d4b6-47b7-a577-ea2b4b1041ec/tool_grading", "launch_presentation_return_url": "http://172.16.54.235:3000/courses/0132156a-9afb-434d-83cc-704780104105/sections/21c6c6f4-1fb6-43b4-af3c-04fdc098879e/items/999b1fe6-d4b6-47b7-a577-ea2b4b1041ec/tool_return"}')
# end
# end
end end