All files / pages/CourseDetails CourseDetailsIndexPage.jsx

100% Statements 13/13
100% Branches 15/15
100% Functions 1/1
100% Lines 13/13

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114                          6x         6x                                 6x                       6x   6x 6x     6x 4x 4x 4x       5x                             5x                             5x                                              
import BasicLayout from "main/layouts/BasicLayout/BasicLayout";
import _BasicCourseTable from "main/components/Courses/BasicCourseTable";
import { useParams } from "react-router-dom";
import { useBackend } from "main/utils/useBackend";
import CourseDetailsTable from "main/components/CourseDetails/CourseDetailsTable";
import { yyyyqToQyy } from "main/utils/quarterUtilities";
import CourseDescriptionTable from "main/components/Courses/CourseDescriptionTable";
import GradeHistoryGraphs from "main/components/GradeHistory/GradeHistoryGraph";
import EnrollmentHistoryGraph from "main/components/EnrollmentHistory/EnrollmentHistoryGraph";
import FinalExamCard from "main/components/Finals/FinalExamCard";
 
export default function CourseDetailsIndexPage() {
  // Stryker disable next-line all : Can't test state because hook is internal
  let { qtr, enrollCode } = useParams();
  const {
    data: moreDetails,
    _error,
    _status,
  } = useBackend(
    // Stryker disable all : hard to test for query caching
    [`/api/sections/sectionsearch?qtr=${qtr}&enrollCode=${enrollCode}`],
    {
      method: "GET",
      url: `/api/sections/sectionsearch`,
      params: {
        qtr,
        enrollCode,
      },
    },
  );
 
  const {
    data: finalsInfo,
    _errorFinalsInfo,
    _statusFinalsInfo,
  } = useBackend(
    // Stryker disable all : hard to test for query caching
    [`/api/public/finalsInfo?quarterYYYYQ=${qtr}&enrollCd=${enrollCode}`],
    {
      method: "GET",
      url: `/api/public/finalsInfo`,
      params: {
        quarterYYYYQ: qtr,
        enrollCd: enrollCode,
      },
    },
  );
  const courseId = moreDetails?.courseId.trim() || "";
 
  let subjectArea = "";
  let trimmedCourseNumber = "";
 
  // Splitting on two spaces allows for courses with multiple word subject areas (i.e. AS AM) to be recognized
  if (courseId) {
    const splitArray = courseId.split("  ");
    subjectArea = splitArray[0];
    trimmedCourseNumber = splitArray[splitArray.length - 1].trim();
  }
 
  // Fetch Grade History Data
  const { data: gradeHistory } = useBackend(
    [
      `/api/gradehistory/search?subjectArea=${subjectArea}&courseNumber=${trimmedCourseNumber}`,
    ],
    {
      method: "GET",
      url: "/api/gradehistory/search",
      params: {
        subjectArea: subjectArea,
        courseNumber: trimmedCourseNumber,
      },
    },
  );
 
  // Fetch Enrollment History Data
  const { data: enrollmentHistory } = useBackend(
    // Stryker disable all : hard to test for query caching
    [
      `/api/enrollmenthistory/search?subjectArea=${subjectArea}&courseNumber=${trimmedCourseNumber}`,
    ],
    {
      method: "GET",
      url: "/api/enrollmenthistory/search",
      params: {
        subjectArea: subjectArea,
        courseNumber: trimmedCourseNumber,
      },
    },
  );
 
  return (
    <BasicLayout>
      <div className="pt-2">
        {moreDetails && moreDetails.courseId && (
          <h5>
            Course Details for {moreDetails.courseId} {yyyyqToQyy(qtr)}
          </h5>
        )}
        <FinalExamCard
          finalsInfo={finalsInfo}
          cardProps={{ className: "py-1 my-4" }}
        />
 
        {moreDetails && <CourseDetailsTable details={[moreDetails]} />}
        {moreDetails && <CourseDescriptionTable course={moreDetails} />}
        {gradeHistory && <GradeHistoryGraphs gradeHistory={gradeHistory} />}
        {enrollmentHistory && (
          <EnrollmentHistoryGraph enrollmentHistory={enrollmentHistory} />
        )}
      </div>
    </BasicLayout>
  );
}