UNPKG

streamer-client

Version:

A node.js client for the Duke OIT Streamer API

165 lines (140 loc) 4.92 kB
/* 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' )); }); }); });