Created
April 2, 2016 19:02
-
-
Save adam-phillipps/9cb11ba3e4169c667681831d54bd9fe2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'spec_helper' | |
require 'japanda/canvas_factory/user' | |
describe 'Enrollment class' do | |
before(:all) do | |
@course_a = CatalogFactory::Course.create! title: "course_a#{SecureRandom.hex}" | |
@course_b = CatalogFactory::Course.create! title: "course_b#{SecureRandom.hex}" | |
@sub_program_a = CatalogFactory::Program.create! title: "sub_program_a#{SecureRandom.hex}", requirements: @course_a | |
@sub_program_b = CatalogFactory::Program.create! title: "sub_program_b#{SecureRandom.hex}", requirements: [@course_a, @course_b] | |
@main_program = CatalogFactory::Program.create! title: "main_program#{SecureRandom.hex}", requirements: [@sub_program_a, @course_b] | |
end | |
shared_examples_for 'a valid enrollment' do | |
it 'should allow users to enroll in a course', | |
priority: '1', test_id: pick_test_id(context, learner: 1068680, admin: 1068677) do | |
enrollment = CatalogFactory::Enrollment.create!(listing_id: @course_a.id, canvas_user_id: user.id) | |
enrolled_at = DateTime.parse(enrollment.catalog_response['enrolled_at']) | |
expect(enrolled_at).to be_within(1).of(DateTime.now) | |
end | |
it 'should allow users to enroll in multiple courses', | |
priority: '1', test_id: pick_test_id(context, learner: 1068679, admin: 1068678) do | |
enrollment_a = CatalogFactory::Enrollment.create!(listing_id: @course_a.id, canvas_user_id: user.id) | |
enrollment_b = CatalogFactory::Enrollment.create!(listing_id: @course_b.id, canvas_user_id: user.id) | |
expect(enrollment_a.listing_id).to eql(@course_a.id) | |
expect(enrollment_b.listing_id).to eql(@course_b.id) | |
expect(enrollment_a.canvas_user_id).to eql(user.id) | |
expect(enrollment_b.canvas_user_id).to eql(user.id) | |
expect(enrollment_a.id).to be > 0 | |
expect(enrollment_b.id).to be > 0 | |
end | |
it 'should allow users to enroll in a program', priority: '1', test_id: 'C1068655' do | |
enrollment = CatalogFactory::Enrollment.create!(listing_id: @sub_program_a.id, canvas_user_id: user.id) | |
expect(enrollment.catalog_response['listing']['type']).to eql('Program') | |
end | |
it 'should allow users to enroll in a course that is part of a program', priority: '1', test_id: 'C1068656' do | |
expect(@sub_program_a.requirements.first['id']).to eql(@course_a.id) | |
enrollment = CatalogFactory::Enrollment.create!(listing_id: @course_a.id, canvas_user_id: user.id) | |
expect(enrollment.listing_id).to eql(@course_a.id) | |
expect(enrollment.catalog_response['listing']['type']).to eql('Course') | |
end | |
it 'should allow users to enroll in a sub-program', priority: '1', test_id: 'C1068657' do | |
enrollment = CatalogFactory::Enrollment.create!( | |
listing_id: @sub_program_a.id, canvas_user_id: user.id | |
) | |
expect(enrollment.listing_id).to eql(@sub_program_a.id) | |
end | |
it 'should allow users to enroll in a program that has courses and programs', priority: '1', test_id: 'C1068658' do | |
enrollment = CatalogFactory::Enrollment.create!( | |
listing_id: @main_program.id, canvas_user_id: user.id | |
) | |
expect(enrollment.listing_id).to eql(@main_program.id) | |
end | |
it 'should allow users to enroll and create an order', priority: '1', test_id: 'C1068659' do | |
auth = "Token token=#{ENV['GALLERY_API_TOKEN']}" | |
enrollment = CatalogFactory::Enrollment.create!( | |
listing_id: @main_program.id, canvas_user_id: user.id, create_order: true | |
) | |
order_response = RestClient.get( | |
"#{ENV['GALLERY_API_HOST']}/api/v1/orders?canvas_user_id=#{user.id}", | |
{ Authorization: auth } | |
) | |
order = JSON.parse(order_response) | |
user_id = order['orders'].first['user']['id'] | |
listing_id = order['orders'].first['listings'].first['id'] | |
expect(user_id).to eql(user.id) | |
expect(listing_id).to eql(@main_program.id) | |
end | |
end | |
context 'for an admin' do | |
it_behaves_like 'a valid enrollment' | |
let(:user) { CanvasFactory::AdminUser.new } | |
end | |
context 'for a normal user' do | |
it_behaves_like 'a valid enrollment' | |
let(:user) { CanvasFactory::User.new } | |
end | |
context 'pitted against negative testing, such as' do | |
let(:user) { CanvasFactory::User.new } | |
let(:bad_data) { [0, 'a', "INSERT INTO orders ('total') VALUES ('999.99');"] } | |
it 'should be able to hanlde bad user ids', priority: '1', test_id: 'C1068660' do | |
bad_data.each do |data| | |
expect do | |
CatalogFactory::Enrollment.create!( | |
listing_id: @main_program.id, canvas_user_id: data | |
) | |
end.to raise_exception(RestClient::UnprocessableEntity) | |
end | |
end | |
it 'should be able to handle bad listing ids', priority: '1', test_id: 1068661 do | |
bad_data.each do |data| | |
expect do | |
CatalogFactory::Enrollment.create!( | |
listing_id: data, canvas_user_id: user.id | |
) | |
end.to raise_exception(RestClient::UnprocessableEntity) | |
end | |
end | |
it 'should be able to handle malformatted request bodies', priority: '1', test_id: 1068663 do | |
bad_data.each do |data| | |
expect do | |
CatalogFactory::Enrollment.create!( | |
tacos: data, skis: data | |
) | |
end.to raise_error(ArgumentError) | |
end | |
end | |
it 'should be able to handle non-boolean values for create order (treats them as ruby/rails would)', priority: '1', test_id: 1068664 do | |
bad_data.each do |data| | |
expect do | |
CatalogFactory::Enrollment.create!( | |
{ listing_id: @course_a.id, canvas_user_id: user.id }, create_order: data | |
) | |
end.to raise_error(ArgumentError) | |
end | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment