streamer-client
Version:
A node.js client for the Duke OIT Streamer API
165 lines (140 loc) • 4.92 kB
JavaScript
/* global describe */
/* global it */
var assert = require('assert');
var sinon = require('sinon');
var Curriculum = require('../../lib/resources/curriculum');
var Dispatcher = require('../../lib/dispatcher');
var Promise = require('bluebird');
describe('Curriculum', function() {
var getDispatcher = function() {
return new Dispatcher('auth', 'fakeTestValue');
};
var noopGet = function(path) {
return {
then: function(val) { return this; }
};
};
var getNoopDispatcher = function() {
var dispatcher = getDispatcher();
sinon.stub(dispatcher, 'get', noopGet);
return dispatcher;
};
describe('#new', function() {
it('should add the dispatcher to itself', function() {
var dispatcher = sinon.stub();
var curriculum = new Curriculum(dispatcher);
assert.equal(curriculum.dispatcher, dispatcher);
});
});
describe('#terms', function() {
var dispatcher = getNoopDispatcher();
var curriculum = new Curriculum(dispatcher);
it('should call the right endpoint', function() {
var curriculum = new Curriculum(dispatcher);
curriculum.terms();
assert(dispatcher.get.calledWithExactly(
'/curriculum/list_of_values/fieldname/STRM'));
});
sinon.stub(curriculum, '_fieldName', function(val) {
return new Promise(function(resolve, reject) {
resolve([{code: '1', desc: 'desc'}]);
});
});
var terms;
before(function(done) {
curriculum.terms().then(function(vals) {
terms = vals;
done();
});
});
it('should convert code to int', function() {
assert.equal(1, terms.length);
var term = terms[0];
assert.equal(2, Object.keys(term).length);
assert.equal(1, term.code);
assert.equal('desc', term.desc);
});
});
describe('#subjects', function() {
var dispatcher = getNoopDispatcher();
it('should call the right endpoint', function() {
var curriculum = new Curriculum(dispatcher);
curriculum.subjects();
assert(dispatcher.get.calledWithExactly(
'/curriculum/list_of_values/fieldname/SUBJECT'));
});
});
describe('#courses', function() {
var dispatcher = getNoopDispatcher();
var curriculum = new Curriculum(dispatcher);
sinon.stub(curriculum, 'rawCourses', function(subject_code) {
return new Promise(function(resolve, reject) {
resolve([
{
"crse_id": "000064",
"crse_id_lov_descr": null,
"effdt": "2013-01-01",
"crse_offer_nbr": "1",
"institution": "DUKEU",
"institution_lov_descr": "Duke University",
"subject": "AAAS",
"subject_lov_descr": "African and African American S",
"catalog_nbr": " 89S",
"course_title_long": "First-Year Seminar",
"ssr_crse_typoff_cd": "FALL-SPRNG",
"ssr_crse_typoff_cd_lov_descr": "Fall and/or Spring",
"msg_text": null,
"multi_off": "N",
"crs_topic_id": "0",
"course_off_summaries": null
}
]);
});
});
var courses;
before(function(done) {
curriculum.courses('MATH').then(function(vals) {
courses = vals;
done();
});
});
it('should call the right endpoint', function() {
var curriculum = new Curriculum(dispatcher);
curriculum.courses('MATH');
assert(dispatcher.get.calledWithExactly(
'/curriculum/courses/subject/MATH'));
});
it('should call the properly encode subjects in URL', function() {
var curriculum = new Curriculum(dispatcher);
curriculum.courses('AFA@');
assert(dispatcher.get.calledWithExactly(
'/curriculum/courses/subject/AFA%40'));
});
it('should convert certain properties to nums', function() {
assert.equal(1, courses.length);
var course = courses[0];
assert.strictEqual('000064', course.crse_id);
assert.strictEqual(1, course.crse_offer_nbr);
assert.strictEqual(0, course.crs_topic_id);
assert.strictEqual(' 89S', course.catalog_nbr);
});
});
describe('#cls', function() {
var dispatcher = getNoopDispatcher();
it('should call the right endpoint', function() {
var curriculum = new Curriculum(dispatcher);
curriculum.classes('1500', 'MATH', '022022');
assert(dispatcher.get.calledWithExactly(
'/curriculum/classes/strm/1500/crse_id/022022' ));
});
});
describe('#isCourseOffered', function() {
var dispatcher = getNoopDispatcher();
it('should call the right endpoint', function() {
var curriculum = new Curriculum(dispatcher);
curriculum.isCourseOffered('1500', 'MATH', '022022');
assert(dispatcher.get.calledWithExactly(
'/curriculum/classes/strm/1500/crse_id/022022' ));
});
});
});