UNPKG

@byu-oit/canvas-sdk

Version:

A wrapper around Instructure's Canvas API

174 lines (156 loc) 8.87 kB
'use strict'; const canvas = require('./index')({ // tokens: [ // process.env.TOKEN, // process.env.TOKEN2 // ], token: process.env.TOKEN, subdomain: process.env.SUBDOMAIN, maxSimultaneousRequests: 5 }); const logger = require('./src/utils/logger'); const assert = require('assert'); const uuid = require('uuid'); const ROOT_ACCOUNT_ID = 1; const SIS_ACCOUNT_ID = 'canvas-sdk-test-account'; const ACCOUNT_NAME = 'canvas-SDK Test Account'; const SIS_TERM_ID = 'canvas-sdk-test-term'; const TERM_NAME = 'Canvas-SDK Test Term'; const TERM_LENGTH = 14 * 24 * 60 * 60 * 1000; // 14 days const TERM_START_DATE = new Date(); const TERM_END_DATE = new Date(new Date().getTime() + TERM_LENGTH); const SIS_COURSE_ID = 'canvas-sdk-test-course'; const COURSE_NAME = 'Canvas-SDK Test Course'; const COURSE_CODE = 'Canvas-SDK'; const GRADING_STANDARD_ID = 10; // The BYU A-E Grading Standard const SIS_SECTION_ID = 'canvas-sdk-test-section'; const SECTION_NAME = 'Canvas-SDK Test Section'; const SIS_USER_ID = 'canvas-sdk-test-user'; const SIS_USER_ID2 = SIS_USER_ID + '2'; const NEW_SIS_USER_ID = 'canvas-sdk-test-user-new-id'; const USER_NAME = 'Canvas-SDK Test User'; const USER_EMAIL = 'canvas-sdk@example.com'; const USER_LOGIN_ID = 'canvas-sdk'; main(); async function main() { console.log(`****************** Running tests against ${canvas.baseurl} ******************`); console.log('To see all logs, run with LOG_LEVEL=debug'); /****************** Setup ******************/ const account = await canvas.accounts.add(ACCOUNT_NAME, SIS_ACCOUNT_ID, ROOT_ACCOUNT_ID); const term = await canvas.terms.add(TERM_NAME, TERM_START_DATE, TERM_END_DATE, SIS_TERM_ID, TERM_END_DATE); const course = await canvas.courses.add(COURSE_NAME, COURSE_CODE, SIS_TERM_ID, SIS_COURSE_ID, account.id, GRADING_STANDARD_ID); const section = await canvas.sections.add(SIS_COURSE_ID, SIS_SECTION_ID, SECTION_NAME); const user = await canvas.users.add(USER_NAME, USER_NAME, USER_EMAIL, SIS_USER_ID, USER_LOGIN_ID); const user2 = await canvas.users.add(USER_NAME, USER_NAME, USER_EMAIL, SIS_USER_ID2, USER_LOGIN_ID + '2'); /****************** End Setup ******************/ try { // Accounts assert.ok(await canvas.accounts.exists(SIS_ACCOUNT_ID)); assert.ok(! await canvas.accounts.exists(uuid())); assert.deepStrictEqual(account, await canvas.accounts.get(SIS_ACCOUNT_ID)); assert.strictEqual(account.name, ACCOUNT_NAME); assert.strictEqual(account.sis_account_id, SIS_ACCOUNT_ID); assert.strictEqual(account.parent_account_id, ROOT_ACCOUNT_ID); // FIXME: Try with another account assert.strictEqual(account.root_account_id, ROOT_ACCOUNT_ID); //FIXME: Test canvas.accounts.getAdmins // Terms assert.ok(await canvas.terms.exists(SIS_TERM_ID)); assert.ok(! await canvas.terms.exists(uuid())); assert.deepStrictEqual(term, await canvas.terms.get(SIS_TERM_ID)); assert.strictEqual(term.name, TERM_NAME); assert.strictEqual(term.sis_term_id, SIS_TERM_ID); assert.strictEqual(term.start_at, TERM_START_DATE.toISOString().replace(/[.]\d{3}[Z]$/, 'Z')); assert.strictEqual(term.end_at, TERM_END_DATE.toISOString().replace(/[.]\d{3}[Z]$/, 'Z')); assert.deepStrictEqual(term.overrides, { TeacherEnrollment: { start_at: null, end_at: TERM_END_DATE.toISOString().replace(/[.]\d{3}[Z]$/, 'Z') }, TaEnrollment: { start_at: null, end_at: TERM_END_DATE.toISOString().replace(/[.]\d{3}[Z]$/, 'Z') } }); const terms = await canvas.terms.getAll(); assert.ok(terms.length > 1); // Courses assert.ok(await canvas.courses.exists(SIS_COURSE_ID)); assert.ok(! await canvas.courses.exists(uuid())); assert.ok(await canvas.courses.get(SIS_COURSE_ID)); assert.strictEqual(course.name, COURSE_NAME); assert.strictEqual(course.course_code, COURSE_CODE); assert.strictEqual(course.enrollment_term_id, term.id); assert.strictEqual(course.sis_course_id, SIS_COURSE_ID); assert.strictEqual(course.account_id, account.id); assert.strictEqual(course.grading_standard_id, GRADING_STANDARD_ID); const courses = await canvas.courses.getAllByTerm(SIS_TERM_ID); courses[0].enrollments = []; assert.deepStrictEqual(courses, [await canvas.courses.get(SIS_COURSE_ID)]); await canvas.courses.updateAccount(SIS_COURSE_ID, 1); assert.strictEqual((await canvas.courses.get(SIS_COURSE_ID)).account_id, 1); // Sections assert.ok(await canvas.sections.exists(SIS_SECTION_ID)); assert.ok(! await canvas.sections.exists(uuid())); let sections = await canvas.sections.getAllByTerm(SIS_TERM_ID); assert.strictEqual(sections.length, 1); assert.strictEqual(sections[0].sis_section_id, SIS_SECTION_ID); // Enrollments assert.ok(await canvas.sections.enrollUser(SIS_SECTION_ID, SIS_USER_ID, 'StudentEnrollment', true)); sections = await canvas.sections.getAllByTerm(SIS_TERM_ID); assert.strictEqual(sections[0].students.length, 1); assert.strictEqual((sections[0].students[0].sis_user_id), SIS_USER_ID); const enrollments = await canvas.users.getEnrollments(SIS_USER_ID); assert.strictEqual(enrollments.length, 1); let enrollment = await canvas.sections.getEnrollment(SIS_SECTION_ID, SIS_USER_ID); assert.strictEqual(enrollment.sis_user_id, SIS_USER_ID); enrollment = await canvas.sections.getEnrollment(SIS_SECTION_ID, SIS_USER_ID, 'StudentEnrollment'); assert.strictEqual(enrollment.sis_user_id, SIS_USER_ID); enrollment = await canvas.sections.getEnrollment(SIS_SECTION_ID, SIS_USER_ID, 'TeacherEnrollment'); assert.ok(! enrollment); await canvas.sections.changeEnrollment(SIS_SECTION_ID, SIS_USER_ID, 'deactivate'); enrollment = await canvas.sections.getEnrollment(SIS_SECTION_ID, SIS_USER_ID); assert.strictEqual(enrollment.enrollment_state, 'inactive'); await canvas.sections.changeEnrollment(SIS_SECTION_ID, SIS_USER_ID, 'delete'); assert.ok(! await canvas.sections.isEnrolled(SIS_SECTION_ID, SIS_USER_ID)); assert.ok(await canvas.sections.enrollUser(SIS_SECTION_ID, SIS_USER_ID, 'StudentEnrollment', true)); // Leave the enrollment there to test section deletion with enrollments // Users assert.ok(await canvas.users.exists(SIS_USER_ID)); assert.ok(! await canvas.users.exists(uuid())); const userTmp = await canvas.users.get(SIS_USER_ID); assert.strictEqual(userTmp.id, user.id); assert.strictEqual(userTmp.name, USER_NAME); assert.strictEqual(userTmp.sortable_name, USER_NAME); assert.strictEqual(userTmp.short_name, USER_NAME); assert.strictEqual(userTmp.sis_user_id, SIS_USER_ID); assert.strictEqual(userTmp.login_id, USER_LOGIN_ID); assert.strictEqual(userTmp.email, USER_EMAIL); assert.strictEqual((await canvas.users.getById(user.id)).sis_user_id, SIS_USER_ID); await canvas.users.setSisId(user.id, NEW_SIS_USER_ID); assert.strictEqual(NEW_SIS_USER_ID, (await canvas.users.getById(user.id)).sis_user_id); await canvas.users.setSisIdByLoginId(USER_LOGIN_ID, SIS_USER_ID); assert.strictEqual(SIS_USER_ID, (await canvas.users.getById(user.id)).sis_user_id); // Observers assert.ok(await canvas.users.addObservee(SIS_USER_ID, SIS_USER_ID2)); let observees = await canvas.users.listObservees(SIS_USER_ID); assert.strictEqual(observees.length, 1); assert.strictEqual(observees[0].sis_user_id, SIS_USER_ID2); await canvas.users.deleteObservee(SIS_USER_ID, SIS_USER_ID2); observees = await canvas.users.listObservees(SIS_USER_ID); assert.strictEqual(observees.length, 0); await canvas.users.addObservee(SIS_USER_ID, SIS_USER_ID2); observees = await canvas.users.listObservees(SIS_USER_ID); assert.strictEqual(observees.length, 1); await canvas.users.deleteAllObservees(SIS_USER_ID); observees = await canvas.users.listObservees(SIS_USER_ID); assert.strictEqual(observees.length, 0); } catch(e) { console.error(e); } /****************** Cleanup ******************/ await canvas.sections.delete(SIS_SECTION_ID); await canvas.courses.delete(SIS_COURSE_ID); await canvas.terms.delete(SIS_TERM_ID); await canvas.accounts.delete(SIS_ACCOUNT_ID); /****************** End Cleanup ******************/ console.log(`****************** Tests Completed ******************`); }