Skip to content

Instantly share code, notes, and snippets.

@adam-phillipps
Created April 2, 2016 19:02
Show Gist options
  • Save adam-phillipps/9cb11ba3e4169c667681831d54bd9fe2 to your computer and use it in GitHub Desktop.
Save adam-phillipps/9cb11ba3e4169c667681831d54bd9fe2 to your computer and use it in GitHub Desktop.
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