Source

api/course/SampleCourses.ts

  1. import faker from 'faker';
  2. import { AcademicTerms } from '../academic-term/AcademicTermCollection';
  3. import { Courses } from './CourseCollection';
  4. import { CourseInstances } from './CourseInstanceCollection';
  5. import { makeSampleInterestArray } from '../interest/SampleInterests';
  6. import { Slugs } from '../slug/SlugCollection';
  7. /**
  8. * Returns a random department string.
  9. * @param {number} length
  10. * @returns {string}
  11. */
  12. export const getRandomDepartment = (length = 3): string => {
  13. let retVal = '';
  14. for (let i = 0; i < length; i++) {
  15. retVal = `${retVal}${faker.random.alphaNumeric()}`;
  16. }
  17. return retVal;
  18. };
  19. /**
  20. * Returns a random course slug for the given department.
  21. * @param {string} dept the department
  22. * @param {number} min the minimum course number, (optional) defaults to 100.
  23. * @param {number} max the maximum course number, (optional) defaults to 800.
  24. * @returns {string}
  25. */
  26. export const getRandomCourseSlugForDept = (dept: string, min = 100, max = 800): string => `${dept}_${faker.random.number({
  27. min,
  28. max,
  29. })}`;
  30. /**
  31. * Returns a random course slug for a random department.
  32. * @param {number} deptLength the length of the department string, defaults to 3.
  33. * @param {number} min the minimum course number, (optional) defaults to 100.
  34. * @param {number} max the maximum course number, (optional) defaults to 800.
  35. * @returns {string}
  36. */
  37. export const getRandomCourseSlug = (deptLength = 3, min = 100, max = 800): string => {
  38. const deptName = getRandomDepartment(deptLength);
  39. return getRandomCourseSlugForDept(deptName, min, max);
  40. };
  41. /**
  42. * Creates a Course with a unique slug and returns its docID.
  43. * @param args An optional object containing arguments to the courses.define function.
  44. * @returns { String } The docID of the newly generated Course.
  45. * @memberOf api/course
  46. */
  47. export const makeSampleCourse = (args?: { num?: string; interestID?: string; }): string => {
  48. const name = faker.lorem.words();
  49. const slug = getRandomCourseSlug();
  50. const num = (args && args.num) ? args.num : faker.lorem.words();
  51. const description = faker.lorem.paragraph();
  52. const creditHrs = faker.random.number({
  53. min: 1,
  54. max: 15,
  55. });
  56. const interests = (args && args.interestID) ? [args.interestID] : makeSampleInterestArray(faker.random.number({
  57. min: 1,
  58. max: 6,
  59. }));
  60. const syllabus = faker.lorem.paragraph();
  61. return Courses.define({ name, slug, num, description, creditHrs, syllabus, interests });
  62. };
  63. /**
  64. * Creates an array of defined course slugs.
  65. * @param num the number of slugs.
  66. * Returns an array of defined course slugs.
  67. */
  68. export const makeSampleCourseSlugArray = (num = 1) => {
  69. const retVal = [];
  70. for (let i = 0; i < num; i++) {
  71. retVal.push(Slugs.getNameFromID(Courses.findDoc(makeSampleCourse()).slugID));
  72. }
  73. return retVal;
  74. };
  75. /**
  76. * Creates a CourseInstance with a unique slug and returns its docID.
  77. * Also creates a new Course.
  78. * @param student The student slug associated with this course.
  79. * @param args Optional object providing arguments to the CourseInstance definition.
  80. * @returns { String } The docID for the newly generated Interest.
  81. * @memberOf api/course
  82. */
  83. export const makeSampleCourseInstance = (student: string, args): string => {
  84. const academicTerm = AcademicTerms.define({ term: AcademicTerms.FALL, year: 2013 });
  85. const course = (args && args.course) ? args.course : makeSampleCourse();
  86. const verified = true;
  87. const grade = 'A';
  88. const note = `ABC ${course.num}`;
  89. return CourseInstances.define({ academicTerm, course, verified, grade, student, note });
  90. };
  91. export const getRandomGrade = (): string => {
  92. const index = faker.random.number({ min: 1, max: CourseInstances.validGrades.length - 1 });
  93. return CourseInstances.validGrades[index];
  94. };