acorn-api
Version:
University of Toronto Acorn API
85 lines (73 loc) • 3.27 kB
text/typescript
/**
* Created by Charlie on 2017-09-24.
*/
import {expect} from "chai";
import {CourseAcornAPI} from "../src/CourseAcornAPI";
import {BasicAcornAPI} from "../src/BasicAcornAPI";
import {AcornStateManager} from "../src/AcornAPI";
import {AcornError} from '../src/AcornError';
import request = require("request");
import assert = require('assert');
import _ = require("lodash");
import {config, logToFileSync} from "./TestHelper";
require('chai').use(require('chai-as-promised')).should();
describe('CourseAcornAPI', async function () {
this.timeout(15000); // set timeout to be 15s instead of default 2
let basicAPI: BasicAcornAPI;
let courseAPI: CourseAcornAPI;
it('should be created', function () {
const state = new AcornStateManager(request.jar());
basicAPI = new BasicAcornAPI(state);
courseAPI = new CourseAcornAPI(state);
expect(courseAPI).to.not.be.null;
expect(courseAPI.state).to.not.be.undefined;
});
it('should share state with other AcornAPI instances', function () {
expect(courseAPI.state).to.deep.equal(basicAPI.state);
});
/**
* Test for @needLogin decorator
*/
it('should not get registration if not logged in', function () {
courseAPI.getEligibleRegistrations().should.be.rejected;
});
it('should get registration if logged in', async function () {
await basicAPI.login(config.data.user, config.data.pass);
expect(basicAPI.state.isLoggedIn).to.be.true;
let res = await courseAPI.getEligibleRegistrations();
res.should.be.a.instanceof(Array);
(<Array<any>>res)[0].should.haveOwnProperty('registrationParams');
logToFileSync('registrations', res);
});
it('should get enrolled courses if logged in', async function () {
logToFileSync('enrolled_courses', await courseAPI.getEnrolledCourses());
});
let cartedCourse: Acorn.CartedCourse | null = null;
it('should get carted courses if logged in', async function () {
const cartedCourses = await courseAPI.getCartedCourses();
// For later testing use
if (cartedCourses.length > 0) {
cartedCourse = cartedCourses[0];
}
logToFileSync('carted_courses', cartedCourses);
});
// TODO test when course registration is open
// it('should enroll course if logged in', async function () {
// await courseAPI.enroll(0, "CSC467", "F", "LEC,0101");
// });
/**
* To test this part
* The tester's acorn account must have at least one course in enrollment cart
*/
it('should get extra course info if logged in', async function () {
if (cartedCourse === null) {
throw new AcornError('No course in course cart, unable to find extra info');
}
const sessionCodes = _.compact(_.values<string>(_.pick(cartedCourse,
['regSessionCode1', 'regSessionCode2', 'regSessionCode3'])));
assert(sessionCodes.length > 0, 'no session code available'); // need at least one sessionCode
const res = await courseAPI.getExtraCourseInfo(
0, cartedCourse.courseCode, sessionCodes[0], cartedCourse.sectionCode);
logToFileSync('extra_course_info', res);
});
});