@eduware/oneroster 1.0.0 → 1.1.0

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.
Files changed (364) hide show
  1. package/README.md +229 -18
  2. package/dist/commonjs/funcs/academicSessionsManagementGetAllAcademicSessions.d.ts.map +1 -1
  3. package/dist/commonjs/funcs/academicSessionsManagementGetAllAcademicSessions.js +4 -1
  4. package/dist/commonjs/funcs/academicSessionsManagementGetAllAcademicSessions.js.map +1 -1
  5. package/dist/commonjs/funcs/assessmentLineItemsManagementGetAllAssessmentLineItems.d.ts.map +1 -1
  6. package/dist/commonjs/funcs/assessmentLineItemsManagementGetAllAssessmentLineItems.js +4 -1
  7. package/dist/commonjs/funcs/assessmentLineItemsManagementGetAllAssessmentLineItems.js.map +1 -1
  8. package/dist/commonjs/funcs/assessmentResultsManagementGetAllAssessmentResults.d.ts.map +1 -1
  9. package/dist/commonjs/funcs/assessmentResultsManagementGetAllAssessmentResults.js +4 -1
  10. package/dist/commonjs/funcs/assessmentResultsManagementGetAllAssessmentResults.js.map +1 -1
  11. package/dist/commonjs/funcs/categoriesManagementGetAllCategories.d.ts.map +1 -1
  12. package/dist/commonjs/funcs/categoriesManagementGetAllCategories.js +4 -1
  13. package/dist/commonjs/funcs/categoriesManagementGetAllCategories.js.map +1 -1
  14. package/dist/commonjs/funcs/classesManagementGetAllClasses.d.ts.map +1 -1
  15. package/dist/commonjs/funcs/classesManagementGetAllClasses.js +4 -1
  16. package/dist/commonjs/funcs/classesManagementGetAllClasses.js.map +1 -1
  17. package/dist/commonjs/funcs/classesManagementGetCategoriesForClass.d.ts.map +1 -1
  18. package/dist/commonjs/funcs/classesManagementGetCategoriesForClass.js +4 -1
  19. package/dist/commonjs/funcs/classesManagementGetCategoriesForClass.js.map +1 -1
  20. package/dist/commonjs/funcs/classesManagementGetClassesForStudent.d.ts.map +1 -1
  21. package/dist/commonjs/funcs/classesManagementGetClassesForStudent.js +4 -1
  22. package/dist/commonjs/funcs/classesManagementGetClassesForStudent.js.map +1 -1
  23. package/dist/commonjs/funcs/classesManagementGetClassesForTeacher.d.ts.map +1 -1
  24. package/dist/commonjs/funcs/classesManagementGetClassesForTeacher.js +4 -1
  25. package/dist/commonjs/funcs/classesManagementGetClassesForTeacher.js.map +1 -1
  26. package/dist/commonjs/funcs/classesManagementGetClassesForTerm.d.ts.map +1 -1
  27. package/dist/commonjs/funcs/classesManagementGetClassesForTerm.js +4 -1
  28. package/dist/commonjs/funcs/classesManagementGetClassesForTerm.js.map +1 -1
  29. package/dist/commonjs/funcs/classesManagementGetClassesForUser.d.ts.map +1 -1
  30. package/dist/commonjs/funcs/classesManagementGetClassesForUser.js +4 -1
  31. package/dist/commonjs/funcs/classesManagementGetClassesForUser.js.map +1 -1
  32. package/dist/commonjs/funcs/classesManagementGetLineItemsForClass.d.ts.map +1 -1
  33. package/dist/commonjs/funcs/classesManagementGetLineItemsForClass.js +4 -1
  34. package/dist/commonjs/funcs/classesManagementGetLineItemsForClass.js.map +1 -1
  35. package/dist/commonjs/funcs/classesManagementGetResultsForClass.d.ts.map +1 -1
  36. package/dist/commonjs/funcs/classesManagementGetResultsForClass.js +4 -1
  37. package/dist/commonjs/funcs/classesManagementGetResultsForClass.js.map +1 -1
  38. package/dist/commonjs/funcs/classesManagementGetResultsForLineItemForClass.d.ts.map +1 -1
  39. package/dist/commonjs/funcs/classesManagementGetResultsForLineItemForClass.js +4 -1
  40. package/dist/commonjs/funcs/classesManagementGetResultsForLineItemForClass.js.map +1 -1
  41. package/dist/commonjs/funcs/classesManagementGetResultsForStudentForClass.d.ts.map +1 -1
  42. package/dist/commonjs/funcs/classesManagementGetResultsForStudentForClass.js +4 -1
  43. package/dist/commonjs/funcs/classesManagementGetResultsForStudentForClass.js.map +1 -1
  44. package/dist/commonjs/funcs/classesManagementGetScoreScalesForClass.d.ts.map +1 -1
  45. package/dist/commonjs/funcs/classesManagementGetScoreScalesForClass.js +4 -1
  46. package/dist/commonjs/funcs/classesManagementGetScoreScalesForClass.js.map +1 -1
  47. package/dist/commonjs/funcs/classesManagementGetStudentsForClass.d.ts.map +1 -1
  48. package/dist/commonjs/funcs/classesManagementGetStudentsForClass.js +4 -1
  49. package/dist/commonjs/funcs/classesManagementGetStudentsForClass.js.map +1 -1
  50. package/dist/commonjs/funcs/classesManagementGetTeachersForClass.d.ts.map +1 -1
  51. package/dist/commonjs/funcs/classesManagementGetTeachersForClass.js +4 -1
  52. package/dist/commonjs/funcs/classesManagementGetTeachersForClass.js.map +1 -1
  53. package/dist/commonjs/funcs/coursesManagementGetAllComponentResources.d.ts.map +1 -1
  54. package/dist/commonjs/funcs/coursesManagementGetAllComponentResources.js +4 -1
  55. package/dist/commonjs/funcs/coursesManagementGetAllComponentResources.js.map +1 -1
  56. package/dist/commonjs/funcs/coursesManagementGetAllCourseComponents.d.ts.map +1 -1
  57. package/dist/commonjs/funcs/coursesManagementGetAllCourseComponents.js +4 -1
  58. package/dist/commonjs/funcs/coursesManagementGetAllCourseComponents.js.map +1 -1
  59. package/dist/commonjs/funcs/coursesManagementGetAllCourses.d.ts.map +1 -1
  60. package/dist/commonjs/funcs/coursesManagementGetAllCourses.js +4 -1
  61. package/dist/commonjs/funcs/coursesManagementGetAllCourses.js.map +1 -1
  62. package/dist/commonjs/funcs/coursesManagementGetClassesForCourse.d.ts.map +1 -1
  63. package/dist/commonjs/funcs/coursesManagementGetClassesForCourse.js +4 -1
  64. package/dist/commonjs/funcs/coursesManagementGetClassesForCourse.js.map +1 -1
  65. package/dist/commonjs/funcs/demographicsManagementGetAllDemographics.d.ts.map +1 -1
  66. package/dist/commonjs/funcs/demographicsManagementGetAllDemographics.js +4 -1
  67. package/dist/commonjs/funcs/demographicsManagementGetAllDemographics.js.map +1 -1
  68. package/dist/commonjs/funcs/enrollmentsManagementGetAllEnrollments.d.ts.map +1 -1
  69. package/dist/commonjs/funcs/enrollmentsManagementGetAllEnrollments.js +4 -1
  70. package/dist/commonjs/funcs/enrollmentsManagementGetAllEnrollments.js.map +1 -1
  71. package/dist/commonjs/funcs/gradingPeriodsManagementGetAllGradingPeriods.d.ts.map +1 -1
  72. package/dist/commonjs/funcs/gradingPeriodsManagementGetAllGradingPeriods.js +4 -1
  73. package/dist/commonjs/funcs/gradingPeriodsManagementGetAllGradingPeriods.js.map +1 -1
  74. package/dist/commonjs/funcs/lineItemsManagementGetAllLineItems.d.ts.map +1 -1
  75. package/dist/commonjs/funcs/lineItemsManagementGetAllLineItems.js +4 -1
  76. package/dist/commonjs/funcs/lineItemsManagementGetAllLineItems.js.map +1 -1
  77. package/dist/commonjs/funcs/organizationsManagementGetAllOrgs.d.ts.map +1 -1
  78. package/dist/commonjs/funcs/organizationsManagementGetAllOrgs.js +4 -1
  79. package/dist/commonjs/funcs/organizationsManagementGetAllOrgs.js.map +1 -1
  80. package/dist/commonjs/funcs/resourcesManagementGetAllResources.d.ts.map +1 -1
  81. package/dist/commonjs/funcs/resourcesManagementGetAllResources.js +4 -1
  82. package/dist/commonjs/funcs/resourcesManagementGetAllResources.js.map +1 -1
  83. package/dist/commonjs/funcs/resourcesManagementGetResourcesForClass.d.ts.map +1 -1
  84. package/dist/commonjs/funcs/resourcesManagementGetResourcesForClass.js +4 -1
  85. package/dist/commonjs/funcs/resourcesManagementGetResourcesForClass.js.map +1 -1
  86. package/dist/commonjs/funcs/resourcesManagementGetResourcesForCourse.d.ts.map +1 -1
  87. package/dist/commonjs/funcs/resourcesManagementGetResourcesForCourse.js +4 -1
  88. package/dist/commonjs/funcs/resourcesManagementGetResourcesForCourse.js.map +1 -1
  89. package/dist/commonjs/funcs/resourcesManagementGetResourcesForUser.d.ts.map +1 -1
  90. package/dist/commonjs/funcs/resourcesManagementGetResourcesForUser.js +4 -1
  91. package/dist/commonjs/funcs/resourcesManagementGetResourcesForUser.js.map +1 -1
  92. package/dist/commonjs/funcs/resultsManagementGetAllResults.d.ts.map +1 -1
  93. package/dist/commonjs/funcs/resultsManagementGetAllResults.js +4 -1
  94. package/dist/commonjs/funcs/resultsManagementGetAllResults.js.map +1 -1
  95. package/dist/commonjs/funcs/schoolsManagementGetAllSchools.d.ts.map +1 -1
  96. package/dist/commonjs/funcs/schoolsManagementGetAllSchools.js +4 -1
  97. package/dist/commonjs/funcs/schoolsManagementGetAllSchools.js.map +1 -1
  98. package/dist/commonjs/funcs/schoolsManagementGetClassesForSchool.d.ts.map +1 -1
  99. package/dist/commonjs/funcs/schoolsManagementGetClassesForSchool.js +4 -1
  100. package/dist/commonjs/funcs/schoolsManagementGetClassesForSchool.js.map +1 -1
  101. package/dist/commonjs/funcs/schoolsManagementGetCoursesForSchool.d.ts.map +1 -1
  102. package/dist/commonjs/funcs/schoolsManagementGetCoursesForSchool.js +4 -1
  103. package/dist/commonjs/funcs/schoolsManagementGetCoursesForSchool.js.map +1 -1
  104. package/dist/commonjs/funcs/schoolsManagementGetEnrollmentsForClassInSchool.d.ts.map +1 -1
  105. package/dist/commonjs/funcs/schoolsManagementGetEnrollmentsForClassInSchool.js +4 -1
  106. package/dist/commonjs/funcs/schoolsManagementGetEnrollmentsForClassInSchool.js.map +1 -1
  107. package/dist/commonjs/funcs/schoolsManagementGetEnrollmentsForSchool.d.ts.map +1 -1
  108. package/dist/commonjs/funcs/schoolsManagementGetEnrollmentsForSchool.js +4 -1
  109. package/dist/commonjs/funcs/schoolsManagementGetEnrollmentsForSchool.js.map +1 -1
  110. package/dist/commonjs/funcs/schoolsManagementGetLineItemsForSchool.d.ts.map +1 -1
  111. package/dist/commonjs/funcs/schoolsManagementGetLineItemsForSchool.js +4 -1
  112. package/dist/commonjs/funcs/schoolsManagementGetLineItemsForSchool.js.map +1 -1
  113. package/dist/commonjs/funcs/schoolsManagementGetStudentsForClassInSchool.d.ts.map +1 -1
  114. package/dist/commonjs/funcs/schoolsManagementGetStudentsForClassInSchool.js +4 -1
  115. package/dist/commonjs/funcs/schoolsManagementGetStudentsForClassInSchool.js.map +1 -1
  116. package/dist/commonjs/funcs/schoolsManagementGetStudentsForSchool.d.ts.map +1 -1
  117. package/dist/commonjs/funcs/schoolsManagementGetStudentsForSchool.js +4 -1
  118. package/dist/commonjs/funcs/schoolsManagementGetStudentsForSchool.js.map +1 -1
  119. package/dist/commonjs/funcs/schoolsManagementGetTeachersForClassInSchool.d.ts.map +1 -1
  120. package/dist/commonjs/funcs/schoolsManagementGetTeachersForClassInSchool.js +4 -1
  121. package/dist/commonjs/funcs/schoolsManagementGetTeachersForClassInSchool.js.map +1 -1
  122. package/dist/commonjs/funcs/schoolsManagementGetTeachersForSchool.d.ts.map +1 -1
  123. package/dist/commonjs/funcs/schoolsManagementGetTeachersForSchool.js +4 -1
  124. package/dist/commonjs/funcs/schoolsManagementGetTeachersForSchool.js.map +1 -1
  125. package/dist/commonjs/funcs/schoolsManagementGetTermsForSchool.d.ts.map +1 -1
  126. package/dist/commonjs/funcs/schoolsManagementGetTermsForSchool.js +4 -1
  127. package/dist/commonjs/funcs/schoolsManagementGetTermsForSchool.js.map +1 -1
  128. package/dist/commonjs/funcs/scoreScalesManagementGetAllScoreScales.d.ts.map +1 -1
  129. package/dist/commonjs/funcs/scoreScalesManagementGetAllScoreScales.js +4 -1
  130. package/dist/commonjs/funcs/scoreScalesManagementGetAllScoreScales.js.map +1 -1
  131. package/dist/commonjs/funcs/scoreScalesManagementGetScoreScalesForSchool.d.ts.map +1 -1
  132. package/dist/commonjs/funcs/scoreScalesManagementGetScoreScalesForSchool.js +4 -1
  133. package/dist/commonjs/funcs/scoreScalesManagementGetScoreScalesForSchool.js.map +1 -1
  134. package/dist/commonjs/funcs/studentsManagementGetAllStudents.d.ts.map +1 -1
  135. package/dist/commonjs/funcs/studentsManagementGetAllStudents.js +4 -1
  136. package/dist/commonjs/funcs/studentsManagementGetAllStudents.js.map +1 -1
  137. package/dist/commonjs/funcs/teachersManagementGetAllTeachers.d.ts.map +1 -1
  138. package/dist/commonjs/funcs/teachersManagementGetAllTeachers.js +4 -1
  139. package/dist/commonjs/funcs/teachersManagementGetAllTeachers.js.map +1 -1
  140. package/dist/commonjs/funcs/termsManagementGetAllTerms.d.ts.map +1 -1
  141. package/dist/commonjs/funcs/termsManagementGetAllTerms.js +4 -1
  142. package/dist/commonjs/funcs/termsManagementGetAllTerms.js.map +1 -1
  143. package/dist/commonjs/funcs/termsManagementGetGradingPeriodsForTerm.d.ts.map +1 -1
  144. package/dist/commonjs/funcs/termsManagementGetGradingPeriodsForTerm.js +4 -1
  145. package/dist/commonjs/funcs/termsManagementGetGradingPeriodsForTerm.js.map +1 -1
  146. package/dist/commonjs/funcs/usersManagementGetAllUsers.d.ts.map +1 -1
  147. package/dist/commonjs/funcs/usersManagementGetAllUsers.js +4 -1
  148. package/dist/commonjs/funcs/usersManagementGetAllUsers.js.map +1 -1
  149. package/dist/commonjs/lib/pagination.d.ts +17 -0
  150. package/dist/commonjs/lib/pagination.d.ts.map +1 -0
  151. package/dist/commonjs/lib/pagination.js +22 -0
  152. package/dist/commonjs/lib/pagination.js.map +1 -0
  153. package/dist/commonjs/types/operations.d.ts +6 -5
  154. package/dist/commonjs/types/operations.d.ts.map +1 -1
  155. package/dist/commonjs/types/operations.js +15 -4
  156. package/dist/commonjs/types/operations.js.map +1 -1
  157. package/dist/esm/funcs/academicSessionsManagementGetAllAcademicSessions.d.ts.map +1 -1
  158. package/dist/esm/funcs/academicSessionsManagementGetAllAcademicSessions.js +4 -1
  159. package/dist/esm/funcs/academicSessionsManagementGetAllAcademicSessions.js.map +1 -1
  160. package/dist/esm/funcs/assessmentLineItemsManagementGetAllAssessmentLineItems.d.ts.map +1 -1
  161. package/dist/esm/funcs/assessmentLineItemsManagementGetAllAssessmentLineItems.js +4 -1
  162. package/dist/esm/funcs/assessmentLineItemsManagementGetAllAssessmentLineItems.js.map +1 -1
  163. package/dist/esm/funcs/assessmentResultsManagementGetAllAssessmentResults.d.ts.map +1 -1
  164. package/dist/esm/funcs/assessmentResultsManagementGetAllAssessmentResults.js +4 -1
  165. package/dist/esm/funcs/assessmentResultsManagementGetAllAssessmentResults.js.map +1 -1
  166. package/dist/esm/funcs/categoriesManagementGetAllCategories.d.ts.map +1 -1
  167. package/dist/esm/funcs/categoriesManagementGetAllCategories.js +4 -1
  168. package/dist/esm/funcs/categoriesManagementGetAllCategories.js.map +1 -1
  169. package/dist/esm/funcs/classesManagementGetAllClasses.d.ts.map +1 -1
  170. package/dist/esm/funcs/classesManagementGetAllClasses.js +4 -1
  171. package/dist/esm/funcs/classesManagementGetAllClasses.js.map +1 -1
  172. package/dist/esm/funcs/classesManagementGetCategoriesForClass.d.ts.map +1 -1
  173. package/dist/esm/funcs/classesManagementGetCategoriesForClass.js +4 -1
  174. package/dist/esm/funcs/classesManagementGetCategoriesForClass.js.map +1 -1
  175. package/dist/esm/funcs/classesManagementGetClassesForStudent.d.ts.map +1 -1
  176. package/dist/esm/funcs/classesManagementGetClassesForStudent.js +4 -1
  177. package/dist/esm/funcs/classesManagementGetClassesForStudent.js.map +1 -1
  178. package/dist/esm/funcs/classesManagementGetClassesForTeacher.d.ts.map +1 -1
  179. package/dist/esm/funcs/classesManagementGetClassesForTeacher.js +4 -1
  180. package/dist/esm/funcs/classesManagementGetClassesForTeacher.js.map +1 -1
  181. package/dist/esm/funcs/classesManagementGetClassesForTerm.d.ts.map +1 -1
  182. package/dist/esm/funcs/classesManagementGetClassesForTerm.js +4 -1
  183. package/dist/esm/funcs/classesManagementGetClassesForTerm.js.map +1 -1
  184. package/dist/esm/funcs/classesManagementGetClassesForUser.d.ts.map +1 -1
  185. package/dist/esm/funcs/classesManagementGetClassesForUser.js +4 -1
  186. package/dist/esm/funcs/classesManagementGetClassesForUser.js.map +1 -1
  187. package/dist/esm/funcs/classesManagementGetLineItemsForClass.d.ts.map +1 -1
  188. package/dist/esm/funcs/classesManagementGetLineItemsForClass.js +4 -1
  189. package/dist/esm/funcs/classesManagementGetLineItemsForClass.js.map +1 -1
  190. package/dist/esm/funcs/classesManagementGetResultsForClass.d.ts.map +1 -1
  191. package/dist/esm/funcs/classesManagementGetResultsForClass.js +4 -1
  192. package/dist/esm/funcs/classesManagementGetResultsForClass.js.map +1 -1
  193. package/dist/esm/funcs/classesManagementGetResultsForLineItemForClass.d.ts.map +1 -1
  194. package/dist/esm/funcs/classesManagementGetResultsForLineItemForClass.js +4 -1
  195. package/dist/esm/funcs/classesManagementGetResultsForLineItemForClass.js.map +1 -1
  196. package/dist/esm/funcs/classesManagementGetResultsForStudentForClass.d.ts.map +1 -1
  197. package/dist/esm/funcs/classesManagementGetResultsForStudentForClass.js +4 -1
  198. package/dist/esm/funcs/classesManagementGetResultsForStudentForClass.js.map +1 -1
  199. package/dist/esm/funcs/classesManagementGetScoreScalesForClass.d.ts.map +1 -1
  200. package/dist/esm/funcs/classesManagementGetScoreScalesForClass.js +4 -1
  201. package/dist/esm/funcs/classesManagementGetScoreScalesForClass.js.map +1 -1
  202. package/dist/esm/funcs/classesManagementGetStudentsForClass.d.ts.map +1 -1
  203. package/dist/esm/funcs/classesManagementGetStudentsForClass.js +4 -1
  204. package/dist/esm/funcs/classesManagementGetStudentsForClass.js.map +1 -1
  205. package/dist/esm/funcs/classesManagementGetTeachersForClass.d.ts.map +1 -1
  206. package/dist/esm/funcs/classesManagementGetTeachersForClass.js +4 -1
  207. package/dist/esm/funcs/classesManagementGetTeachersForClass.js.map +1 -1
  208. package/dist/esm/funcs/coursesManagementGetAllComponentResources.d.ts.map +1 -1
  209. package/dist/esm/funcs/coursesManagementGetAllComponentResources.js +4 -1
  210. package/dist/esm/funcs/coursesManagementGetAllComponentResources.js.map +1 -1
  211. package/dist/esm/funcs/coursesManagementGetAllCourseComponents.d.ts.map +1 -1
  212. package/dist/esm/funcs/coursesManagementGetAllCourseComponents.js +4 -1
  213. package/dist/esm/funcs/coursesManagementGetAllCourseComponents.js.map +1 -1
  214. package/dist/esm/funcs/coursesManagementGetAllCourses.d.ts.map +1 -1
  215. package/dist/esm/funcs/coursesManagementGetAllCourses.js +4 -1
  216. package/dist/esm/funcs/coursesManagementGetAllCourses.js.map +1 -1
  217. package/dist/esm/funcs/coursesManagementGetClassesForCourse.d.ts.map +1 -1
  218. package/dist/esm/funcs/coursesManagementGetClassesForCourse.js +4 -1
  219. package/dist/esm/funcs/coursesManagementGetClassesForCourse.js.map +1 -1
  220. package/dist/esm/funcs/demographicsManagementGetAllDemographics.d.ts.map +1 -1
  221. package/dist/esm/funcs/demographicsManagementGetAllDemographics.js +4 -1
  222. package/dist/esm/funcs/demographicsManagementGetAllDemographics.js.map +1 -1
  223. package/dist/esm/funcs/enrollmentsManagementGetAllEnrollments.d.ts.map +1 -1
  224. package/dist/esm/funcs/enrollmentsManagementGetAllEnrollments.js +4 -1
  225. package/dist/esm/funcs/enrollmentsManagementGetAllEnrollments.js.map +1 -1
  226. package/dist/esm/funcs/gradingPeriodsManagementGetAllGradingPeriods.d.ts.map +1 -1
  227. package/dist/esm/funcs/gradingPeriodsManagementGetAllGradingPeriods.js +4 -1
  228. package/dist/esm/funcs/gradingPeriodsManagementGetAllGradingPeriods.js.map +1 -1
  229. package/dist/esm/funcs/lineItemsManagementGetAllLineItems.d.ts.map +1 -1
  230. package/dist/esm/funcs/lineItemsManagementGetAllLineItems.js +4 -1
  231. package/dist/esm/funcs/lineItemsManagementGetAllLineItems.js.map +1 -1
  232. package/dist/esm/funcs/organizationsManagementGetAllOrgs.d.ts.map +1 -1
  233. package/dist/esm/funcs/organizationsManagementGetAllOrgs.js +4 -1
  234. package/dist/esm/funcs/organizationsManagementGetAllOrgs.js.map +1 -1
  235. package/dist/esm/funcs/resourcesManagementGetAllResources.d.ts.map +1 -1
  236. package/dist/esm/funcs/resourcesManagementGetAllResources.js +4 -1
  237. package/dist/esm/funcs/resourcesManagementGetAllResources.js.map +1 -1
  238. package/dist/esm/funcs/resourcesManagementGetResourcesForClass.d.ts.map +1 -1
  239. package/dist/esm/funcs/resourcesManagementGetResourcesForClass.js +4 -1
  240. package/dist/esm/funcs/resourcesManagementGetResourcesForClass.js.map +1 -1
  241. package/dist/esm/funcs/resourcesManagementGetResourcesForCourse.d.ts.map +1 -1
  242. package/dist/esm/funcs/resourcesManagementGetResourcesForCourse.js +4 -1
  243. package/dist/esm/funcs/resourcesManagementGetResourcesForCourse.js.map +1 -1
  244. package/dist/esm/funcs/resourcesManagementGetResourcesForUser.d.ts.map +1 -1
  245. package/dist/esm/funcs/resourcesManagementGetResourcesForUser.js +4 -1
  246. package/dist/esm/funcs/resourcesManagementGetResourcesForUser.js.map +1 -1
  247. package/dist/esm/funcs/resultsManagementGetAllResults.d.ts.map +1 -1
  248. package/dist/esm/funcs/resultsManagementGetAllResults.js +4 -1
  249. package/dist/esm/funcs/resultsManagementGetAllResults.js.map +1 -1
  250. package/dist/esm/funcs/schoolsManagementGetAllSchools.d.ts.map +1 -1
  251. package/dist/esm/funcs/schoolsManagementGetAllSchools.js +4 -1
  252. package/dist/esm/funcs/schoolsManagementGetAllSchools.js.map +1 -1
  253. package/dist/esm/funcs/schoolsManagementGetClassesForSchool.d.ts.map +1 -1
  254. package/dist/esm/funcs/schoolsManagementGetClassesForSchool.js +4 -1
  255. package/dist/esm/funcs/schoolsManagementGetClassesForSchool.js.map +1 -1
  256. package/dist/esm/funcs/schoolsManagementGetCoursesForSchool.d.ts.map +1 -1
  257. package/dist/esm/funcs/schoolsManagementGetCoursesForSchool.js +4 -1
  258. package/dist/esm/funcs/schoolsManagementGetCoursesForSchool.js.map +1 -1
  259. package/dist/esm/funcs/schoolsManagementGetEnrollmentsForClassInSchool.d.ts.map +1 -1
  260. package/dist/esm/funcs/schoolsManagementGetEnrollmentsForClassInSchool.js +4 -1
  261. package/dist/esm/funcs/schoolsManagementGetEnrollmentsForClassInSchool.js.map +1 -1
  262. package/dist/esm/funcs/schoolsManagementGetEnrollmentsForSchool.d.ts.map +1 -1
  263. package/dist/esm/funcs/schoolsManagementGetEnrollmentsForSchool.js +4 -1
  264. package/dist/esm/funcs/schoolsManagementGetEnrollmentsForSchool.js.map +1 -1
  265. package/dist/esm/funcs/schoolsManagementGetLineItemsForSchool.d.ts.map +1 -1
  266. package/dist/esm/funcs/schoolsManagementGetLineItemsForSchool.js +4 -1
  267. package/dist/esm/funcs/schoolsManagementGetLineItemsForSchool.js.map +1 -1
  268. package/dist/esm/funcs/schoolsManagementGetStudentsForClassInSchool.d.ts.map +1 -1
  269. package/dist/esm/funcs/schoolsManagementGetStudentsForClassInSchool.js +4 -1
  270. package/dist/esm/funcs/schoolsManagementGetStudentsForClassInSchool.js.map +1 -1
  271. package/dist/esm/funcs/schoolsManagementGetStudentsForSchool.d.ts.map +1 -1
  272. package/dist/esm/funcs/schoolsManagementGetStudentsForSchool.js +4 -1
  273. package/dist/esm/funcs/schoolsManagementGetStudentsForSchool.js.map +1 -1
  274. package/dist/esm/funcs/schoolsManagementGetTeachersForClassInSchool.d.ts.map +1 -1
  275. package/dist/esm/funcs/schoolsManagementGetTeachersForClassInSchool.js +4 -1
  276. package/dist/esm/funcs/schoolsManagementGetTeachersForClassInSchool.js.map +1 -1
  277. package/dist/esm/funcs/schoolsManagementGetTeachersForSchool.d.ts.map +1 -1
  278. package/dist/esm/funcs/schoolsManagementGetTeachersForSchool.js +4 -1
  279. package/dist/esm/funcs/schoolsManagementGetTeachersForSchool.js.map +1 -1
  280. package/dist/esm/funcs/schoolsManagementGetTermsForSchool.d.ts.map +1 -1
  281. package/dist/esm/funcs/schoolsManagementGetTermsForSchool.js +4 -1
  282. package/dist/esm/funcs/schoolsManagementGetTermsForSchool.js.map +1 -1
  283. package/dist/esm/funcs/scoreScalesManagementGetAllScoreScales.d.ts.map +1 -1
  284. package/dist/esm/funcs/scoreScalesManagementGetAllScoreScales.js +4 -1
  285. package/dist/esm/funcs/scoreScalesManagementGetAllScoreScales.js.map +1 -1
  286. package/dist/esm/funcs/scoreScalesManagementGetScoreScalesForSchool.d.ts.map +1 -1
  287. package/dist/esm/funcs/scoreScalesManagementGetScoreScalesForSchool.js +4 -1
  288. package/dist/esm/funcs/scoreScalesManagementGetScoreScalesForSchool.js.map +1 -1
  289. package/dist/esm/funcs/studentsManagementGetAllStudents.d.ts.map +1 -1
  290. package/dist/esm/funcs/studentsManagementGetAllStudents.js +4 -1
  291. package/dist/esm/funcs/studentsManagementGetAllStudents.js.map +1 -1
  292. package/dist/esm/funcs/teachersManagementGetAllTeachers.d.ts.map +1 -1
  293. package/dist/esm/funcs/teachersManagementGetAllTeachers.js +4 -1
  294. package/dist/esm/funcs/teachersManagementGetAllTeachers.js.map +1 -1
  295. package/dist/esm/funcs/termsManagementGetAllTerms.d.ts.map +1 -1
  296. package/dist/esm/funcs/termsManagementGetAllTerms.js +4 -1
  297. package/dist/esm/funcs/termsManagementGetAllTerms.js.map +1 -1
  298. package/dist/esm/funcs/termsManagementGetGradingPeriodsForTerm.d.ts.map +1 -1
  299. package/dist/esm/funcs/termsManagementGetGradingPeriodsForTerm.js +4 -1
  300. package/dist/esm/funcs/termsManagementGetGradingPeriodsForTerm.js.map +1 -1
  301. package/dist/esm/funcs/usersManagementGetAllUsers.d.ts.map +1 -1
  302. package/dist/esm/funcs/usersManagementGetAllUsers.js +4 -1
  303. package/dist/esm/funcs/usersManagementGetAllUsers.js.map +1 -1
  304. package/dist/esm/lib/pagination.d.ts +17 -0
  305. package/dist/esm/lib/pagination.d.ts.map +1 -0
  306. package/dist/esm/lib/pagination.js +19 -0
  307. package/dist/esm/lib/pagination.js.map +1 -0
  308. package/dist/esm/types/operations.d.ts +6 -5
  309. package/dist/esm/types/operations.d.ts.map +1 -1
  310. package/dist/esm/types/operations.js +15 -4
  311. package/dist/esm/types/operations.js.map +1 -1
  312. package/package.json +1 -1
  313. package/src/funcs/academicSessionsManagementGetAllAcademicSessions.ts +5 -1
  314. package/src/funcs/assessmentLineItemsManagementGetAllAssessmentLineItems.ts +5 -1
  315. package/src/funcs/assessmentResultsManagementGetAllAssessmentResults.ts +5 -1
  316. package/src/funcs/categoriesManagementGetAllCategories.ts +5 -1
  317. package/src/funcs/classesManagementGetAllClasses.ts +5 -1
  318. package/src/funcs/classesManagementGetCategoriesForClass.ts +5 -1
  319. package/src/funcs/classesManagementGetClassesForStudent.ts +5 -1
  320. package/src/funcs/classesManagementGetClassesForTeacher.ts +5 -1
  321. package/src/funcs/classesManagementGetClassesForTerm.ts +5 -1
  322. package/src/funcs/classesManagementGetClassesForUser.ts +5 -1
  323. package/src/funcs/classesManagementGetLineItemsForClass.ts +5 -1
  324. package/src/funcs/classesManagementGetResultsForClass.ts +5 -1
  325. package/src/funcs/classesManagementGetResultsForLineItemForClass.ts +5 -1
  326. package/src/funcs/classesManagementGetResultsForStudentForClass.ts +5 -1
  327. package/src/funcs/classesManagementGetScoreScalesForClass.ts +5 -1
  328. package/src/funcs/classesManagementGetStudentsForClass.ts +5 -1
  329. package/src/funcs/classesManagementGetTeachersForClass.ts +5 -1
  330. package/src/funcs/coursesManagementGetAllComponentResources.ts +5 -1
  331. package/src/funcs/coursesManagementGetAllCourseComponents.ts +5 -1
  332. package/src/funcs/coursesManagementGetAllCourses.ts +5 -1
  333. package/src/funcs/coursesManagementGetClassesForCourse.ts +5 -1
  334. package/src/funcs/demographicsManagementGetAllDemographics.ts +5 -1
  335. package/src/funcs/enrollmentsManagementGetAllEnrollments.ts +5 -1
  336. package/src/funcs/gradingPeriodsManagementGetAllGradingPeriods.ts +5 -1
  337. package/src/funcs/lineItemsManagementGetAllLineItems.ts +5 -1
  338. package/src/funcs/organizationsManagementGetAllOrgs.ts +5 -1
  339. package/src/funcs/resourcesManagementGetAllResources.ts +5 -1
  340. package/src/funcs/resourcesManagementGetResourcesForClass.ts +5 -1
  341. package/src/funcs/resourcesManagementGetResourcesForCourse.ts +5 -1
  342. package/src/funcs/resourcesManagementGetResourcesForUser.ts +5 -1
  343. package/src/funcs/resultsManagementGetAllResults.ts +5 -1
  344. package/src/funcs/schoolsManagementGetAllSchools.ts +5 -1
  345. package/src/funcs/schoolsManagementGetClassesForSchool.ts +5 -1
  346. package/src/funcs/schoolsManagementGetCoursesForSchool.ts +5 -1
  347. package/src/funcs/schoolsManagementGetEnrollmentsForClassInSchool.ts +5 -1
  348. package/src/funcs/schoolsManagementGetEnrollmentsForSchool.ts +5 -1
  349. package/src/funcs/schoolsManagementGetLineItemsForSchool.ts +5 -1
  350. package/src/funcs/schoolsManagementGetStudentsForClassInSchool.ts +5 -1
  351. package/src/funcs/schoolsManagementGetStudentsForSchool.ts +5 -1
  352. package/src/funcs/schoolsManagementGetTeachersForClassInSchool.ts +5 -1
  353. package/src/funcs/schoolsManagementGetTeachersForSchool.ts +5 -1
  354. package/src/funcs/schoolsManagementGetTermsForSchool.ts +5 -1
  355. package/src/funcs/scoreScalesManagementGetAllScoreScales.ts +5 -1
  356. package/src/funcs/scoreScalesManagementGetScoreScalesForSchool.ts +5 -1
  357. package/src/funcs/studentsManagementGetAllStudents.ts +5 -1
  358. package/src/funcs/teachersManagementGetAllTeachers.ts +5 -1
  359. package/src/funcs/termsManagementGetAllTerms.ts +5 -1
  360. package/src/funcs/termsManagementGetGradingPeriodsForTerm.ts +5 -1
  361. package/src/funcs/usersManagementGetAllUsers.ts +5 -1
  362. package/src/lib/pagination.ts +26 -0
  363. package/src/types/operations.ts +33 -16
  364. package/test/classlink.test.ts +850 -1033
@@ -8,17 +8,17 @@
8
8
  * each API call to complete before proceeding.
9
9
  */
10
10
 
11
- import * as dotenv from "dotenv";
12
- import * as path from "path";
13
- import { fileURLToPath } from "url";
14
- import { afterAll, beforeAll, describe, expect, it } from "vitest";
11
+ import * as dotenv from 'dotenv';
12
+ import * as path from 'path';
13
+ import { fileURLToPath } from 'url';
14
+ import { afterAll, beforeAll, describe, expect, it } from 'vitest';
15
15
 
16
16
  const __filename = fileURLToPath(import.meta.url);
17
17
  const __dirname = path.dirname(__filename);
18
- dotenv.config({ path: path.join(__dirname, ".env") });
18
+ dotenv.config({ path: path.join(__dirname, '.env') });
19
19
 
20
- import { ClassLink } from "../src/clients/index.js";
21
- import { OneRoster } from "../src/index.js";
20
+ import { ClassLink } from '../src/clients/index.js';
21
+ import { OneRoster } from '../src/index.js';
22
22
 
23
23
  // Set test timeout to 30 seconds for API calls
24
24
  const TEST_TIMEOUT = 30000;
@@ -28,68 +28,56 @@ const TEST_TIMEOUT = 30000;
28
28
  // ============================================================================
29
29
 
30
30
  interface TestResult {
31
- endpoint: string;
32
- status: "passed" | "failed";
33
- error?: string;
31
+ endpoint: string;
32
+ status: 'passed' | 'failed';
33
+ error?: string;
34
34
  }
35
35
 
36
36
  const testResults: Map<string, TestResult[]> = new Map();
37
37
 
38
38
  function recordResult(
39
- category: string,
40
- endpoint: string,
41
- status: "passed" | "failed",
42
- error?: string,
39
+ category: string,
40
+ endpoint: string,
41
+ status: 'passed' | 'failed',
42
+ error?: string
43
43
  ) {
44
- if (!testResults.has(category)) {
45
- testResults.set(category, []);
46
- }
47
- testResults.get(category)!.push({ endpoint, status, error });
44
+ if (!testResults.has(category)) {
45
+ testResults.set(category, []);
46
+ }
47
+ testResults.get(category)!.push({ endpoint, status, error });
48
48
  }
49
49
 
50
50
  function printSummary() {
51
- console.log("\n");
52
- console.log(
53
- "╔══════════════════════════════════════════════════════════════════╗",
54
- );
55
- console.log(
56
- "║ CLASSLINK TEST RESULTS SUMMARY ║",
57
- );
58
- console.log(
59
- "╚══════════════════════════════════════════════════════════════════╝",
60
- );
61
-
62
- for (const [category, results] of testResults) {
63
- const passed = results.filter((r) => r.status === "passed");
64
- const failed = results.filter((r) => r.status === "failed");
65
-
66
- console.log(
67
- `\n┌──────────────────────────────────────────────────────────────────┐`,
68
- );
69
- console.log(
70
- `│ ${category} - ${passed.length} passed, ${failed.length} failed`,
71
- );
72
- console.log(
73
- `└──────────────────────────────────────────────────────────────────┘`,
74
- );
75
-
76
- if (passed.length > 0) {
77
- console.log("\n ✅ PASSED:");
78
- for (const r of passed) {
79
- console.log(` • ${r.endpoint}`);
80
- }
81
- }
51
+ console.log('\n');
52
+ console.log('╔══════════════════════════════════════════════════════════════════╗');
53
+ console.log('║ CLASSLINK TEST RESULTS SUMMARY ║');
54
+ console.log('╚══════════════════════════════════════════════════════════════════╝');
55
+
56
+ for (const [category, results] of testResults) {
57
+ const passed = results.filter((r) => r.status === 'passed');
58
+ const failed = results.filter((r) => r.status === 'failed');
59
+
60
+ console.log(`\n┌──────────────────────────────────────────────────────────────────┐`);
61
+ console.log(`│ ${category} - ${passed.length} passed, ${failed.length} failed`);
62
+ console.log(`└──────────────────────────────────────────────────────────────────┘`);
82
63
 
83
- if (failed.length > 0) {
84
- console.log("\n FAILED:");
85
- for (const r of failed) {
86
- const reason = r.error ? ` (${r.error})` : "";
87
- console.log(` • ${r.endpoint}${reason}`);
88
- }
64
+ if (passed.length > 0) {
65
+ console.log('\n PASSED:');
66
+ for (const r of passed) {
67
+ console.log(` ${r.endpoint}`);
68
+ }
69
+ }
70
+
71
+ if (failed.length > 0) {
72
+ console.log('\n ❌ FAILED:');
73
+ for (const r of failed) {
74
+ const reason = r.error ? ` (${r.error})` : '';
75
+ console.log(` • ${r.endpoint}${reason}`);
76
+ }
77
+ }
89
78
  }
90
- }
91
79
 
92
- console.log("\n" + "".repeat(70));
80
+ console.log('\n' + ''.repeat(70));
93
81
  }
94
82
 
95
83
  // ============================================================================
@@ -97,79 +85,79 @@ function printSummary() {
97
85
  // ============================================================================
98
86
 
99
87
  interface OAuth1Config {
100
- type: "oauth1";
101
- serverURL: string;
102
- clientID: string;
103
- clientSecret: string;
88
+ type: 'oauth1';
89
+ serverURL: string;
90
+ clientID: string;
91
+ clientSecret: string;
104
92
  }
105
93
 
106
94
  interface OAuth2Config {
107
- type: "oauth2";
108
- serverURL: string;
109
- clientID: string;
110
- clientSecret: string;
111
- tokenURL?: string;
95
+ type: 'oauth2';
96
+ serverURL: string;
97
+ clientID: string;
98
+ clientSecret: string;
99
+ tokenURL?: string;
112
100
  }
113
101
 
114
102
  interface BearerConfig {
115
- type: "bearer";
116
- serverURL: string;
117
- bearerToken: string;
103
+ type: 'bearer';
104
+ serverURL: string;
105
+ bearerToken: string;
118
106
  }
119
107
 
120
108
  type AuthConfig = OAuth1Config | OAuth2Config | BearerConfig;
121
109
 
122
110
  function getOAuth1Config(): OAuth1Config | null {
123
- const serverURL = process.env.CLASSLINK_OAUTH1_SERVER_URL;
124
- const clientID = process.env.CLASSLINK_OAUTH1_CLIENT_ID;
125
- const clientSecret = process.env.CLASSLINK_OAUTH1_CLIENT_SECRET;
126
- if (!serverURL || !clientID || !clientSecret) return null;
127
- return { type: "oauth1", serverURL, clientID, clientSecret };
111
+ const serverURL = process.env.CLASSLINK_OAUTH1_SERVER_URL;
112
+ const clientID = process.env.CLASSLINK_OAUTH1_CLIENT_ID;
113
+ const clientSecret = process.env.CLASSLINK_OAUTH1_CLIENT_SECRET;
114
+ if (!serverURL || !clientID || !clientSecret) return null;
115
+ return { type: 'oauth1', serverURL, clientID, clientSecret };
128
116
  }
129
117
 
130
118
  function getOAuth2Config(): OAuth2Config | null {
131
- const serverURL = process.env.CLASSLINK_OAUTH2_SERVER_URL;
132
- const clientID = process.env.CLASSLINK_OAUTH2_CLIENT_ID;
133
- const clientSecret = process.env.CLASSLINK_OAUTH2_CLIENT_SECRET;
134
- const tokenURL = process.env.CLASSLINK_OAUTH2_TOKEN_URL;
135
- if (!serverURL || !clientID || !clientSecret) return null;
136
- return { type: "oauth2", serverURL, clientID, clientSecret, tokenURL };
119
+ const serverURL = process.env.CLASSLINK_OAUTH2_SERVER_URL;
120
+ const clientID = process.env.CLASSLINK_OAUTH2_CLIENT_ID;
121
+ const clientSecret = process.env.CLASSLINK_OAUTH2_CLIENT_SECRET;
122
+ const tokenURL = process.env.CLASSLINK_OAUTH2_TOKEN_URL;
123
+ if (!serverURL || !clientID || !clientSecret) return null;
124
+ return { type: 'oauth2', serverURL, clientID, clientSecret, tokenURL };
137
125
  }
138
126
 
139
127
  function getBearerConfig(): BearerConfig | null {
140
- const serverURL = process.env.CLASSLINK_BEARER_SERVER_URL;
141
- const bearerToken = process.env.CLASSLINK_BEARER_TOKEN;
142
- if (!serverURL || !bearerToken) return null;
143
- return { type: "bearer", serverURL, bearerToken };
128
+ const serverURL = process.env.CLASSLINK_BEARER_SERVER_URL;
129
+ const bearerToken = process.env.CLASSLINK_BEARER_TOKEN;
130
+ if (!serverURL || !bearerToken) return null;
131
+ return { type: 'bearer', serverURL, bearerToken };
144
132
  }
145
133
 
146
134
  function createClient(config: AuthConfig): InstanceType<typeof ClassLink> {
147
- switch (config.type) {
148
- case "oauth1":
149
- return new ClassLink({
150
- serverURL: config.serverURL,
151
- security: {
152
- clientID: config.clientID,
153
- clientSecret: config.clientSecret,
154
- authType: "oauth1",
155
- },
156
- });
157
- case "oauth2":
158
- return new ClassLink({
159
- serverURL: config.serverURL,
160
- security: {
161
- clientID: config.clientID,
162
- clientSecret: config.clientSecret,
163
- tokenURL: config.tokenURL,
164
- authType: "oauth2",
165
- },
166
- });
167
- case "bearer":
168
- return new ClassLink({
169
- serverURL: config.serverURL,
170
- security: { bearerToken: config.bearerToken, authType: "bearer" },
171
- });
172
- }
135
+ switch (config.type) {
136
+ case 'oauth1':
137
+ return new ClassLink({
138
+ serverURL: config.serverURL,
139
+ security: {
140
+ clientID: config.clientID,
141
+ clientSecret: config.clientSecret,
142
+ authType: 'oauth1',
143
+ },
144
+ });
145
+ case 'oauth2':
146
+ return new ClassLink({
147
+ serverURL: config.serverURL,
148
+ security: {
149
+ clientID: config.clientID,
150
+ clientSecret: config.clientSecret,
151
+ tokenURL: config.tokenURL,
152
+ authType: 'oauth2',
153
+ },
154
+ });
155
+ case 'bearer':
156
+ return new ClassLink({
157
+ serverURL: config.serverURL,
158
+ security: { bearerToken: config.bearerToken, authType: 'bearer' },
159
+ });
160
+ }
173
161
  }
174
162
 
175
163
  // ============================================================================
@@ -177,954 +165,783 @@ function createClient(config: AuthConfig): InstanceType<typeof ClassLink> {
177
165
  // ============================================================================
178
166
 
179
167
  function createAPITestSuite(config: AuthConfig) {
180
- const authType = `CLASSLINK_${config.type.toUpperCase()}`;
181
- let client: InstanceType<typeof ClassLink>;
182
- let schoolId: string | undefined;
183
- let classId: string | undefined;
184
- let userId: string | undefined;
185
- let studentId: string | undefined;
186
- let teacherId: string | undefined;
187
- let termId: string | undefined;
188
- let courseId: string | undefined;
189
-
190
- describe(`${authType} API Operations`, () => {
191
- beforeAll(() => {
192
- client = createClient(config);
193
- });
194
-
195
- describe("Core Rostering", () => {
196
- it("academicSessions", async () => {
197
- try {
198
- for await (const page of await client.academicSessionsManagement.getAllAcademicSessions(
199
- { limit: 2 },
200
- )) {
201
- expect(Array.isArray(page.result.academicSessions || [])).toBe(
202
- true,
203
- );
204
- recordResult(authType, "academicSessions", "passed");
205
- break;
206
- }
207
- } catch (e) {
208
- recordResult(
209
- authType,
210
- "academicSessions",
211
- "failed",
212
- "Response validation",
213
- );
214
- throw e;
215
- }
216
- });
217
-
218
- it("orgs", async () => {
219
- try {
220
- for await (const page of await client.organizationsManagement.getAllOrgs(
221
- {
222
- limit: 2,
223
- },
224
- )) {
225
- expect(Array.isArray(page.result.orgs || [])).toBe(true);
226
- recordResult(authType, "orgs", "passed");
227
- break;
228
- }
229
- } catch (e) {
230
- recordResult(authType, "orgs", "failed", "Response validation");
231
- throw e;
232
- }
233
- });
234
-
235
- it("schools", async () => {
236
- try {
237
- for await (const page of await client.schoolsManagement.getAllSchools(
238
- {
239
- limit: 2,
240
- },
241
- )) {
242
- const items = page.result.orgs || [];
243
- expect(Array.isArray(items)).toBe(true);
244
- if (items[0]) schoolId = items[0].sourcedId;
245
- recordResult(authType, "schools", "passed");
246
- break;
247
- }
248
- } catch (e) {
249
- recordResult(authType, "schools", "failed", "Response validation");
250
- throw e;
251
- }
252
- });
253
-
254
- it("courses", async () => {
255
- try {
256
- for await (const page of await client.coursesManagement.getAllCourses(
257
- {
258
- limit: 2,
259
- },
260
- )) {
261
- const items = page.result.courses || [];
262
- expect(Array.isArray(items)).toBe(true);
263
- if (items[0]) courseId = items[0].sourcedId;
264
- recordResult(authType, "courses", "passed");
265
- break;
266
- }
267
- } catch (e) {
268
- recordResult(authType, "courses", "failed", "Response validation");
269
- throw e;
270
- }
271
- });
272
-
273
- it("classes", async () => {
274
- try {
275
- for await (const page of await client.classesManagement.getAllClasses(
276
- {
277
- limit: 2,
278
- },
279
- )) {
280
- const items = page.result.classes || [];
281
- expect(Array.isArray(items)).toBe(true);
282
- if (items[0]) classId = items[0].sourcedId;
283
- recordResult(authType, "classes", "passed");
284
- break;
285
- }
286
- } catch (e) {
287
- recordResult(authType, "classes", "failed", "Response validation");
288
- throw e;
289
- }
290
- });
291
-
292
- it("users", async () => {
293
- try {
294
- for await (const page of await client.usersManagement.getAllUsers({
295
- limit: 2,
296
- })) {
297
- const items = page.result.users || [];
298
- expect(Array.isArray(items)).toBe(true);
299
- if (items[0]) userId = items[0].sourcedId;
300
- recordResult(authType, "users", "passed");
301
- break;
302
- }
303
- } catch (e) {
304
- recordResult(authType, "users", "failed", "Response validation");
305
- throw e;
306
- }
307
- });
308
-
309
- it("students", async () => {
310
- try {
311
- for await (const page of await client.studentsManagement.getAllStudents(
312
- {
313
- limit: 2,
314
- },
315
- )) {
316
- const items = page.result.users || [];
317
- expect(Array.isArray(items)).toBe(true);
318
- if (items[0]) studentId = items[0].sourcedId;
319
- recordResult(authType, "students", "passed");
320
- break;
321
- }
322
- } catch (e) {
323
- recordResult(authType, "students", "failed", "Response validation");
324
- throw e;
325
- }
326
- });
327
-
328
- it("teachers", async () => {
329
- try {
330
- for await (const page of await client.teachersManagement.getAllTeachers(
331
- {
332
- limit: 2,
333
- },
334
- )) {
335
- const items = page.result.users || [];
336
- expect(Array.isArray(items)).toBe(true);
337
- if (items[0]) teacherId = items[0].sourcedId;
338
- recordResult(authType, "teachers", "passed");
339
- break;
340
- }
341
- } catch (e) {
342
- recordResult(authType, "teachers", "failed", "Response validation");
343
- throw e;
344
- }
345
- });
346
-
347
- it("enrollments", async () => {
348
- try {
349
- for await (const page of await client.enrollmentsManagement.getAllEnrollments(
350
- {
351
- limit: 2,
352
- },
353
- )) {
354
- expect(Array.isArray(page.result.enrollments || [])).toBe(true);
355
- recordResult(authType, "enrollments", "passed");
356
- break;
357
- }
358
- } catch (e) {
359
- recordResult(
360
- authType,
361
- "enrollments",
362
- "failed",
363
- "Response validation",
364
- );
365
- throw e;
366
- }
367
- });
368
-
369
- it("terms", async () => {
370
- try {
371
- for await (const page of await client.termsManagement.getAllTerms({
372
- limit: 2,
373
- })) {
374
- const items = page.result.academicSessions || [];
375
- expect(Array.isArray(items)).toBe(true);
376
- if (items[0]) termId = items[0].sourcedId;
377
- recordResult(authType, "terms", "passed");
378
- break;
379
- }
380
- } catch (e) {
381
- recordResult(authType, "terms", "failed", "Response validation");
382
- throw e;
383
- }
384
- });
385
-
386
- it("gradingPeriods", async () => {
387
- try {
388
- for await (const page of await client.gradingPeriodsManagement.getAllGradingPeriods(
389
- { limit: 2 },
390
- )) {
391
- expect(Array.isArray(page.result.academicSessions || [])).toBe(
392
- true,
393
- );
394
- recordResult(authType, "gradingPeriods", "passed");
395
- break;
396
- }
397
- } catch (e) {
398
- recordResult(
399
- authType,
400
- "gradingPeriods",
401
- "failed",
402
- "Response validation",
403
- );
404
- throw e;
405
- }
406
- });
407
- });
408
-
409
- describe("Nested Queries", () => {
410
- it("schools/{id}/classes", async () => {
411
- if (!schoolId) {
412
- recordResult(
413
- authType,
414
- "schools/{id}/classes",
415
- "failed",
416
- "No school ID",
417
- );
418
- return;
419
- }
420
- try {
421
- for await (const page of await client.classesManagement.getClassesForSchool(
422
- {
423
- schoolSourcedId: schoolId,
424
- limit: 2,
425
- },
426
- )) {
427
- expect(Array.isArray(page.result.classes || [])).toBe(true);
428
- recordResult(authType, "schools/{id}/classes", "passed");
429
- break;
430
- }
431
- } catch (e) {
432
- recordResult(
433
- authType,
434
- "schools/{id}/classes",
435
- "failed",
436
- "Response validation",
437
- );
438
- throw e;
439
- }
440
- });
441
-
442
- it("schools/{id}/students", async () => {
443
- if (!schoolId) {
444
- recordResult(
445
- authType,
446
- "schools/{id}/students",
447
- "failed",
448
- "No school ID",
449
- );
450
- return;
451
- }
452
- try {
453
- for await (const page of await client.schoolsManagement.getStudentsForSchool(
454
- {
455
- schoolSourcedId: schoolId,
456
- limit: 2,
457
- },
458
- )) {
459
- expect(Array.isArray(page.result.users || [])).toBe(true);
460
- recordResult(authType, "schools/{id}/students", "passed");
461
- break;
462
- }
463
- } catch (e) {
464
- recordResult(
465
- authType,
466
- "schools/{id}/students",
467
- "failed",
468
- "Response validation",
469
- );
470
- throw e;
471
- }
472
- });
473
-
474
- it("schools/{id}/teachers", async () => {
475
- if (!schoolId) {
476
- recordResult(
477
- authType,
478
- "schools/{id}/teachers",
479
- "failed",
480
- "No school ID",
481
- );
482
- return;
483
- }
484
- try {
485
- for await (const page of await client.schoolsManagement.getTeachersForSchool(
486
- {
487
- schoolSourcedId: schoolId,
488
- limit: 2,
489
- },
490
- )) {
491
- expect(Array.isArray(page.result.users || [])).toBe(true);
492
- recordResult(authType, "schools/{id}/teachers", "passed");
493
- break;
494
- }
495
- } catch (e) {
496
- recordResult(
497
- authType,
498
- "schools/{id}/teachers",
499
- "failed",
500
- "Response validation",
501
- );
502
- throw e;
503
- }
504
- });
505
-
506
- it("schools/{id}/courses", async () => {
507
- if (!schoolId) {
508
- recordResult(
509
- authType,
510
- "schools/{id}/courses",
511
- "failed",
512
- "No school ID",
513
- );
514
- return;
515
- }
516
- try {
517
- for await (const page of await client.schoolsManagement.getCoursesForSchool(
518
- {
519
- schoolSourcedId: schoolId,
520
- limit: 2,
521
- },
522
- )) {
523
- expect(Array.isArray(page.result.courses || [])).toBe(true);
524
- recordResult(authType, "schools/{id}/courses", "passed");
525
- break;
526
- }
527
- } catch (e) {
528
- recordResult(
529
- authType,
530
- "schools/{id}/courses",
531
- "failed",
532
- "Response validation",
533
- );
534
- throw e;
535
- }
536
- });
537
-
538
- it("schools/{id}/terms", async () => {
539
- if (!schoolId) {
540
- recordResult(
541
- authType,
542
- "schools/{id}/terms",
543
- "failed",
544
- "No school ID",
545
- );
546
- return;
547
- }
548
- try {
549
- for await (const page of await client.schoolsManagement.getTermsForSchool(
550
- {
551
- schoolSourcedId: schoolId,
552
- limit: 2,
553
- },
554
- )) {
555
- expect(Array.isArray(page.result.academicSessions || [])).toBe(
556
- true,
557
- );
558
- recordResult(authType, "schools/{id}/terms", "passed");
559
- break;
560
- }
561
- } catch (e) {
562
- recordResult(
563
- authType,
564
- "schools/{id}/terms",
565
- "failed",
566
- "Response validation",
567
- );
568
- throw e;
569
- }
570
- });
571
-
572
- it("classes/{id}/students", async () => {
573
- if (!classId) {
574
- recordResult(
575
- authType,
576
- "classes/{id}/students",
577
- "failed",
578
- "No class ID",
579
- );
580
- return;
581
- }
582
- try {
583
- for await (const page of await client.classesManagement.getStudentsForClass(
584
- {
585
- classSourcedId: classId,
586
- limit: 2,
587
- },
588
- )) {
589
- expect(Array.isArray(page.result.users || [])).toBe(true);
590
- recordResult(authType, "classes/{id}/students", "passed");
591
- break;
592
- }
593
- } catch (e) {
594
- recordResult(
595
- authType,
596
- "classes/{id}/students",
597
- "failed",
598
- "Response validation",
599
- );
600
- throw e;
601
- }
602
- });
603
-
604
- it("classes/{id}/teachers", async () => {
605
- if (!classId) {
606
- recordResult(
607
- authType,
608
- "classes/{id}/teachers",
609
- "failed",
610
- "No class ID",
611
- );
612
- return;
613
- }
614
- try {
615
- for await (const page of await client.classesManagement.getTeachersForClass(
616
- {
617
- classSourcedId: classId,
618
- limit: 2,
619
- },
620
- )) {
621
- expect(Array.isArray(page.result.users || [])).toBe(true);
622
- recordResult(authType, "classes/{id}/teachers", "passed");
623
- break;
624
- }
625
- } catch (e) {
626
- recordResult(
627
- authType,
628
- "classes/{id}/teachers",
629
- "failed",
630
- "Response validation",
631
- );
632
- throw e;
633
- }
634
- });
635
-
636
- it("users/{id}/classes", async () => {
637
- if (!userId) {
638
- recordResult(authType, "users/{id}/classes", "failed", "No user ID");
639
- return;
640
- }
641
- try {
642
- for await (const page of await client.classesManagement.getClassesForUser(
643
- {
644
- userSourcedId: userId,
645
- limit: 2,
646
- },
647
- )) {
648
- expect(Array.isArray(page.result.classes || [])).toBe(true);
649
- recordResult(authType, "users/{id}/classes", "passed");
650
- break;
651
- }
652
- } catch (e) {
653
- recordResult(
654
- authType,
655
- "users/{id}/classes",
656
- "failed",
657
- "Response validation",
658
- );
659
- throw e;
660
- }
661
- });
662
-
663
- it("teachers/{id}/classes", async () => {
664
- if (!teacherId) {
665
- recordResult(
666
- authType,
667
- "teachers/{id}/classes",
668
- "failed",
669
- "No teacher ID",
670
- );
671
- return;
672
- }
673
- try {
674
- for await (const page of await client.classesManagement.getClassesForTeacher(
675
- {
676
- teacherSourcedId: teacherId,
677
- limit: 2,
678
- },
679
- )) {
680
- expect(Array.isArray(page.result.classes || [])).toBe(true);
681
- recordResult(authType, "teachers/{id}/classes", "passed");
682
- break;
683
- }
684
- } catch (e) {
685
- recordResult(
686
- authType,
687
- "teachers/{id}/classes",
688
- "failed",
689
- "Response validation",
690
- );
691
- throw e;
692
- }
693
- });
694
-
695
- it("students/{id}/classes", async () => {
696
- if (!studentId) {
697
- recordResult(
698
- authType,
699
- "students/{id}/classes",
700
- "failed",
701
- "No student ID",
702
- );
703
- return;
704
- }
705
- try {
706
- for await (const page of await client.classesManagement.getClassesForStudent(
707
- {
708
- studentSourcedId: studentId,
709
- limit: 2,
710
- },
711
- )) {
712
- expect(Array.isArray(page.result.classes || [])).toBe(true);
713
- recordResult(authType, "students/{id}/classes", "passed");
714
- break;
715
- }
716
- } catch (e) {
717
- recordResult(
718
- authType,
719
- "students/{id}/classes",
720
- "failed",
721
- "Response validation",
722
- );
723
- throw e;
724
- }
725
- });
726
-
727
- it("terms/{id}/classes", async () => {
728
- if (!termId) {
729
- recordResult(authType, "terms/{id}/classes", "failed", "No term ID");
730
- return;
731
- }
732
- try {
733
- for await (const page of await client.classesManagement.getClassesForTerm(
734
- {
735
- termSourcedId: termId,
736
- limit: 2,
737
- },
738
- )) {
739
- expect(Array.isArray(page.result.classes || [])).toBe(true);
740
- recordResult(authType, "terms/{id}/classes", "passed");
741
- break;
742
- }
743
- } catch (e) {
744
- recordResult(
745
- authType,
746
- "terms/{id}/classes",
747
- "failed",
748
- "Response validation",
749
- );
750
- throw e;
751
- }
752
- });
753
-
754
- it("courses/{id}/classes", async () => {
755
- if (!courseId) {
756
- recordResult(
757
- authType,
758
- "courses/{id}/classes",
759
- "failed",
760
- "No course ID",
761
- );
762
- return;
763
- }
764
- try {
765
- for await (const page of await client.coursesManagement.getClassesForCourse(
766
- {
767
- courseSourcedId: courseId,
768
- limit: 2,
769
- },
770
- )) {
771
- expect(Array.isArray(page.result.classes || [])).toBe(true);
772
- recordResult(authType, "courses/{id}/classes", "passed");
773
- break;
774
- }
775
- } catch (e) {
776
- recordResult(
777
- authType,
778
- "courses/{id}/classes",
779
- "failed",
780
- "Response validation",
781
- );
782
- throw e;
783
- }
784
- });
785
-
786
- it("terms/{id}/gradingPeriods", async () => {
787
- if (!termId) {
788
- recordResult(
789
- authType,
790
- "terms/{id}/gradingPeriods",
791
- "failed",
792
- "No term ID",
793
- );
794
- return;
795
- }
796
- try {
797
- for await (const page of await client.termsManagement.getGradingPeriodsForTerm(
798
- {
799
- termSourcedId: termId,
800
- limit: 2,
801
- },
802
- )) {
803
- expect(Array.isArray(page.result.academicSessions || [])).toBe(
804
- true,
805
- );
806
- recordResult(authType, "terms/{id}/gradingPeriods", "passed");
807
- break;
808
- }
809
- } catch (e) {
810
- recordResult(
811
- authType,
812
- "terms/{id}/gradingPeriods",
813
- "failed",
814
- "Response validation",
815
- );
816
- }
817
- });
818
-
819
- it("GET /terms/{id}/classes", async () => {
820
- if (!termId) {
821
- recordResult(
822
- authType,
823
- "GET /terms/{id}/classes",
824
- "failed",
825
- "No term ID available",
826
- );
827
- return;
828
- }
829
- try {
830
- for await (const page of await client.classesManagement.getClassesForTerm(
831
- { termSourcedId: termId, limit: 2 },
832
- )) {
833
- expect(Array.isArray(page.result.classes || [])).toBe(true);
834
- recordResult(authType, "GET /terms/{id}/classes", "passed");
835
- break;
836
- }
837
- } catch (e: any) {
838
- recordResult(
839
- authType,
840
- "GET /terms/{id}/classes",
841
- "failed",
842
- e.message || "Unknown error",
843
- );
844
- throw e;
845
- }
846
- });
847
-
848
- it("GET /courses/{id}/classes", async () => {
849
- if (!courseId) {
850
- recordResult(
851
- authType,
852
- "GET /courses/{id}/classes",
853
- "failed",
854
- "No course ID available",
855
- );
856
- return;
857
- }
858
- try {
859
- for await (const page of await client.coursesManagement.getClassesForCourse(
860
- { courseSourcedId: courseId, limit: 2 },
861
- )) {
862
- expect(Array.isArray(page.result.classes || [])).toBe(true);
863
- recordResult(authType, "GET /courses/{id}/classes", "passed");
864
- break;
865
- }
866
- } catch (e: any) {
867
- recordResult(
868
- authType,
869
- "GET /courses/{id}/classes",
870
- "failed",
871
- e.message || "Unknown error",
872
- );
873
- throw e;
874
- }
875
- });
876
-
877
- it("GET /terms/{id}/gradingPeriods", async () => {
878
- if (!termId) {
879
- recordResult(
880
- authType,
881
- "GET /terms/{id}/gradingPeriods",
882
- "failed",
883
- "No term ID available",
884
- );
885
- return;
886
- }
887
- try {
888
- for await (const page of await client.termsManagement.getGradingPeriodsForTerm(
889
- { termSourcedId: termId, limit: 2 },
890
- )) {
891
- expect(Array.isArray(page.result.academicSessions || [])).toBe(
892
- true,
893
- );
894
- recordResult(authType, "GET /terms/{id}/gradingPeriods", "passed");
895
- break;
896
- }
897
- } catch (e: any) {
898
- recordResult(
899
- authType,
900
- "GET /terms/{id}/gradingPeriods",
901
- "failed",
902
- e.message || "Unknown error",
903
- );
904
- throw e;
905
- }
906
- });
168
+ const authType = `CLASSLINK_${config.type.toUpperCase()}`;
169
+ let client: InstanceType<typeof ClassLink>;
170
+ let schoolId: string | undefined;
171
+ let classId: string | undefined;
172
+ let userId: string | undefined;
173
+ let studentId: string | undefined;
174
+ let teacherId: string | undefined;
175
+ let termId: string | undefined;
176
+ let courseId: string | undefined;
177
+
178
+ describe(`${authType} API Operations`, () => {
179
+ beforeAll(() => {
180
+ client = createClient(config);
181
+ });
182
+
183
+ describe('Core Rostering', () => {
184
+ it('academicSessions', async () => {
185
+ try {
186
+ for await (const page of await client.academicSessionsManagement.getAllAcademicSessions(
187
+ { limit: 2 }
188
+ )) {
189
+ expect(Array.isArray(page.result.academicSessions || [])).toBe(true);
190
+ recordResult(authType, 'academicSessions', 'passed');
191
+ break;
192
+ }
193
+ } catch (e) {
194
+ recordResult(authType, 'academicSessions', 'failed', 'Response validation');
195
+ throw e;
196
+ }
197
+ });
198
+
199
+ it('orgs', async () => {
200
+ try {
201
+ for await (const page of await client.organizationsManagement.getAllOrgs({
202
+ limit: 2,
203
+ })) {
204
+ expect(Array.isArray(page.result.orgs || [])).toBe(true);
205
+ recordResult(authType, 'orgs', 'passed');
206
+ break;
207
+ }
208
+ } catch (e) {
209
+ recordResult(authType, 'orgs', 'failed', 'Response validation');
210
+ throw e;
211
+ }
212
+ });
213
+
214
+ it('schools', async () => {
215
+ try {
216
+ for await (const page of await client.schoolsManagement.getAllSchools({
217
+ limit: 2,
218
+ })) {
219
+ const items = page.result.orgs || [];
220
+ expect(Array.isArray(items)).toBe(true);
221
+ if (items[0]) schoolId = items[0].sourcedId;
222
+ recordResult(authType, 'schools', 'passed');
223
+ break;
224
+ }
225
+ } catch (e) {
226
+ recordResult(authType, 'schools', 'failed', 'Response validation');
227
+ throw e;
228
+ }
229
+ });
230
+
231
+ it('courses', async () => {
232
+ try {
233
+ for await (const page of await client.coursesManagement.getAllCourses({
234
+ limit: 2,
235
+ })) {
236
+ const items = page.result.courses || [];
237
+ expect(Array.isArray(items)).toBe(true);
238
+ if (items[0]) courseId = items[0].sourcedId;
239
+ recordResult(authType, 'courses', 'passed');
240
+ break;
241
+ }
242
+ } catch (e) {
243
+ recordResult(authType, 'courses', 'failed', 'Response validation');
244
+ throw e;
245
+ }
246
+ });
247
+
248
+ it('classes', async () => {
249
+ try {
250
+ for await (const page of await client.classesManagement.getAllClasses({
251
+ limit: 2,
252
+ })) {
253
+ const items = page.result.classes || [];
254
+ expect(Array.isArray(items)).toBe(true);
255
+ if (items[0]) classId = items[0].sourcedId;
256
+ recordResult(authType, 'classes', 'passed');
257
+ break;
258
+ }
259
+ } catch (e) {
260
+ recordResult(authType, 'classes', 'failed', 'Response validation');
261
+ throw e;
262
+ }
263
+ });
264
+
265
+ it('users', async () => {
266
+ try {
267
+ for await (const page of await client.usersManagement.getAllUsers({
268
+ limit: 2,
269
+ })) {
270
+ const items = page.result.users || [];
271
+ expect(Array.isArray(items)).toBe(true);
272
+ if (items[0]) userId = items[0].sourcedId;
273
+ recordResult(authType, 'users', 'passed');
274
+ break;
275
+ }
276
+ } catch (e) {
277
+ recordResult(authType, 'users', 'failed', 'Response validation');
278
+ throw e;
279
+ }
280
+ });
281
+
282
+ it('students', async () => {
283
+ try {
284
+ for await (const page of await client.studentsManagement.getAllStudents({
285
+ limit: 2,
286
+ })) {
287
+ const items = page.result.users || [];
288
+ expect(Array.isArray(items)).toBe(true);
289
+ if (items[0]) studentId = items[0].sourcedId;
290
+ recordResult(authType, 'students', 'passed');
291
+ break;
292
+ }
293
+ } catch (e) {
294
+ recordResult(authType, 'students', 'failed', 'Response validation');
295
+ throw e;
296
+ }
297
+ });
298
+
299
+ it('teachers', async () => {
300
+ try {
301
+ for await (const page of await client.teachersManagement.getAllTeachers({
302
+ limit: 2,
303
+ })) {
304
+ const items = page.result.users || [];
305
+ expect(Array.isArray(items)).toBe(true);
306
+ if (items[0]) teacherId = items[0].sourcedId;
307
+ recordResult(authType, 'teachers', 'passed');
308
+ break;
309
+ }
310
+ } catch (e) {
311
+ recordResult(authType, 'teachers', 'failed', 'Response validation');
312
+ throw e;
313
+ }
314
+ });
315
+
316
+ it('enrollments', async () => {
317
+ try {
318
+ for await (const page of await client.enrollmentsManagement.getAllEnrollments({
319
+ limit: 2,
320
+ })) {
321
+ expect(Array.isArray(page.result.enrollments || [])).toBe(true);
322
+ recordResult(authType, 'enrollments', 'passed');
323
+ break;
324
+ }
325
+ } catch (e) {
326
+ recordResult(authType, 'enrollments', 'failed', 'Response validation');
327
+ throw e;
328
+ }
329
+ });
330
+
331
+ it('terms', async () => {
332
+ try {
333
+ for await (const page of await client.termsManagement.getAllTerms({
334
+ limit: 2,
335
+ })) {
336
+ const items = page.result.academicSessions || [];
337
+ expect(Array.isArray(items)).toBe(true);
338
+ if (items[0]) termId = items[0].sourcedId;
339
+ recordResult(authType, 'terms', 'passed');
340
+ break;
341
+ }
342
+ } catch (e) {
343
+ recordResult(authType, 'terms', 'failed', 'Response validation');
344
+ throw e;
345
+ }
346
+ });
347
+
348
+ it('gradingPeriods', async () => {
349
+ try {
350
+ for await (const page of await client.gradingPeriodsManagement.getAllGradingPeriods(
351
+ { limit: 2 }
352
+ )) {
353
+ expect(Array.isArray(page.result.academicSessions || [])).toBe(true);
354
+ recordResult(authType, 'gradingPeriods', 'passed');
355
+ break;
356
+ }
357
+ } catch (e) {
358
+ recordResult(authType, 'gradingPeriods', 'failed', 'Response validation');
359
+ throw e;
360
+ }
361
+ });
362
+ });
363
+
364
+ describe('Nested Queries', () => {
365
+ it('schools/{id}/classes', async () => {
366
+ if (!schoolId) {
367
+ recordResult(authType, 'schools/{id}/classes', 'failed', 'No school ID');
368
+ return;
369
+ }
370
+ try {
371
+ for await (const page of await client.classesManagement.getClassesForSchool({
372
+ schoolSourcedId: schoolId,
373
+ limit: 2,
374
+ })) {
375
+ expect(Array.isArray(page.result.classes || [])).toBe(true);
376
+ recordResult(authType, 'schools/{id}/classes', 'passed');
377
+ break;
378
+ }
379
+ } catch (e) {
380
+ recordResult(authType, 'schools/{id}/classes', 'failed', 'Response validation');
381
+ throw e;
382
+ }
383
+ });
384
+
385
+ it('schools/{id}/students', async () => {
386
+ if (!schoolId) {
387
+ recordResult(authType, 'schools/{id}/students', 'failed', 'No school ID');
388
+ return;
389
+ }
390
+ try {
391
+ for await (const page of await client.schoolsManagement.getStudentsForSchool({
392
+ schoolSourcedId: schoolId,
393
+ limit: 2,
394
+ })) {
395
+ expect(Array.isArray(page.result.users || [])).toBe(true);
396
+ recordResult(authType, 'schools/{id}/students', 'passed');
397
+ break;
398
+ }
399
+ } catch (e) {
400
+ recordResult(
401
+ authType,
402
+ 'schools/{id}/students',
403
+ 'failed',
404
+ 'Response validation'
405
+ );
406
+ throw e;
407
+ }
408
+ });
409
+
410
+ it('schools/{id}/teachers', async () => {
411
+ if (!schoolId) {
412
+ recordResult(authType, 'schools/{id}/teachers', 'failed', 'No school ID');
413
+ return;
414
+ }
415
+ try {
416
+ for await (const page of await client.schoolsManagement.getTeachersForSchool({
417
+ schoolSourcedId: schoolId,
418
+ limit: 2,
419
+ })) {
420
+ expect(Array.isArray(page.result.users || [])).toBe(true);
421
+ recordResult(authType, 'schools/{id}/teachers', 'passed');
422
+ break;
423
+ }
424
+ } catch (e) {
425
+ recordResult(
426
+ authType,
427
+ 'schools/{id}/teachers',
428
+ 'failed',
429
+ 'Response validation'
430
+ );
431
+ throw e;
432
+ }
433
+ });
434
+
435
+ it('schools/{id}/courses', async () => {
436
+ if (!schoolId) {
437
+ recordResult(authType, 'schools/{id}/courses', 'failed', 'No school ID');
438
+ return;
439
+ }
440
+ try {
441
+ for await (const page of await client.schoolsManagement.getCoursesForSchool({
442
+ schoolSourcedId: schoolId,
443
+ limit: 2,
444
+ })) {
445
+ expect(Array.isArray(page.result.courses || [])).toBe(true);
446
+ recordResult(authType, 'schools/{id}/courses', 'passed');
447
+ break;
448
+ }
449
+ } catch (e) {
450
+ recordResult(authType, 'schools/{id}/courses', 'failed', 'Response validation');
451
+ throw e;
452
+ }
453
+ });
454
+
455
+ it('schools/{id}/terms', async () => {
456
+ if (!schoolId) {
457
+ recordResult(authType, 'schools/{id}/terms', 'failed', 'No school ID');
458
+ return;
459
+ }
460
+ try {
461
+ for await (const page of await client.schoolsManagement.getTermsForSchool({
462
+ schoolSourcedId: schoolId,
463
+ limit: 2,
464
+ })) {
465
+ expect(Array.isArray(page.result.academicSessions || [])).toBe(true);
466
+ recordResult(authType, 'schools/{id}/terms', 'passed');
467
+ break;
468
+ }
469
+ } catch (e) {
470
+ recordResult(authType, 'schools/{id}/terms', 'failed', 'Response validation');
471
+ throw e;
472
+ }
473
+ });
474
+
475
+ it('classes/{id}/students', async () => {
476
+ if (!classId) {
477
+ recordResult(authType, 'classes/{id}/students', 'failed', 'No class ID');
478
+ return;
479
+ }
480
+ try {
481
+ for await (const page of await client.classesManagement.getStudentsForClass({
482
+ classSourcedId: classId,
483
+ limit: 2,
484
+ })) {
485
+ expect(Array.isArray(page.result.users || [])).toBe(true);
486
+ recordResult(authType, 'classes/{id}/students', 'passed');
487
+ break;
488
+ }
489
+ } catch (e) {
490
+ recordResult(
491
+ authType,
492
+ 'classes/{id}/students',
493
+ 'failed',
494
+ 'Response validation'
495
+ );
496
+ throw e;
497
+ }
498
+ });
499
+
500
+ it('classes/{id}/teachers', async () => {
501
+ if (!classId) {
502
+ recordResult(authType, 'classes/{id}/teachers', 'failed', 'No class ID');
503
+ return;
504
+ }
505
+ try {
506
+ for await (const page of await client.classesManagement.getTeachersForClass({
507
+ classSourcedId: classId,
508
+ limit: 2,
509
+ })) {
510
+ expect(Array.isArray(page.result.users || [])).toBe(true);
511
+ recordResult(authType, 'classes/{id}/teachers', 'passed');
512
+ break;
513
+ }
514
+ } catch (e) {
515
+ recordResult(
516
+ authType,
517
+ 'classes/{id}/teachers',
518
+ 'failed',
519
+ 'Response validation'
520
+ );
521
+ throw e;
522
+ }
523
+ });
524
+
525
+ it('users/{id}/classes', async () => {
526
+ if (!userId) {
527
+ recordResult(authType, 'users/{id}/classes', 'failed', 'No user ID');
528
+ return;
529
+ }
530
+ try {
531
+ for await (const page of await client.classesManagement.getClassesForUser({
532
+ userSourcedId: userId,
533
+ limit: 2,
534
+ })) {
535
+ expect(Array.isArray(page.result.classes || [])).toBe(true);
536
+ recordResult(authType, 'users/{id}/classes', 'passed');
537
+ break;
538
+ }
539
+ } catch (e) {
540
+ recordResult(authType, 'users/{id}/classes', 'failed', 'Response validation');
541
+ throw e;
542
+ }
543
+ });
544
+
545
+ it('teachers/{id}/classes', async () => {
546
+ if (!teacherId) {
547
+ recordResult(authType, 'teachers/{id}/classes', 'failed', 'No teacher ID');
548
+ return;
549
+ }
550
+ try {
551
+ for await (const page of await client.classesManagement.getClassesForTeacher({
552
+ teacherSourcedId: teacherId,
553
+ limit: 2,
554
+ })) {
555
+ expect(Array.isArray(page.result.classes || [])).toBe(true);
556
+ recordResult(authType, 'teachers/{id}/classes', 'passed');
557
+ break;
558
+ }
559
+ } catch (e) {
560
+ recordResult(
561
+ authType,
562
+ 'teachers/{id}/classes',
563
+ 'failed',
564
+ 'Response validation'
565
+ );
566
+ throw e;
567
+ }
568
+ });
569
+
570
+ it('students/{id}/classes', async () => {
571
+ if (!studentId) {
572
+ recordResult(authType, 'students/{id}/classes', 'failed', 'No student ID');
573
+ return;
574
+ }
575
+ try {
576
+ for await (const page of await client.classesManagement.getClassesForStudent({
577
+ studentSourcedId: studentId,
578
+ limit: 2,
579
+ })) {
580
+ expect(Array.isArray(page.result.classes || [])).toBe(true);
581
+ recordResult(authType, 'students/{id}/classes', 'passed');
582
+ break;
583
+ }
584
+ } catch (e) {
585
+ recordResult(
586
+ authType,
587
+ 'students/{id}/classes',
588
+ 'failed',
589
+ 'Response validation'
590
+ );
591
+ throw e;
592
+ }
593
+ });
594
+
595
+ it('terms/{id}/classes', async () => {
596
+ if (!termId) {
597
+ recordResult(authType, 'terms/{id}/classes', 'failed', 'No term ID');
598
+ return;
599
+ }
600
+ try {
601
+ for await (const page of await client.classesManagement.getClassesForTerm({
602
+ termSourcedId: termId,
603
+ limit: 2,
604
+ })) {
605
+ expect(Array.isArray(page.result.classes || [])).toBe(true);
606
+ recordResult(authType, 'terms/{id}/classes', 'passed');
607
+ break;
608
+ }
609
+ } catch (e) {
610
+ recordResult(authType, 'terms/{id}/classes', 'failed', 'Response validation');
611
+ throw e;
612
+ }
613
+ });
614
+
615
+ it('courses/{id}/classes', async () => {
616
+ if (!courseId) {
617
+ recordResult(authType, 'courses/{id}/classes', 'failed', 'No course ID');
618
+ return;
619
+ }
620
+ try {
621
+ for await (const page of await client.coursesManagement.getClassesForCourse({
622
+ courseSourcedId: courseId,
623
+ limit: 2,
624
+ })) {
625
+ expect(Array.isArray(page.result.classes || [])).toBe(true);
626
+ recordResult(authType, 'courses/{id}/classes', 'passed');
627
+ break;
628
+ }
629
+ } catch (e) {
630
+ recordResult(authType, 'courses/{id}/classes', 'failed', 'Response validation');
631
+ throw e;
632
+ }
633
+ });
634
+
635
+ it('terms/{id}/gradingPeriods', async () => {
636
+ if (!termId) {
637
+ recordResult(authType, 'terms/{id}/gradingPeriods', 'failed', 'No term ID');
638
+ return;
639
+ }
640
+ try {
641
+ for await (const page of await client.termsManagement.getGradingPeriodsForTerm({
642
+ termSourcedId: termId,
643
+ limit: 2,
644
+ })) {
645
+ expect(Array.isArray(page.result.academicSessions || [])).toBe(true);
646
+ recordResult(authType, 'terms/{id}/gradingPeriods', 'passed');
647
+ break;
648
+ }
649
+ } catch (e) {
650
+ recordResult(
651
+ authType,
652
+ 'terms/{id}/gradingPeriods',
653
+ 'failed',
654
+ 'Response validation'
655
+ );
656
+ }
657
+ });
658
+
659
+ it('GET /terms/{id}/classes', async () => {
660
+ if (!termId) {
661
+ recordResult(
662
+ authType,
663
+ 'GET /terms/{id}/classes',
664
+ 'failed',
665
+ 'No term ID available'
666
+ );
667
+ return;
668
+ }
669
+ try {
670
+ for await (const page of await client.classesManagement.getClassesForTerm({
671
+ termSourcedId: termId,
672
+ limit: 2,
673
+ })) {
674
+ expect(Array.isArray(page.result.classes || [])).toBe(true);
675
+ recordResult(authType, 'GET /terms/{id}/classes', 'passed');
676
+ break;
677
+ }
678
+ } catch (e: any) {
679
+ recordResult(
680
+ authType,
681
+ 'GET /terms/{id}/classes',
682
+ 'failed',
683
+ e.message || 'Unknown error'
684
+ );
685
+ throw e;
686
+ }
687
+ });
688
+
689
+ it('GET /courses/{id}/classes', async () => {
690
+ if (!courseId) {
691
+ recordResult(
692
+ authType,
693
+ 'GET /courses/{id}/classes',
694
+ 'failed',
695
+ 'No course ID available'
696
+ );
697
+ return;
698
+ }
699
+ try {
700
+ for await (const page of await client.coursesManagement.getClassesForCourse({
701
+ courseSourcedId: courseId,
702
+ limit: 2,
703
+ })) {
704
+ expect(Array.isArray(page.result.classes || [])).toBe(true);
705
+ recordResult(authType, 'GET /courses/{id}/classes', 'passed');
706
+ break;
707
+ }
708
+ } catch (e: any) {
709
+ recordResult(
710
+ authType,
711
+ 'GET /courses/{id}/classes',
712
+ 'failed',
713
+ e.message || 'Unknown error'
714
+ );
715
+ throw e;
716
+ }
717
+ });
718
+
719
+ it('GET /terms/{id}/gradingPeriods', async () => {
720
+ if (!termId) {
721
+ recordResult(
722
+ authType,
723
+ 'GET /terms/{id}/gradingPeriods',
724
+ 'failed',
725
+ 'No term ID available'
726
+ );
727
+ return;
728
+ }
729
+ try {
730
+ for await (const page of await client.termsManagement.getGradingPeriodsForTerm({
731
+ termSourcedId: termId,
732
+ limit: 2,
733
+ })) {
734
+ expect(Array.isArray(page.result.academicSessions || [])).toBe(true);
735
+ recordResult(authType, 'GET /terms/{id}/gradingPeriods', 'passed');
736
+ break;
737
+ }
738
+ } catch (e: any) {
739
+ recordResult(
740
+ authType,
741
+ 'GET /terms/{id}/gradingPeriods',
742
+ 'failed',
743
+ e.message || 'Unknown error'
744
+ );
745
+ throw e;
746
+ }
747
+ });
748
+ });
749
+
750
+ describe('Pagination X-Total-Count', () => {
751
+ it('should include totalCount from X-Total-Count header', async () => {
752
+ try {
753
+ for await (const page of await client.usersManagement.getAllUsers({
754
+ limit: 1,
755
+ })) {
756
+ // totalCount is on the page object itself (from PaginationMeta), not on page.result
757
+ // It may be undefined if the server doesn't return the X-Total-Count header
758
+ if (page.totalCount !== undefined) {
759
+ expect(typeof page.totalCount).toBe('number');
760
+ expect(page.totalCount).toBeGreaterThanOrEqual(0);
761
+ console.log(
762
+ `Total users from X-Total-Count header: ${page.totalCount}`
763
+ );
764
+ recordResult(authType, 'X-Total-Count header', 'passed');
765
+ } else {
766
+ console.log('Server did not return X-Total-Count header');
767
+ recordResult(
768
+ authType,
769
+ 'X-Total-Count header',
770
+ 'passed',
771
+ 'Header not returned by server'
772
+ );
773
+ }
774
+ break;
775
+ }
776
+ } catch (e: any) {
777
+ recordResult(
778
+ authType,
779
+ 'X-Total-Count header',
780
+ 'failed',
781
+ e.message || 'Unknown error'
782
+ );
783
+ throw e;
784
+ }
785
+ });
786
+ });
907
787
  });
908
- });
909
788
  }
910
789
 
911
790
  // ============================================================================
912
791
  // ClassLink Client Type Checking Tests (no API calls)
913
792
  // ============================================================================
914
793
 
915
- describe("ClassLink Client - Type Checking", () => {
916
- const mockClient = new ClassLink({
917
- serverURL: "https://example.classlink.com",
918
- security: {
919
- authType: "oauth2",
920
- clientID: "test-client-id",
921
- clientSecret: "test-client-secret",
922
- tokenURL: "https://example.classlink.com/oauth/token",
923
- },
924
- });
925
-
926
- const anyClient = mockClient as any;
927
-
928
- describe("Instantiation", () => {
929
- it("should be instantiable as a class", () => {
930
- expect(mockClient).toBeInstanceOf(OneRoster);
931
- recordResult("TYPE_CHECK", "instantiation", "passed");
932
- });
933
- });
934
-
935
- describe("Available Read Methods", () => {
936
- it("usersManagement.getAllUsers", () => {
937
- expect(typeof mockClient.usersManagement.getAllUsers).toBe("function");
938
- recordResult("TYPE_CHECK", "usersManagement.getAllUsers", "passed");
939
- });
940
-
941
- it("schoolsManagement.getAllSchools", () => {
942
- expect(typeof mockClient.schoolsManagement.getAllSchools).toBe(
943
- "function",
944
- );
945
- recordResult("TYPE_CHECK", "schoolsManagement.getAllSchools", "passed");
946
- });
947
-
948
- it("classesManagement.getAllClasses", () => {
949
- expect(typeof mockClient.classesManagement.getAllClasses).toBe(
950
- "function",
951
- );
952
- recordResult("TYPE_CHECK", "classesManagement.getAllClasses", "passed");
953
- });
954
-
955
- it("enrollmentsManagement.getAllEnrollments", () => {
956
- expect(typeof mockClient.enrollmentsManagement.getAllEnrollments).toBe(
957
- "function",
958
- );
959
- recordResult(
960
- "TYPE_CHECK",
961
- "enrollmentsManagement.getAllEnrollments",
962
- "passed",
963
- );
964
- });
965
-
966
- it("coursesManagement.getAllCourses", () => {
967
- expect(typeof mockClient.coursesManagement.getAllCourses).toBe(
968
- "function",
969
- );
970
- recordResult("TYPE_CHECK", "coursesManagement.getAllCourses", "passed");
971
- });
972
- });
973
-
974
- describe("Restricted Write Methods (exist at runtime, hidden by TypeScript)", () => {
975
- it("usersManagement.createUser (restricted)", () => {
976
- expect(typeof anyClient.usersManagement.createUser).toBe("function");
977
- recordResult(
978
- "TYPE_CHECK",
979
- "usersManagement.createUser (restricted)",
980
- "passed",
981
- );
982
- });
983
-
984
- it("usersManagement.updateUser (restricted)", () => {
985
- expect(typeof anyClient.usersManagement.updateUser).toBe("function");
986
- recordResult(
987
- "TYPE_CHECK",
988
- "usersManagement.updateUser (restricted)",
989
- "passed",
990
- );
991
- });
992
-
993
- it("usersManagement.deleteUser (restricted)", () => {
994
- expect(typeof anyClient.usersManagement.deleteUser).toBe("function");
995
- recordResult(
996
- "TYPE_CHECK",
997
- "usersManagement.deleteUser (restricted)",
998
- "passed",
999
- );
1000
- });
1001
-
1002
- it("classesManagement.createClass (restricted)", () => {
1003
- expect(typeof anyClient.classesManagement.createClass).toBe("function");
1004
- recordResult(
1005
- "TYPE_CHECK",
1006
- "classesManagement.createClass (restricted)",
1007
- "passed",
1008
- );
794
+ describe('ClassLink Client - Type Checking', () => {
795
+ const mockClient = new ClassLink({
796
+ serverURL: 'https://example.classlink.com',
797
+ security: {
798
+ authType: 'oauth2',
799
+ clientID: 'test-client-id',
800
+ clientSecret: 'test-client-secret',
801
+ tokenURL: 'https://example.classlink.com/oauth/token',
802
+ },
1009
803
  });
1010
804
 
1011
- it("enrollmentsManagement.createEnrollment (restricted)", () => {
1012
- expect(typeof anyClient.enrollmentsManagement.createEnrollment).toBe(
1013
- "function",
1014
- );
1015
- recordResult(
1016
- "TYPE_CHECK",
1017
- "enrollmentsManagement.createEnrollment (restricted)",
1018
- "passed",
1019
- );
1020
- });
805
+ const anyClient = mockClient as any;
1021
806
 
1022
- it("schoolsManagement.createSchool (restricted)", () => {
1023
- expect(typeof anyClient.schoolsManagement.createSchool).toBe("function");
1024
- recordResult(
1025
- "TYPE_CHECK",
1026
- "schoolsManagement.createSchool (restricted)",
1027
- "passed",
1028
- );
807
+ describe('Instantiation', () => {
808
+ it('should be instantiable as a class', () => {
809
+ expect(mockClient).toBeInstanceOf(OneRoster);
810
+ recordResult('TYPE_CHECK', 'instantiation', 'passed');
811
+ });
1029
812
  });
1030
813
 
1031
- it("organizationsManagement.createOrg (restricted)", () => {
1032
- expect(typeof anyClient.organizationsManagement.createOrg).toBe(
1033
- "function",
1034
- );
1035
- recordResult(
1036
- "TYPE_CHECK",
1037
- "organizationsManagement.createOrg (restricted)",
1038
- "passed",
1039
- );
1040
- });
1041
- });
1042
-
1043
- describe("Unsupported Management Modules (exist at runtime, not in ClassLink profile)", () => {
1044
- it("demographicsManagement (not in profile)", () => {
1045
- expect(anyClient.demographicsManagement).toBeDefined();
1046
- recordResult(
1047
- "TYPE_CHECK",
1048
- "demographicsManagement (not in profile)",
1049
- "passed",
1050
- );
814
+ describe('Available Read Methods', () => {
815
+ it('usersManagement.getAllUsers', () => {
816
+ expect(typeof mockClient.usersManagement.getAllUsers).toBe('function');
817
+ recordResult('TYPE_CHECK', 'usersManagement.getAllUsers', 'passed');
818
+ });
819
+
820
+ it('schoolsManagement.getAllSchools', () => {
821
+ expect(typeof mockClient.schoolsManagement.getAllSchools).toBe('function');
822
+ recordResult('TYPE_CHECK', 'schoolsManagement.getAllSchools', 'passed');
823
+ });
824
+
825
+ it('classesManagement.getAllClasses', () => {
826
+ expect(typeof mockClient.classesManagement.getAllClasses).toBe('function');
827
+ recordResult('TYPE_CHECK', 'classesManagement.getAllClasses', 'passed');
828
+ });
829
+
830
+ it('enrollmentsManagement.getAllEnrollments', () => {
831
+ expect(typeof mockClient.enrollmentsManagement.getAllEnrollments).toBe('function');
832
+ recordResult('TYPE_CHECK', 'enrollmentsManagement.getAllEnrollments', 'passed');
833
+ });
834
+
835
+ it('coursesManagement.getAllCourses', () => {
836
+ expect(typeof mockClient.coursesManagement.getAllCourses).toBe('function');
837
+ recordResult('TYPE_CHECK', 'coursesManagement.getAllCourses', 'passed');
838
+ });
1051
839
  });
1052
840
 
1053
- it("lineItemsManagement (not in profile)", () => {
1054
- expect(anyClient.lineItemsManagement).toBeDefined();
1055
- recordResult(
1056
- "TYPE_CHECK",
1057
- "lineItemsManagement (not in profile)",
1058
- "passed",
1059
- );
1060
- });
841
+ describe('Restricted Write Methods (exist at runtime, hidden by TypeScript)', () => {
842
+ it('usersManagement.createUser (restricted)', () => {
843
+ expect(typeof anyClient.usersManagement.createUser).toBe('function');
844
+ recordResult('TYPE_CHECK', 'usersManagement.createUser (restricted)', 'passed');
845
+ });
846
+
847
+ it('usersManagement.updateUser (restricted)', () => {
848
+ expect(typeof anyClient.usersManagement.updateUser).toBe('function');
849
+ recordResult('TYPE_CHECK', 'usersManagement.updateUser (restricted)', 'passed');
850
+ });
851
+
852
+ it('usersManagement.deleteUser (restricted)', () => {
853
+ expect(typeof anyClient.usersManagement.deleteUser).toBe('function');
854
+ recordResult('TYPE_CHECK', 'usersManagement.deleteUser (restricted)', 'passed');
855
+ });
856
+
857
+ it('classesManagement.createClass (restricted)', () => {
858
+ expect(typeof anyClient.classesManagement.createClass).toBe('function');
859
+ recordResult('TYPE_CHECK', 'classesManagement.createClass (restricted)', 'passed');
860
+ });
861
+
862
+ it('enrollmentsManagement.createEnrollment (restricted)', () => {
863
+ expect(typeof anyClient.enrollmentsManagement.createEnrollment).toBe('function');
864
+ recordResult(
865
+ 'TYPE_CHECK',
866
+ 'enrollmentsManagement.createEnrollment (restricted)',
867
+ 'passed'
868
+ );
869
+ });
1061
870
 
1062
- it("resultsManagement (not in profile)", () => {
1063
- expect(anyClient.resultsManagement).toBeDefined();
1064
- recordResult(
1065
- "TYPE_CHECK",
1066
- "resultsManagement (not in profile)",
1067
- "passed",
1068
- );
1069
- });
871
+ it('schoolsManagement.createSchool (restricted)', () => {
872
+ expect(typeof anyClient.schoolsManagement.createSchool).toBe('function');
873
+ recordResult('TYPE_CHECK', 'schoolsManagement.createSchool (restricted)', 'passed');
874
+ });
1070
875
 
1071
- it("categoriesManagement (not in profile)", () => {
1072
- expect(anyClient.categoriesManagement).toBeDefined();
1073
- recordResult(
1074
- "TYPE_CHECK",
1075
- "categoriesManagement (not in profile)",
1076
- "passed",
1077
- );
876
+ it('organizationsManagement.createOrg (restricted)', () => {
877
+ expect(typeof anyClient.organizationsManagement.createOrg).toBe('function');
878
+ recordResult('TYPE_CHECK', 'organizationsManagement.createOrg (restricted)', 'passed');
879
+ });
1078
880
  });
1079
881
 
1080
- it("resourcesManagement (not in profile)", () => {
1081
- expect(anyClient.resourcesManagement).toBeDefined();
1082
- recordResult(
1083
- "TYPE_CHECK",
1084
- "resourcesManagement (not in profile)",
1085
- "passed",
1086
- );
882
+ describe('Unsupported Management Modules (exist at runtime, not in ClassLink profile)', () => {
883
+ it('demographicsManagement (not in profile)', () => {
884
+ expect(anyClient.demographicsManagement).toBeDefined();
885
+ recordResult('TYPE_CHECK', 'demographicsManagement (not in profile)', 'passed');
886
+ });
887
+
888
+ it('lineItemsManagement (not in profile)', () => {
889
+ expect(anyClient.lineItemsManagement).toBeDefined();
890
+ recordResult('TYPE_CHECK', 'lineItemsManagement (not in profile)', 'passed');
891
+ });
892
+
893
+ it('resultsManagement (not in profile)', () => {
894
+ expect(anyClient.resultsManagement).toBeDefined();
895
+ recordResult('TYPE_CHECK', 'resultsManagement (not in profile)', 'passed');
896
+ });
897
+
898
+ it('categoriesManagement (not in profile)', () => {
899
+ expect(anyClient.categoriesManagement).toBeDefined();
900
+ recordResult('TYPE_CHECK', 'categoriesManagement (not in profile)', 'passed');
901
+ });
902
+
903
+ it('resourcesManagement (not in profile)', () => {
904
+ expect(anyClient.resourcesManagement).toBeDefined();
905
+ recordResult('TYPE_CHECK', 'resourcesManagement (not in profile)', 'passed');
906
+ });
1087
907
  });
1088
- });
1089
908
  });
1090
909
 
1091
910
  // ============================================================================
1092
911
  // Main Test Suite - API Calls (conditional based on env vars)
1093
912
  // ============================================================================
1094
913
 
1095
- describe("ClassLink Client - API Calls", () => {
1096
- const oauth1Config = getOAuth1Config();
1097
- const oauth2Config = getOAuth2Config();
1098
- const bearerConfig = getBearerConfig();
1099
-
1100
- beforeAll(() => {
1101
- console.log("\n" + "=".repeat(60));
1102
- console.log("ClassLink Client Test Suite");
1103
- console.log("=".repeat(60));
1104
- if (oauth1Config) console.log(`\n✓ OAuth1: ${oauth1Config.serverURL}`);
1105
- if (oauth2Config) console.log(`✓ OAuth2: ${oauth2Config.serverURL}`);
1106
- if (bearerConfig) console.log(`✓ Bearer: ${bearerConfig.serverURL}`);
1107
- });
1108
-
1109
- if (oauth1Config) createAPITestSuite(oauth1Config);
1110
- if (oauth2Config) createAPITestSuite(oauth2Config);
1111
- if (bearerConfig) createAPITestSuite(bearerConfig);
1112
-
1113
- if (!oauth1Config && !oauth2Config && !bearerConfig) {
1114
- it("should have at least one auth configuration", () => {
1115
- console.log(
1116
- "\n⚠️ No ClassLink auth configs found. Set env vars in test/.env",
1117
- );
1118
- console.log(
1119
- " CLASSLINK_OAUTH1_SERVER_URL, CLASSLINK_OAUTH1_CLIENT_ID, CLASSLINK_OAUTH1_CLIENT_SECRET",
1120
- );
1121
- console.log(
1122
- " CLASSLINK_OAUTH2_SERVER_URL, CLASSLINK_OAUTH2_CLIENT_ID, CLASSLINK_OAUTH2_CLIENT_SECRET",
1123
- );
1124
- console.log(" CLASSLINK_BEARER_SERVER_URL, CLASSLINK_BEARER_TOKEN");
1125
- expect(true).toBe(true);
914
+ describe('ClassLink Client - API Calls', () => {
915
+ const oauth1Config = getOAuth1Config();
916
+ const oauth2Config = getOAuth2Config();
917
+ const bearerConfig = getBearerConfig();
918
+
919
+ beforeAll(() => {
920
+ console.log('\n' + '='.repeat(60));
921
+ console.log('ClassLink Client Test Suite');
922
+ console.log('='.repeat(60));
923
+ if (oauth1Config) console.log(`\n✓ OAuth1: ${oauth1Config.serverURL}`);
924
+ if (oauth2Config) console.log(`✓ OAuth2: ${oauth2Config.serverURL}`);
925
+ if (bearerConfig) console.log(`✓ Bearer: ${bearerConfig.serverURL}`);
1126
926
  });
1127
- }
927
+
928
+ if (oauth1Config) createAPITestSuite(oauth1Config);
929
+ if (oauth2Config) createAPITestSuite(oauth2Config);
930
+ if (bearerConfig) createAPITestSuite(bearerConfig);
931
+
932
+ if (!oauth1Config && !oauth2Config && !bearerConfig) {
933
+ it('should have at least one auth configuration', () => {
934
+ console.log('\n⚠️ No ClassLink auth configs found. Set env vars in test/.env');
935
+ console.log(
936
+ ' CLASSLINK_OAUTH1_SERVER_URL, CLASSLINK_OAUTH1_CLIENT_ID, CLASSLINK_OAUTH1_CLIENT_SECRET'
937
+ );
938
+ console.log(
939
+ ' CLASSLINK_OAUTH2_SERVER_URL, CLASSLINK_OAUTH2_CLIENT_ID, CLASSLINK_OAUTH2_CLIENT_SECRET'
940
+ );
941
+ console.log(' CLASSLINK_BEARER_SERVER_URL, CLASSLINK_BEARER_TOKEN');
942
+ expect(true).toBe(true);
943
+ });
944
+ }
1128
945
  });
1129
946
 
1130
947
  // ============================================================================
@@ -1132,5 +949,5 @@ describe("ClassLink Client - API Calls", () => {
1132
949
  // ============================================================================
1133
950
 
1134
951
  afterAll(() => {
1135
- printSummary();
952
+ printSummary();
1136
953
  });