@ueu/ueu-canvas 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Account.d.ts +22 -0
- package/dist/Account.d.ts.map +1 -0
- package/dist/NotImplementedException.d.ts +4 -0
- package/dist/NotImplementedException.d.ts.map +1 -0
- package/dist/__mocks__/Account.d.ts +17 -0
- package/dist/__mocks__/Account.d.ts.map +1 -0
- package/dist/__mocks__/index.d.ts +9 -0
- package/dist/__mocks__/index.d.ts.map +1 -0
- package/dist/__mocks__/mockAccountData.d.ts +6 -0
- package/dist/__mocks__/mockAccountData.d.ts.map +1 -0
- package/dist/__mocks__/mockEnrollment.d.ts +3 -0
- package/dist/__mocks__/mockEnrollment.d.ts.map +1 -0
- package/dist/__mocks__/mockRubricData.d.ts +20 -0
- package/dist/__mocks__/mockRubricData.d.ts.map +1 -0
- package/dist/__mocks__/mockTabData.d.ts +4 -0
- package/dist/__mocks__/mockTabData.d.ts.map +1 -0
- package/dist/__mocks__/mockTermData.d.ts +3 -0
- package/dist/__mocks__/mockTermData.d.ts.map +1 -0
- package/dist/__mocks__/mockUserData.d.ts +3 -0
- package/dist/__mocks__/mockUserData.d.ts.map +1 -0
- package/dist/__mocks__/utils.d.ts +3 -0
- package/dist/__mocks__/utils.d.ts.map +1 -0
- package/dist/__tests__/canvasUtils.test.d.ts +2 -0
- package/dist/__tests__/canvasUtils.test.d.ts.map +1 -0
- package/dist/__tests__/fetch.test.d.ts +2 -0
- package/dist/__tests__/fetch.test.d.ts.map +1 -0
- package/dist/__tests__/profile.test.d.ts +2 -0
- package/dist/__tests__/profile.test.d.ts.map +1 -0
- package/dist/__tests__/rubrics.test.d.ts +2 -0
- package/dist/__tests__/rubrics.test.d.ts.map +1 -0
- package/dist/baseCanvasObject.d.ts +41 -0
- package/dist/baseCanvasObject.d.ts.map +1 -0
- package/dist/canvasDataDefs.d.ts +97 -0
- package/dist/canvasDataDefs.d.ts.map +1 -0
- package/dist/canvasUtils.d.ts +65 -0
- package/dist/canvasUtils.d.ts.map +1 -0
- package/dist/consts.d.ts +3 -0
- package/dist/consts.d.ts.map +1 -0
- package/dist/content/BaseContentItem.d.ts +32 -0
- package/dist/content/BaseContentItem.d.ts.map +1 -0
- package/dist/content/ContentKind.d.ts +28 -0
- package/dist/content/ContentKind.d.ts.map +1 -0
- package/dist/content/__mocks__/determineContent.d.ts +65 -0
- package/dist/content/__mocks__/determineContent.d.ts.map +1 -0
- package/dist/content/__mocks__/mockAssignmentSubmission.d.ts +4 -0
- package/dist/content/__mocks__/mockAssignmentSubmission.d.ts.map +1 -0
- package/dist/content/__mocks__/mockContentData.d.ts +8 -0
- package/dist/content/__mocks__/mockContentData.d.ts.map +1 -0
- package/dist/content/__mocks__/openThisContentInTarget.d.ts +3 -0
- package/dist/content/__mocks__/openThisContentInTarget.d.ts.map +1 -0
- package/dist/content/__testingUtils__/utils.d.ts +6 -0
- package/dist/content/__testingUtils__/utils.d.ts.map +1 -0
- package/dist/content/__tests__/determineContent.test.d.ts +2 -0
- package/dist/content/__tests__/determineContent.test.d.ts.map +1 -0
- package/dist/content/__tests__/getContentFuncs.test.d.ts +2 -0
- package/dist/content/__tests__/getContentFuncs.test.d.ts.map +1 -0
- package/dist/content/assignments/Assignment.d.ts +15 -0
- package/dist/content/assignments/Assignment.d.ts.map +1 -0
- package/dist/content/assignments/AssignmentKind.d.ts +14 -0
- package/dist/content/assignments/AssignmentKind.d.ts.map +1 -0
- package/dist/content/assignments/__tests__/AssignmentKind.test.d.ts +2 -0
- package/dist/content/assignments/__tests__/AssignmentKind.test.d.ts.map +1 -0
- package/dist/content/assignments/__tests__/assignments.test.d.ts +2 -0
- package/dist/content/assignments/__tests__/assignments.test.d.ts.map +1 -0
- package/dist/content/assignments/deleteAssignmentGroup.d.ts +2 -0
- package/dist/content/assignments/deleteAssignmentGroup.d.ts.map +1 -0
- package/dist/content/assignments/genAssignmentGroups.d.ts +4 -0
- package/dist/content/assignments/genAssignmentGroups.d.ts.map +1 -0
- package/dist/content/assignments/index.d.ts +11 -0
- package/dist/content/assignments/index.d.ts.map +1 -0
- package/dist/content/assignments/legacy.d.ts +4 -0
- package/dist/content/assignments/legacy.d.ts.map +1 -0
- package/dist/content/assignments/updateAssignmentDueDates.d.ts +7 -0
- package/dist/content/assignments/updateAssignmentDueDates.d.ts.map +1 -0
- package/dist/content/determineContent.d.ts +19 -0
- package/dist/content/determineContent.d.ts.map +1 -0
- package/dist/content/discussions/Discussion.d.ts +13 -0
- package/dist/content/discussions/Discussion.d.ts.map +1 -0
- package/dist/content/discussions/DiscussionKind.d.ts +14 -0
- package/dist/content/discussions/DiscussionKind.d.ts.map +1 -0
- package/dist/content/discussions/__tests__/DiscussionKind.test.d.ts +2 -0
- package/dist/content/discussions/__tests__/DiscussionKind.test.d.ts.map +1 -0
- package/dist/content/discussions/genEquivalentDiscussionData.d.ts +32 -0
- package/dist/content/discussions/genEquivalentDiscussionData.d.ts.map +1 -0
- package/{src/content/discussions/index.ts → dist/content/discussions/index.d.ts} +1 -0
- package/dist/content/discussions/index.d.ts.map +1 -0
- package/dist/content/getContentFuncs.d.ts +3 -0
- package/dist/content/getContentFuncs.d.ts.map +1 -0
- package/{src/content/index.ts → dist/content/index.d.ts} +3 -3
- package/dist/content/index.d.ts.map +1 -0
- package/dist/content/openThisContentInTarget.d.ts +3 -0
- package/dist/content/openThisContentInTarget.d.ts.map +1 -0
- package/dist/content/pages/Page.d.ts +15 -0
- package/dist/content/pages/Page.d.ts.map +1 -0
- package/dist/content/pages/PageKind.d.ts +15 -0
- package/dist/content/pages/PageKind.d.ts.map +1 -0
- package/dist/content/pages/__tests__/PageKind.test.d.ts +2 -0
- package/dist/content/pages/__tests__/PageKind.test.d.ts.map +1 -0
- package/dist/content/pages/__tests__/learningMaterialsForModule.d.ts +2 -0
- package/dist/content/pages/__tests__/learningMaterialsForModule.d.ts.map +1 -0
- package/dist/content/pages/index.d.ts +10 -0
- package/dist/content/pages/index.d.ts.map +1 -0
- package/dist/content/pages/learningMaterialsForModule.d.ts +7 -0
- package/dist/content/pages/learningMaterialsForModule.d.ts.map +1 -0
- package/dist/content/pages/types.d.ts +11 -0
- package/dist/content/pages/types.d.ts.map +1 -0
- package/dist/content/quizzes/Quiz.d.ts +9 -0
- package/dist/content/quizzes/Quiz.d.ts.map +1 -0
- package/dist/content/quizzes/QuizKind.d.ts +13 -0
- package/dist/content/quizzes/QuizKind.d.ts.map +1 -0
- package/dist/content/quizzes/__tests__/QuizKind.test.d.ts +2 -0
- package/dist/content/quizzes/__tests__/QuizKind.test.d.ts.map +1 -0
- package/dist/content/quizzes/index.d.ts +2 -0
- package/dist/content/quizzes/index.d.ts.map +1 -0
- package/dist/content/quizzes/types.d.ts +45 -0
- package/dist/content/quizzes/types.d.ts.map +1 -0
- package/dist/content/types.d.ts +229 -0
- package/dist/content/types.d.ts.map +1 -0
- package/dist/course/Course.d.ts +87 -0
- package/dist/course/Course.d.ts.map +1 -0
- package/dist/course/IBlueprintCourse.d.ts +7 -0
- package/dist/course/IBlueprintCourse.d.ts.map +1 -0
- package/dist/course/__mocks__/blueprint.d.ts +14 -0
- package/dist/course/__mocks__/blueprint.d.ts.map +1 -0
- package/dist/course/__mocks__/mockCourseData.d.ts +3 -0
- package/dist/course/__mocks__/mockCourseData.d.ts.map +1 -0
- package/dist/course/__mocks__/mockLatePolicy.d.ts +4 -0
- package/dist/course/__mocks__/mockLatePolicy.d.ts.map +1 -0
- package/dist/course/__mocks__/mockModuleData.d.ts +7 -0
- package/dist/course/__mocks__/mockModuleData.d.ts.map +1 -0
- package/dist/course/__mocks__/mockProgressData.d.ts +3 -0
- package/dist/course/__mocks__/mockProgressData.d.ts.map +1 -0
- package/dist/course/__tests__/Course.test.d.ts +2 -0
- package/dist/course/__tests__/Course.test.d.ts.map +1 -0
- package/dist/course/__tests__/blueprint.test.d.ts +2 -0
- package/dist/course/__tests__/blueprint.test.d.ts.map +1 -0
- package/dist/course/__tests__/changeStartDate.test.d.ts +2 -0
- package/dist/course/__tests__/changeStartDate.test.d.ts.map +1 -0
- package/dist/course/__tests__/index.test.d.ts +2 -0
- package/dist/course/__tests__/index.test.d.ts.map +1 -0
- package/dist/course/blueprint.d.ts +21 -0
- package/dist/course/blueprint.d.ts.map +1 -0
- package/dist/course/cachedGetAssociatedCoursesFunc.d.ts +4 -0
- package/dist/course/cachedGetAssociatedCoursesFunc.d.ts.map +1 -0
- package/dist/course/changeStartDate.d.ts +25 -0
- package/dist/course/changeStartDate.d.ts.map +1 -0
- package/dist/course/code.d.ts +9 -0
- package/dist/course/code.d.ts.map +1 -0
- package/dist/course/courseTypes.d.ts +102 -0
- package/dist/course/courseTypes.d.ts.map +1 -0
- package/dist/course/getCourseIdFromUrl.d.ts +2 -0
- package/dist/course/getCourseIdFromUrl.d.ts.map +1 -0
- package/dist/course/getSections.d.ts +5 -0
- package/dist/course/getSections.d.ts.map +1 -0
- package/dist/course/getTermNameFromSections.d.ts +3 -0
- package/dist/course/getTermNameFromSections.d.ts.map +1 -0
- package/dist/course/index.d.ts +12 -0
- package/dist/course/index.d.ts.map +1 -0
- package/dist/course/migration/__mocks__/mockMigrationData.d.ts +6 -0
- package/dist/course/migration/__mocks__/mockMigrationData.d.ts.map +1 -0
- package/dist/course/migration/__tests__/migration.test.d.ts +2 -0
- package/dist/course/migration/__tests__/migration.test.d.ts.map +1 -0
- package/dist/course/migration/__tests__/migrationCache.test.d.ts +2 -0
- package/dist/course/migration/__tests__/migrationCache.test.d.ts.map +1 -0
- package/dist/course/migration/index.d.ts +47 -0
- package/dist/course/migration/index.d.ts.map +1 -0
- package/dist/course/migration/migrationCache.d.ts +12 -0
- package/dist/course/migration/migrationCache.d.ts.map +1 -0
- package/dist/course/modules.d.ts +35 -0
- package/dist/course/modules.d.ts.map +1 -0
- package/dist/course/notABlueprintError.d.ts +4 -0
- package/dist/course/notABlueprintError.d.ts.map +1 -0
- package/dist/course/references/getReferencesForText.d.ts +3 -0
- package/dist/course/references/getReferencesForText.d.ts.map +1 -0
- package/dist/course/references/getReferencesForText.test.d.ts +2 -0
- package/dist/course/references/getReferencesForText.test.d.ts.map +1 -0
- package/dist/course/references/getReferencesTemplate.d.ts +13 -0
- package/dist/course/references/getReferencesTemplate.d.ts.map +1 -0
- package/dist/course/references/mockCiteAsResponse.d.ts +127 -0
- package/dist/course/references/mockCiteAsResponse.d.ts.map +1 -0
- package/dist/course/retireBlueprint.d.ts +4 -0
- package/dist/course/retireBlueprint.d.ts.map +1 -0
- package/dist/course/toolbox.d.ts +18 -0
- package/dist/course/toolbox.d.ts.map +1 -0
- package/dist/date.d.ts +18 -0
- package/dist/date.d.ts.map +1 -0
- package/dist/enrollments/EnrollmentTypes.d.ts +60 -0
- package/dist/enrollments/EnrollmentTypes.d.ts.map +1 -0
- package/dist/enrollments/enrollmentRole.d.ts +5 -0
- package/dist/enrollments/enrollmentRole.d.ts.map +1 -0
- package/dist/enrollments/getEnrollmentGenerator.d.ts +40 -0
- package/dist/enrollments/getEnrollmentGenerator.d.ts.map +1 -0
- package/dist/enrollments/index.d.ts +4 -0
- package/dist/enrollments/index.d.ts.map +1 -0
- package/dist/fetch/__mocks__/fetchJson.d.ts +4 -0
- package/dist/fetch/__mocks__/fetchJson.d.ts.map +1 -0
- package/dist/fetch/__mocks__/getPagedDataGenerator.d.ts +4 -0
- package/dist/fetch/__mocks__/getPagedDataGenerator.d.ts.map +1 -0
- package/dist/fetch/__mocks__/index.d.ts +4 -0
- package/dist/fetch/__mocks__/index.d.ts.map +1 -0
- package/dist/fetch/apiGetConfig.d.ts +4 -0
- package/dist/fetch/apiGetConfig.d.ts.map +1 -0
- package/dist/fetch/apiWriteConfig.d.ts +4 -0
- package/dist/fetch/apiWriteConfig.d.ts.map +1 -0
- package/dist/fetch/canvasDataFetchGenFunc.d.ts +6 -0
- package/dist/fetch/canvasDataFetchGenFunc.d.ts.map +1 -0
- package/dist/fetch/fetchJson.d.ts +3 -0
- package/dist/fetch/fetchJson.d.ts.map +1 -0
- package/dist/fetch/getPagedDataGenerator.d.ts +63 -0
- package/dist/fetch/getPagedDataGenerator.d.ts.map +1 -0
- package/{src/fetch/index.ts → dist/fetch/index.d.ts} +1 -0
- package/dist/fetch/index.d.ts.map +1 -0
- package/dist/fetch/utils.d.ts +4 -0
- package/dist/fetch/utils.d.ts.map +1 -0
- package/dist/files.d.ts +29 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/fixes/annotations.d.ts +15 -0
- package/dist/fixes/annotations.d.ts.map +1 -0
- package/dist/fixes/index.d.ts +36 -0
- package/dist/fixes/index.d.ts.map +1 -0
- package/{src/index.ts → dist/index.d.ts} +5 -10
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8929 -0
- package/dist/profile.d.ts +24 -0
- package/dist/profile.d.ts.map +1 -0
- package/dist/rubricTypes.d.ts +71 -0
- package/dist/rubricTypes.d.ts.map +1 -0
- package/dist/rubrics.d.ts +9 -0
- package/dist/rubrics.d.ts.map +1 -0
- package/dist/term/Term.d.ts +21 -0
- package/dist/term/Term.d.ts.map +1 -0
- package/dist/term/__tests__/dateFromTermName.test.d.ts +2 -0
- package/dist/term/__tests__/dateFromTermName.test.d.ts.map +1 -0
- package/dist/term/__tests__/getTermsGenerator.test.d.ts +2 -0
- package/dist/term/__tests__/getTermsGenerator.test.d.ts.map +1 -0
- package/dist/term/dateFromTermName.d.ts +4 -0
- package/dist/term/dateFromTermName.d.ts.map +1 -0
- package/dist/term/getTermsGenerator.d.ts +7 -0
- package/dist/term/getTermsGenerator.d.ts.map +1 -0
- package/dist/term/index.d.ts +4 -0
- package/dist/term/index.d.ts.map +1 -0
- package/dist/toolbox.d.ts +5 -0
- package/dist/toolbox.d.ts.map +1 -0
- package/dist/types.d.ts +120 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/users/getUserGenerator.d.ts +19 -0
- package/dist/users/getUserGenerator.d.ts.map +1 -0
- package/dist/users/index.d.ts +2 -0
- package/dist/users/index.d.ts.map +1 -0
- package/package.json +49 -45
- package/LICENSE +0 -21
- package/html-loader.js +0 -7
- package/jest.config.js +0 -20
- package/src/Account.ts +0 -69
- package/src/NotImplementedException.ts +0 -3
- package/src/__mocks__/Account.ts +0 -55
- package/src/__mocks__/index.ts +0 -8
- package/src/__mocks__/mockAccountData.ts +0 -43
- package/src/__mocks__/mockEnrollment.ts +0 -22
- package/src/__mocks__/mockRubricData.ts +0 -71
- package/src/__mocks__/mockTabData.ts +0 -13
- package/src/__mocks__/mockTermData.ts +0 -7
- package/src/__mocks__/mockUserData.ts +0 -14
- package/src/__mocks__/utils.ts +0 -9
- package/src/__tests__/canvasUtils.test.ts +0 -527
- package/src/__tests__/fetch.test.ts +0 -310
- package/src/__tests__/profile.test.ts +0 -19
- package/src/__tests__/rubrics.test.ts +0 -131
- package/src/baseCanvasObject.ts +0 -139
- package/src/canvasDataDefs.ts +0 -124
- package/src/canvasUtils.ts +0 -420
- package/src/consts.ts +0 -2
- package/src/content/BaseContentItem.ts +0 -219
- package/src/content/ContentKind.ts +0 -85
- package/src/content/__mocks__/determineContent.ts +0 -27
- package/src/content/__mocks__/mockAssignmentSubmission.ts +0 -37
- package/src/content/__mocks__/mockContentData.ts +0 -98
- package/src/content/__mocks__/openThisContentInTarget.ts +0 -2
- package/src/content/__testingUtils__/utils.ts +0 -47
- package/src/content/__tests__/determineContent.test.ts +0 -101
- package/src/content/__tests__/getContentFuncs.test.ts +0 -78
- package/src/content/assignments/Assignment.ts +0 -69
- package/src/content/assignments/AssignmentKind.ts +0 -29
- package/src/content/assignments/__tests__/AssignmentKind.test.ts +0 -31
- package/src/content/assignments/__tests__/assignments.test.ts +0 -72
- package/src/content/assignments/deleteAssignmentGroup.ts +0 -15
- package/src/content/assignments/genAssignmentGroups.ts +0 -15
- package/src/content/assignments/index.ts +0 -31
- package/src/content/assignments/legacy.ts +0 -11
- package/src/content/assignments/updateAssignmentDueDates.ts +0 -25
- package/src/content/determineContent.ts +0 -72
- package/src/content/discussions/Discussion.ts +0 -32
- package/src/content/discussions/DiscussionKind.ts +0 -30
- package/src/content/discussions/__tests__/DiscussionKind.test.ts +0 -31
- package/src/content/discussions/genEquivalentDiscussionData.ts +0 -97
- package/src/content/getContentFuncs.ts +0 -30
- package/src/content/openThisContentInTarget.ts +0 -38
- package/src/content/pages/Page.ts +0 -35
- package/src/content/pages/PageKind.ts +0 -39
- package/src/content/pages/__tests__/PageKind.test.ts +0 -86
- package/src/content/pages/__tests__/learningMaterialsForModule.ts +0 -57
- package/src/content/pages/index.ts +0 -12
- package/src/content/pages/learningMaterialsForModule.ts +0 -16
- package/src/content/pages/types.ts +0 -11
- package/src/content/quizzes/Quiz.ts +0 -25
- package/src/content/quizzes/QuizKind.ts +0 -23
- package/src/content/quizzes/__tests__/QuizKind.test.ts +0 -30
- package/src/content/quizzes/index.ts +0 -3
- package/src/content/quizzes/types.ts +0 -101
- package/src/content/types.ts +0 -302
- package/src/course/Course.ts +0 -538
- package/src/course/IBlueprintCourse.ts +0 -8
- package/src/course/__mocks__/blueprint.ts +0 -31
- package/src/course/__mocks__/mockCourseData.ts +0 -49
- package/src/course/__mocks__/mockLatePolicy.ts +0 -14
- package/src/course/__mocks__/mockModuleData.ts +0 -60
- package/src/course/__mocks__/mockProgressData.ts +0 -28
- package/src/course/__mocks__/syllabus.gallant.html +0 -302
- package/src/course/__mocks__/syllabus.goofus.html +0 -288
- package/src/course/__mocks__/syllabus.grad.html +0 -282
- package/src/course/__tests__/Course.test.ts +0 -91
- package/src/course/__tests__/blueprint.test.ts +0 -292
- package/src/course/__tests__/changeStartDate.test.ts +0 -180
- package/src/course/__tests__/index.test.ts +0 -104
- package/src/course/blueprint.ts +0 -116
- package/src/course/cachedGetAssociatedCoursesFunc.ts +0 -13
- package/src/course/changeStartDate.ts +0 -139
- package/src/course/code.ts +0 -32
- package/src/course/courseTypes.ts +0 -161
- package/src/course/getCourseIdFromUrl.ts +0 -7
- package/src/course/getSections.ts +0 -9
- package/src/course/getTermNameFromSections.ts +0 -9
- package/src/course/index.ts +0 -12
- package/src/course/migration/__mocks__/mockMigrationData.ts +0 -39
- package/src/course/migration/__tests__/migration.test.ts +0 -173
- package/src/course/migration/__tests__/migrationCache.test.ts +0 -45
- package/src/course/migration/index.ts +0 -134
- package/src/course/migration/migrationCache.ts +0 -56
- package/src/course/modules.ts +0 -113
- package/src/course/notABlueprintError.ts +0 -3
- package/src/course/references/getReferencesForText.test.ts +0 -18
- package/src/course/references/getReferencesForText.ts +0 -12
- package/src/course/references/getReferencesTemplate.ts +0 -28
- package/src/course/references/mockCiteAsResponse.ts +0 -320
- package/src/course/retireBlueprint.ts +0 -21
- package/src/course/toolbox.ts +0 -107
- package/src/date.ts +0 -119
- package/src/enrollments/EnrollmentTypes.ts +0 -76
- package/src/enrollments/enrollmentRole.ts +0 -6
- package/src/enrollments/getEnrollmentGenerator.ts +0 -79
- package/src/enrollments/index.ts +0 -3
- package/src/fetch/__mocks__/fetchJson.ts +0 -1
- package/src/fetch/__mocks__/getPagedDataGenerator.ts +0 -8
- package/src/fetch/__mocks__/index.ts +0 -6
- package/src/fetch/apiGetConfig.ts +0 -10
- package/src/fetch/apiWriteConfig.ts +0 -13
- package/src/fetch/canvasDataFetchGenFunc.ts +0 -20
- package/src/fetch/fetchJson.ts +0 -22
- package/src/fetch/getPagedDataGenerator.ts +0 -157
- package/src/fetch/utils.ts +0 -16
- package/src/files.ts +0 -60
- package/src/fixes/annotations.ts +0 -105
- package/src/fixes/index.ts +0 -81
- package/src/profile.ts +0 -253
- package/src/rubricTypes.ts +0 -82
- package/src/rubrics.ts +0 -48
- package/src/term/Term.ts +0 -77
- package/src/term/__tests__/dateFromTermName.test.ts +0 -22
- package/src/term/__tests__/getTermsGenerator.test.ts +0 -24
- package/src/term/dateFromTermName.ts +0 -17
- package/src/term/getTermsGenerator.ts +0 -21
- package/src/term/index.ts +0 -3
- package/src/toolbox.ts +0 -19
- package/src/types.ts +0 -134
- package/src/users/getUserGenerator.ts +0 -39
- package/src/users/index.ts +0 -1
- package/tsconfig.json +0 -46
- package/webpack.config.js +0 -122
|
@@ -1,310 +0,0 @@
|
|
|
1
|
-
import {deepObjectMerge, ICanvasCallConfig, queryStringify, range, renderAsyncGen} from "../canvasUtils";
|
|
2
|
-
import {describe, expect} from "@jest/globals";
|
|
3
|
-
import {CanvasData} from "../canvasDataDefs";
|
|
4
|
-
import {getPagedDataGenerator} from "@/fetch/getPagedDataGenerator";
|
|
5
|
-
import {fetchGetConfig} from "@/fetch/utils";
|
|
6
|
-
import {fetchJson} from "@/fetch/fetchJson";
|
|
7
|
-
import {canvasDataFetchGenFunc} from "@/fetch/canvasDataFetchGenFunc";
|
|
8
|
-
|
|
9
|
-
global.fetch = jest.fn();
|
|
10
|
-
const fetchMock = fetch as jest.Mock;
|
|
11
|
-
|
|
12
|
-
describe('renderAsyncGen renders an async generator out', () => {
|
|
13
|
-
const entries = range(0, 20);
|
|
14
|
-
it('render async generator', async () => {
|
|
15
|
-
const asyncGen = async function* () {
|
|
16
|
-
for (const i of [...entries]) {
|
|
17
|
-
yield i;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
const entryIterator = range(0, 20);
|
|
21
|
-
for (const result of await renderAsyncGen(asyncGen())) {
|
|
22
|
-
expect(result).toEqual(entryIterator.next().value)
|
|
23
|
-
}
|
|
24
|
-
})
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
describe('canvasDataFetchGenFunc', () => {
|
|
28
|
-
type Goober = {
|
|
29
|
-
name: string,
|
|
30
|
-
courseId: number,
|
|
31
|
-
gooberId: number,
|
|
32
|
-
} & CanvasData
|
|
33
|
-
const config: ICanvasCallConfig = {fetchInit: {}};
|
|
34
|
-
const goobers: Goober[] = [...range(0, 10)].map(i => ({name: 'thistle', courseId: i, gooberId: i}));
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
it('successfully generates urls and results', async () => {
|
|
38
|
-
const fetchGoobersGen = canvasDataFetchGenFunc<Goober, { courseId: number, gooberId: number }>(({
|
|
39
|
-
courseId,
|
|
40
|
-
gooberId
|
|
41
|
-
}) => `/api/v1/${courseId}/${gooberId}`);
|
|
42
|
-
for (let i = 0; i < 10; i++) {
|
|
43
|
-
expect(fetchMock).toBeCalledTimes(i);
|
|
44
|
-
const expectedFetchResult = [goobers[i]];
|
|
45
|
-
fetchMock.mockResolvedValue({
|
|
46
|
-
json: async () => expectedFetchResult
|
|
47
|
-
})
|
|
48
|
-
const getGoobers = fetchGoobersGen({courseId: i, gooberId: i * 2}, config);
|
|
49
|
-
const {value} = await getGoobers.next();
|
|
50
|
-
expect(fetchMock).toHaveBeenCalledWith(`/api/v1/${i}/${i * 2}`, config.fetchInit)
|
|
51
|
-
expect(value).toEqual(goobers[i]);
|
|
52
|
-
}
|
|
53
|
-
})
|
|
54
|
-
})
|
|
55
|
-
|
|
56
|
-
describe('fetchJson', () => {
|
|
57
|
-
const testData = {a: 1, b: 2, c: 3};
|
|
58
|
-
|
|
59
|
-
it('rejects relative paths', async () => {
|
|
60
|
-
await expect(async () => await fetchJson('apple/dumpling/gang')).rejects.toThrow()
|
|
61
|
-
})
|
|
62
|
-
it('accepts paths starting with /', async () => {
|
|
63
|
-
fetchMock.mockResolvedValue({json: async () => testData})
|
|
64
|
-
expect(await fetchJson('/apple/dumpling/gang')).toEqual(testData)
|
|
65
|
-
})
|
|
66
|
-
it('accepts paths starting with http, http, ftp', async () => {
|
|
67
|
-
fetchMock.mockResolvedValue({json: async () => testData})
|
|
68
|
-
expect(await fetchJson('http://localhost:8080/apple/dumpling/gang')).toEqual(testData)
|
|
69
|
-
fetchMock.mockResolvedValue({json: async () => testData})
|
|
70
|
-
expect(await fetchJson('https://localhost:8080/apple/dumpling/gang')).toEqual(testData)
|
|
71
|
-
fetchMock.mockResolvedValue({json: async () => testData})
|
|
72
|
-
expect(await fetchJson('ftp://localhost:8080/apple/dumpling/gang')).toEqual(testData)
|
|
73
|
-
})
|
|
74
|
-
|
|
75
|
-
it('incorporatesQueryParams', async () => {
|
|
76
|
-
fetchMock.mockReturnValue({json: async () => testData});
|
|
77
|
-
const fetchInit: RequestInit = {method: 'PUT'};
|
|
78
|
-
await fetchJson('/url', {
|
|
79
|
-
queryParams: {
|
|
80
|
-
query: 'test'
|
|
81
|
-
},
|
|
82
|
-
fetchInit,
|
|
83
|
-
});
|
|
84
|
-
expect(fetchMock).toHaveBeenCalledWith('/url?query=test', fetchInit)
|
|
85
|
-
|
|
86
|
-
})
|
|
87
|
-
})
|
|
88
|
-
|
|
89
|
-
describe('fetchGetConfig', () => {
|
|
90
|
-
beforeEach(() => {
|
|
91
|
-
jest.clearAllMocks();
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
it('should merge the options in', () => {
|
|
95
|
-
const options = {param1: 'value1'};
|
|
96
|
-
const baseConfig = {queryParams: {a: '1'}};
|
|
97
|
-
|
|
98
|
-
const config = fetchGetConfig<Record<string, any>>(options, baseConfig);
|
|
99
|
-
|
|
100
|
-
expect(config).toEqual(deepObjectMerge<Record<string, any>>({queryParams: options}, baseConfig))
|
|
101
|
-
});
|
|
102
|
-
})
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
describe('getPagedDataGenerator', () => {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
beforeEach(() => {
|
|
109
|
-
jest.clearAllMocks();
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
it('should append queryParams to the URL if provided', async () => {
|
|
113
|
-
const mockUrl = 'http://example.com/api/data';
|
|
114
|
-
const mockConfig: ICanvasCallConfig = {
|
|
115
|
-
queryParams: {key1: 'value1', key2: 'value2'},
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
const mockData = [{id: 1}, {id: 2}];
|
|
119
|
-
fetchMock.mockResolvedValue({
|
|
120
|
-
json: jest.fn().mockResolvedValue(mockData),
|
|
121
|
-
headers: new Headers({}),
|
|
122
|
-
ok: true,
|
|
123
|
-
} as any);
|
|
124
|
-
|
|
125
|
-
const urlWithParams = `${mockUrl}?key1=value1&key2=value2`;
|
|
126
|
-
|
|
127
|
-
const generator = getPagedDataGenerator<CanvasData>(mockUrl, mockConfig);
|
|
128
|
-
await generator.next();
|
|
129
|
-
|
|
130
|
-
expect(fetchMock).toHaveBeenCalledWith(urlWithParams, mockConfig.fetchInit);
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
it('should yield data from the response', async () => {
|
|
134
|
-
const mockUrl = 'http://example.com/api/data';
|
|
135
|
-
const mockData = [{id: 1}, {id: 2}];
|
|
136
|
-
fetchMock.mockResolvedValue({
|
|
137
|
-
json: jest.fn().mockResolvedValue(mockData),
|
|
138
|
-
headers: new Headers({}),
|
|
139
|
-
ok: true,
|
|
140
|
-
} as any);
|
|
141
|
-
|
|
142
|
-
const generator = getPagedDataGenerator<CanvasData>(mockUrl);
|
|
143
|
-
|
|
144
|
-
const result1 = await generator.next();
|
|
145
|
-
const result2 = await generator.next();
|
|
146
|
-
|
|
147
|
-
expect(result1.value).toEqual({id: 1});
|
|
148
|
-
expect(result2.value).toEqual({id: 2});
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
it('should handle paginated responses', async () => {
|
|
152
|
-
const mockUrl = 'http://example.com/api/data';
|
|
153
|
-
const mockDataPage1 = [{id: 1}, {id: 2}];
|
|
154
|
-
const mockDataPage2 = [{id: 3}, {id: 4}];
|
|
155
|
-
const nextLink = '<http://example.com/api/data?page=2>; rel="next"';
|
|
156
|
-
|
|
157
|
-
fetchMock
|
|
158
|
-
.mockResolvedValueOnce({
|
|
159
|
-
json: jest.fn().mockResolvedValue(mockDataPage1),
|
|
160
|
-
headers: new Headers({Link: nextLink}),
|
|
161
|
-
ok: true,
|
|
162
|
-
} as any)
|
|
163
|
-
.mockResolvedValueOnce({
|
|
164
|
-
json: jest.fn().mockResolvedValue(mockDataPage2),
|
|
165
|
-
headers: new Headers({}),
|
|
166
|
-
ok: true,
|
|
167
|
-
} as any);
|
|
168
|
-
|
|
169
|
-
const generator = getPagedDataGenerator<CanvasData>(mockUrl);
|
|
170
|
-
|
|
171
|
-
const result1 = await generator.next();
|
|
172
|
-
const result2 = await generator.next();
|
|
173
|
-
const result3 = await generator.next();
|
|
174
|
-
const result4 = await generator.next();
|
|
175
|
-
|
|
176
|
-
expect([
|
|
177
|
-
result1,
|
|
178
|
-
result2,
|
|
179
|
-
result3,
|
|
180
|
-
result4,
|
|
181
|
-
].map(a => a.value.id)).toEqual(
|
|
182
|
-
[1, 2, 3, 4]
|
|
183
|
-
)
|
|
184
|
-
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
it('should log a warning if the URL contains "undefined"', async () => {
|
|
188
|
-
const mockUrl = 'http://example.com/api/data/undefined';
|
|
189
|
-
const consoleWarnSpy = jest.spyOn(console, 'warn').mockImplementation();
|
|
190
|
-
|
|
191
|
-
const mockData = [{id: 1}];
|
|
192
|
-
fetchMock.mockResolvedValue({
|
|
193
|
-
json: jest.fn().mockResolvedValue(mockData),
|
|
194
|
-
headers: new Headers({}),
|
|
195
|
-
ok: true,
|
|
196
|
-
} as any);
|
|
197
|
-
|
|
198
|
-
const generator = getPagedDataGenerator<CanvasData>(mockUrl);
|
|
199
|
-
await generator.next();
|
|
200
|
-
|
|
201
|
-
expect(consoleWarnSpy).toHaveBeenCalledWith(mockUrl);
|
|
202
|
-
|
|
203
|
-
consoleWarnSpy.mockRestore();
|
|
204
|
-
});
|
|
205
|
-
|
|
206
|
-
it('should return an empty array and log a warning if no data is found', async () => {
|
|
207
|
-
const mockUrl = 'http://example.com/api/data';
|
|
208
|
-
const consoleWarnSpy = jest.spyOn(console, 'warn').mockImplementation();
|
|
209
|
-
|
|
210
|
-
fetchMock.mockResolvedValue({
|
|
211
|
-
json: jest.fn().mockResolvedValue(null),
|
|
212
|
-
headers: new Headers({}),
|
|
213
|
-
ok: true,
|
|
214
|
-
} as any);
|
|
215
|
-
|
|
216
|
-
const generator = getPagedDataGenerator<CanvasData>(mockUrl);
|
|
217
|
-
const result = await generator.next();
|
|
218
|
-
|
|
219
|
-
expect(result.value).toEqual([]);
|
|
220
|
-
expect(consoleWarnSpy).toHaveBeenCalledWith(`no data found for ${mockUrl}`);
|
|
221
|
-
|
|
222
|
-
consoleWarnSpy.mockRestore();
|
|
223
|
-
});
|
|
224
|
-
|
|
225
|
-
it('should process non-array object response data and yield values', async () => {
|
|
226
|
-
const mockUrl = 'http://example.com/api/data';
|
|
227
|
-
const mockData = {items: [{id: 1}, {id: 2}], otherKey: 'value'};
|
|
228
|
-
fetchMock.mockResolvedValue({
|
|
229
|
-
json: jest.fn().mockResolvedValue(mockData),
|
|
230
|
-
headers: new Headers({}),
|
|
231
|
-
ok: true,
|
|
232
|
-
} as any);
|
|
233
|
-
|
|
234
|
-
const generator = getPagedDataGenerator<CanvasData>(mockUrl);
|
|
235
|
-
|
|
236
|
-
const result1 = await generator.next();
|
|
237
|
-
const result2 = await generator.next();
|
|
238
|
-
|
|
239
|
-
expect(result1.value).toEqual({id: 1});
|
|
240
|
-
expect(result2.value).toEqual({id: 2});
|
|
241
|
-
});
|
|
242
|
-
|
|
243
|
-
it('should handle nested non-array object response data and yield values', async () => {
|
|
244
|
-
const mockUrl = 'http://example.com/api/data';
|
|
245
|
-
const mockData = {items: [{id: 1}, {id: 2}], otherKey: 'value'};
|
|
246
|
-
fetchMock.mockResolvedValue({
|
|
247
|
-
json: jest.fn().mockResolvedValue(mockData),
|
|
248
|
-
headers: new Headers({}),
|
|
249
|
-
ok: true,
|
|
250
|
-
} as any);
|
|
251
|
-
|
|
252
|
-
const generator = getPagedDataGenerator<CanvasData>(mockUrl);
|
|
253
|
-
|
|
254
|
-
const result1 = await generator.next();
|
|
255
|
-
const result2 = await generator.next();
|
|
256
|
-
|
|
257
|
-
expect(result1.value).toEqual({id: 1});
|
|
258
|
-
expect(result2.value).toEqual({id: 2});
|
|
259
|
-
});
|
|
260
|
-
|
|
261
|
-
it('should concatenate previous and current page data if response data is non-array object', async () => {
|
|
262
|
-
const mockUrl = 'http://example.com/api/data';
|
|
263
|
-
const mockDataPage1 = [{id: 1}];
|
|
264
|
-
const mockDataPage2 = {items: [{id: 2}, {id: 3}], otherKey: 'value'};
|
|
265
|
-
const nextLink = '<http://example.com/api/data?page=2>; rel="next"';
|
|
266
|
-
|
|
267
|
-
fetchMock
|
|
268
|
-
.mockResolvedValueOnce({
|
|
269
|
-
json: jest.fn().mockResolvedValue(mockDataPage1),
|
|
270
|
-
headers: new Headers({Link: nextLink}),
|
|
271
|
-
ok: true,
|
|
272
|
-
} as any)
|
|
273
|
-
.mockResolvedValueOnce({
|
|
274
|
-
json: jest.fn().mockResolvedValue(mockDataPage2),
|
|
275
|
-
headers: new Headers({}),
|
|
276
|
-
ok: true,
|
|
277
|
-
} as any);
|
|
278
|
-
|
|
279
|
-
const generator = getPagedDataGenerator<CanvasData>(mockUrl);
|
|
280
|
-
|
|
281
|
-
const result1 = await generator.next();
|
|
282
|
-
const result2 = await generator.next();
|
|
283
|
-
const result3 = await generator.next();
|
|
284
|
-
|
|
285
|
-
expect(result1.value.id).toEqual(1);
|
|
286
|
-
expect(result2.value.id).toEqual(2);
|
|
287
|
-
expect(result3.value.id).toEqual(3);
|
|
288
|
-
});
|
|
289
|
-
|
|
290
|
-
it('should stop pagination when no next link is present', async () => {
|
|
291
|
-
const mockUrl = 'http://example.com/api/data';
|
|
292
|
-
const mockDataPage1 = [{id: 1}];
|
|
293
|
-
const noNextLink = '';
|
|
294
|
-
|
|
295
|
-
fetchMock.mockResolvedValueOnce({
|
|
296
|
-
json: jest.fn().mockResolvedValue(mockDataPage1),
|
|
297
|
-
headers: new Headers({Link: noNextLink}),
|
|
298
|
-
ok: true,
|
|
299
|
-
} as any);
|
|
300
|
-
|
|
301
|
-
const generator = getPagedDataGenerator<CanvasData>(mockUrl);
|
|
302
|
-
|
|
303
|
-
const result1 = await generator.next();
|
|
304
|
-
const result2 = await generator.next();
|
|
305
|
-
|
|
306
|
-
expect(result1.value).toEqual({id: 1});
|
|
307
|
-
expect(result2.done).toBe(true);
|
|
308
|
-
});
|
|
309
|
-
|
|
310
|
-
});
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import {IUserData} from "../canvasDataDefs";
|
|
2
|
-
import {frontPageBio} from "../profile";
|
|
3
|
-
import {mockUserData} from "../__mocks__/mockUserData";
|
|
4
|
-
|
|
5
|
-
import {IProfile} from "@/types";
|
|
6
|
-
|
|
7
|
-
describe('frontPageBio', () => {
|
|
8
|
-
const profile = {
|
|
9
|
-
user: {...mockUserData, email: "ttestersson@unity.edu"},
|
|
10
|
-
displayName: "Test Testersson Phd"
|
|
11
|
-
}
|
|
12
|
-
it('renders display name properly', () => {
|
|
13
|
-
expect(frontPageBio(profile)).toContain(profile.displayName);
|
|
14
|
-
})
|
|
15
|
-
it('renders email properly', () => {
|
|
16
|
-
expect(frontPageBio(profile)).toContain(profile.user.email);
|
|
17
|
-
})
|
|
18
|
-
|
|
19
|
-
})
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
getRubric,
|
|
4
|
-
rubricApiUrl,
|
|
5
|
-
getRubricsFetchUrl,
|
|
6
|
-
rubricsForCourseGen,
|
|
7
|
-
rubricAssociationUrl, updateRubricAssociation
|
|
8
|
-
} from "../rubrics";
|
|
9
|
-
import {returnMockAsyncGen} from "@/__mocks__/utils";
|
|
10
|
-
import mockRubric, {mockRubricAssociation, mockRubricsForAssignments} from "../__mocks__/mockRubricData";
|
|
11
|
-
|
|
12
|
-
import {deepObjectMerge, formDataify, renderAsyncGen} from "../canvasUtils";
|
|
13
|
-
import {getPagedDataGenerator} from "@/fetch/getPagedDataGenerator";
|
|
14
|
-
import {fetchJson} from "@/fetch/fetchJson";
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
jest.mock('../fetch/fetchJson', () => ({
|
|
19
|
-
fetchJson: jest.fn(),
|
|
20
|
-
}))
|
|
21
|
-
|
|
22
|
-
jest.mock('../fetch/getPagedDataGenerator', () => ({
|
|
23
|
-
getPagedDataGenerator: jest.fn(),
|
|
24
|
-
}))
|
|
25
|
-
|
|
26
|
-
jest.mock('../canvasUtils', () => ({
|
|
27
|
-
...jest.requireActual('../canvasUtils'),
|
|
28
|
-
formDataify: jest.fn(),
|
|
29
|
-
}));
|
|
30
|
-
|
|
31
|
-
const pagedDataGenMock = getPagedDataGenerator as jest.Mock;
|
|
32
|
-
const fetchJsonMock = fetchJson as jest.Mock;
|
|
33
|
-
|
|
34
|
-
describe('rubricsForCourseGen', () => {
|
|
35
|
-
beforeEach(() => {
|
|
36
|
-
pagedDataGenMock.mockClear();
|
|
37
|
-
})
|
|
38
|
-
it('gets rubrics for a course', async () => {
|
|
39
|
-
const mockRubrics = [{...mockRubric, id: 1}, {...mockRubric, id: 2}];
|
|
40
|
-
const config = { fetchInit: {} };
|
|
41
|
-
pagedDataGenMock.mockImplementation(returnMockAsyncGen(mockRubrics))
|
|
42
|
-
const rubricGen = rubricsForCourseGen(0, {}, config);
|
|
43
|
-
expect(await renderAsyncGen(rubricGen)).toEqual(mockRubrics);
|
|
44
|
-
expect(pagedDataGenMock).toHaveBeenCalledWith(getRubricsFetchUrl(0), config);
|
|
45
|
-
})
|
|
46
|
-
|
|
47
|
-
it('includes associations when needed', async () => {
|
|
48
|
-
const mockRubrics = mockRubricsForAssignments([0, 1, 2, 3], undefined, {});
|
|
49
|
-
const mockWithAssociations = mockRubricsForAssignments([0, 1, 2, 3])
|
|
50
|
-
const mockAssociations = mockWithAssociations.map(rubric => rubric.associations);
|
|
51
|
-
const config = { fetchInit: {} };
|
|
52
|
-
(getPagedDataGenerator as jest.Mock).mockImplementation(returnMockAsyncGen(mockRubrics))
|
|
53
|
-
const rubricGen = rubricsForCourseGen(0, {include: ['associations']}, config);
|
|
54
|
-
expect(pagedDataGenMock.mock.lastCall).toEqual([
|
|
55
|
-
getRubricsFetchUrl(0), config
|
|
56
|
-
]);
|
|
57
|
-
const mockRubricIterator = mockRubrics.values();
|
|
58
|
-
const mockAssocIterator = mockAssociations.values();
|
|
59
|
-
|
|
60
|
-
fetchJsonMock.mockImplementation(async(url, config) => {
|
|
61
|
-
const rubric = mockRubricIterator.next().value;
|
|
62
|
-
return {...rubric, associations: mockAssocIterator.next().value }
|
|
63
|
-
})
|
|
64
|
-
|
|
65
|
-
expect(await renderAsyncGen(rubricGen)).toEqual(mockWithAssociations);
|
|
66
|
-
})
|
|
67
|
-
})
|
|
68
|
-
|
|
69
|
-
describe('getRubric', ()=> {
|
|
70
|
-
beforeEach(() => {
|
|
71
|
-
fetchJsonMock.mockClear();
|
|
72
|
-
})
|
|
73
|
-
|
|
74
|
-
it('calls with the correct parameters, returnValue', async() => {
|
|
75
|
-
const [courseId, rubricId] = [1,2];
|
|
76
|
-
const expectedUrl = rubricApiUrl(courseId, rubricId);
|
|
77
|
-
fetchJsonMock.mockResolvedValue(mockRubric);
|
|
78
|
-
const rubric = await getRubric(courseId, rubricId, {include: ["associations"]}, {fetchInit: {}});
|
|
79
|
-
|
|
80
|
-
expect(fetchJsonMock.mock.lastCall).toEqual([
|
|
81
|
-
expectedUrl,
|
|
82
|
-
{
|
|
83
|
-
fetchInit: {},
|
|
84
|
-
queryParams: { include: ['associations']}
|
|
85
|
-
}
|
|
86
|
-
])
|
|
87
|
-
expect(rubric).toEqual(mockRubric);
|
|
88
|
-
})
|
|
89
|
-
})
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
describe('rubricAssociationUrl', () => {
|
|
94
|
-
it('should return the correct URL for given courseId and rubricAssociationId', () => {
|
|
95
|
-
const courseId = 123;
|
|
96
|
-
const rubricAssociationId = 456;
|
|
97
|
-
const expectedUrl = `/api/v1/courses/${courseId}/rubric_associations/${rubricAssociationId}`;
|
|
98
|
-
|
|
99
|
-
expect(rubricAssociationUrl(courseId, rubricAssociationId)).toBe(expectedUrl);
|
|
100
|
-
});
|
|
101
|
-
});
|
|
102
|
-
// Mock dependencies
|
|
103
|
-
|
|
104
|
-
describe('updateRubricAssociation', () => {
|
|
105
|
-
const courseId = 123;
|
|
106
|
-
const rubricAssociationId = 456;
|
|
107
|
-
const data = { id: 1, rubric_association: {} };
|
|
108
|
-
const config = { fetchInit: {} };
|
|
109
|
-
|
|
110
|
-
beforeEach(() => {
|
|
111
|
-
fetchJsonMock.mockClear();
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
it('should call fetchJson with the correct URL and merged config', async () => {
|
|
115
|
-
const mergedConfig = {
|
|
116
|
-
fetchInit: {
|
|
117
|
-
method: 'PUT',
|
|
118
|
-
body: 'someFormData'
|
|
119
|
-
}
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
(formDataify as jest.Mock).mockReturnValue('someFormData');
|
|
123
|
-
fetchJsonMock.mockResolvedValue('response');
|
|
124
|
-
|
|
125
|
-
const result = await updateRubricAssociation(courseId, rubricAssociationId, data, config);
|
|
126
|
-
|
|
127
|
-
expect(formDataify).toHaveBeenCalledWith(data);
|
|
128
|
-
expect(fetchJson).toHaveBeenCalledWith(`/api/v1/courses/${courseId}/rubric_associations/${rubricAssociationId}`, mergedConfig);
|
|
129
|
-
expect(result).toBe('response');
|
|
130
|
-
});
|
|
131
|
-
});
|
package/src/baseCanvasObject.ts
DELETED
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import {CanvasData} from "./canvasDataDefs";
|
|
2
|
-
import assert from "assert";
|
|
3
|
-
import {formDataify, ICanvasCallConfig, renderAsyncGen} from "./canvasUtils";
|
|
4
|
-
import {Course} from "./course/Course";
|
|
5
|
-
import {getPagedData, getPagedDataGenerator} from "./fetch/getPagedDataGenerator";
|
|
6
|
-
import {overrideConfig} from "./fetch/utils";
|
|
7
|
-
import {fetchJson} from "./fetch/fetchJson";
|
|
8
|
-
import {BaseContentItem} from "./content/BaseContentItem";
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
export interface ICanvasObject<CanvasDataType extends CanvasData> {
|
|
12
|
-
rawData: CanvasDataType,
|
|
13
|
-
name: string,
|
|
14
|
-
|
|
15
|
-
saveData(data: Record<string, any>, config: ICanvasCallConfig | undefined): Promise<Record<string, any>>
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* DEPRECATED
|
|
20
|
-
*/
|
|
21
|
-
export class BaseCanvasObject<CanvasDataType extends CanvasData> implements ICanvasObject<CanvasDataType>{
|
|
22
|
-
|
|
23
|
-
static idProperty = 'id'; // The field name of the id of the canvas object type
|
|
24
|
-
static nameProperty: string | null = 'name'; // The field name of the primary name of the canvas object type
|
|
25
|
-
static contentUrlTemplate: string | null = null; // A templated url to get a single item
|
|
26
|
-
static allContentUrlTemplate: string | null = null; // A templated url to get all items
|
|
27
|
-
protected canvasData: CanvasDataType;
|
|
28
|
-
private _accountId: null | number = null;
|
|
29
|
-
protected get accountId(): null | number {
|
|
30
|
-
return this._accountId;
|
|
31
|
-
}
|
|
32
|
-
constructor(data: CanvasDataType) {
|
|
33
|
-
this.canvasData = data || {}; // A dict holding the decoded json representation of the object in Canvas
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
getClass(): typeof BaseContentItem {
|
|
37
|
-
return this.constructor as typeof BaseContentItem;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
getItem<T>(item: string) {
|
|
42
|
-
return this.canvasData[item] as T;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
get myClass() {
|
|
47
|
-
return (<typeof BaseContentItem>this.constructor)
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
get nameKey() {
|
|
51
|
-
assert(this.myClass.nameProperty);
|
|
52
|
-
return this.myClass.nameProperty;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
get rawData(): CanvasDataType {
|
|
56
|
-
return {...this.canvasData};
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
get contentUrlPath(): null | string {
|
|
61
|
-
const constructor = <typeof BaseCanvasObject>this.constructor;
|
|
62
|
-
|
|
63
|
-
assert(typeof this.accountId === 'number');
|
|
64
|
-
assert(typeof constructor.contentUrlTemplate === 'string');
|
|
65
|
-
return '/api/v1/' + constructor.contentUrlTemplate
|
|
66
|
-
.replace('{content_id}', this.id.toString())
|
|
67
|
-
.replace('{account_id}', this.accountId.toString());
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
get htmlContentUrl() {
|
|
71
|
-
return `${this.contentUrlPath}`;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
get data() {
|
|
75
|
-
return this.canvasData;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
static async getDataById<T extends CanvasData = CanvasData>(contentId: number, courseId: number | null = null, config: ICanvasCallConfig | null = null): Promise<T> {
|
|
79
|
-
const url = this.getUrlPathFromIds(contentId, courseId);
|
|
80
|
-
const response = await fetchJson<T>(url, config);
|
|
81
|
-
assert(!Array.isArray(response));
|
|
82
|
-
|
|
83
|
-
return response;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
static getUrlPathFromIds(
|
|
87
|
-
contentId: number,
|
|
88
|
-
courseId: number | null) {
|
|
89
|
-
assert(typeof this.contentUrlTemplate === 'string');
|
|
90
|
-
let url = this.contentUrlTemplate
|
|
91
|
-
.replace('{content_id}', contentId.toString());
|
|
92
|
-
if (courseId) url = url.replace('{course_id}', courseId.toString());
|
|
93
|
-
return url;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* @param courseId - The course ID to get elements within, if applicable
|
|
98
|
-
* @param accountId - The account ID to get elements within, if applicable
|
|
99
|
-
*/
|
|
100
|
-
static getAllUrl(courseId: number | null = null, accountId: number | null = null) {
|
|
101
|
-
assert(typeof this.allContentUrlTemplate === 'string');
|
|
102
|
-
let replaced = this.allContentUrlTemplate;
|
|
103
|
-
|
|
104
|
-
if (courseId) replaced = replaced.replace('{course_id}', courseId.toString());
|
|
105
|
-
if (accountId) replaced = replaced.replace('{account_id}', accountId.toString());
|
|
106
|
-
return replaced;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
static async getAll(config: ICanvasCallConfig | null = null) {
|
|
110
|
-
const url = this.getAllUrl();
|
|
111
|
-
return await renderAsyncGen(getPagedDataGenerator(this.getAllUrl(), config))
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
get id(): number {
|
|
115
|
-
const id = this.canvasData[(<typeof BaseCanvasObject>this.constructor).idProperty];
|
|
116
|
-
return parseInt(id);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
get name() {
|
|
120
|
-
const nameProperty = this.getClass().nameProperty;
|
|
121
|
-
if (!nameProperty) return 'NAME PROPERTY NOT SET'
|
|
122
|
-
return this.getItem<string>(nameProperty);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
async saveData(data: Record<string, any>, config?: ICanvasCallConfig) {
|
|
126
|
-
assert(this.contentUrlPath);
|
|
127
|
-
config = overrideConfig({
|
|
128
|
-
fetchInit: {
|
|
129
|
-
method: 'PUT',
|
|
130
|
-
body: formDataify(data)
|
|
131
|
-
}
|
|
132
|
-
}, config);
|
|
133
|
-
|
|
134
|
-
let results = await fetchJson(this.contentUrlPath, config) as Partial<CanvasDataType> | Partial<CanvasDataType>[];
|
|
135
|
-
if(Array.isArray(results)) results = results[0];
|
|
136
|
-
this.canvasData = {...this.canvasData, ...results};
|
|
137
|
-
return this.canvasData;
|
|
138
|
-
}
|
|
139
|
-
}
|