All files / components/Courses StudentCoursesTable.jsx

100% Statements 50/50
100% Branches 10/10
100% Functions 6/6
100% Lines 50/50

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 681x 1x 1x 1x   1x 51x 51x 51x 51x 51x 51x 51x     51x 1x 1x   51x 2x 2x   51x 4x 4x 4x 4x 4x 4x 4x 4x   51x 51x 51x 51x     51x 4x 4x   51x 31x 31x 2x   31x   51x 51x 51x 26x 26x 26x 26x 26x 26x       51x       51x  
import { useBackend, useBackendMutation } from "main/utils/useBackend";
import { toast } from "react-toastify";
import CoursesTable from "main/components/Courses/CoursesTable";
import React from "react";
 
export function StudentCoursesTable({ testid }) {
  const { data: courses } = useBackend(
    // Stryker disable next-line all : don't test internal caching of React Query
    ["/api/courses/list"],
    // Stryker disable next-line StringLiteral : The default value for an empty ("") method is GET. Therefore, there is no way to kill a mutation that transforms "GET" to ""
    { method: "GET", url: "/api/courses/list" },
    // Stryker disable next-line all : don't test default value of empty list
    [],
  );
 
  const onJoinSuccess = (message) => {
    toast(message);
  };
 
  const onJoinFail = (result) => {
    toast(result.response.data ? result.response.data : result.message);
  };
 
  const cellToAxiosParamsStudent = (cell) => {
    return {
      url: `/api/rosterstudents/joinCourse`,
      method: "PUT",
      params: {
        rosterStudentId: cell.row.original.rosterStudentId,
      },
    };
  };
 
  const studentJoinMutation = useBackendMutation(
    cellToAxiosParamsStudent,
    { onSuccess: onJoinSuccess, onError: onJoinFail },
    [`/api/courses/list`],
  );
 
  const joinStudentCourseCallback = async (cell) => {
    studentJoinMutation.mutate(cell);
  };
 
  const isStudentJoining = (cell) => {
    return (
      studentJoinMutation.isPending &&
      studentJoinMutation.variables.row.index === cell.row.index
    );
  };
 
  return (
    <>
      {courses.length > 0 ? (
        <>
          <CoursesTable
            courses={courses}
            testId={testid}
            joinCallback={joinStudentCourseCallback}
            isLoading={isStudentJoining}
          />
        </>
      ) : (
        <p>You are not enrolled in any student courses yet.</p>
      )}
    </>
  );
}