All files / pages AdminCoursesEditPage.jsx

100% Statements 60/60
100% Branches 6/6
100% Functions 4/4
100% Lines 60/60

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 781x 1x 1x 1x 1x 1x   1x 9x   9x 9x 9x 9x 9x 9x 9x 9x 9x 9x 9x 9x     9x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x   9x 1x 1x   1x   9x 9x 9x 9x 9x 9x   9x   9x   9x 1x 1x   9x 3x 3x   6x 6x 6x 6x 6x 9x 9x 9x 9x           9x  
import BasicLayout from "main/layouts/BasicLayout/BasicLayout";
import { useParams } from "react-router";
import CoursesForm from "main/components/Courses/CoursesForm";
import { Navigate } from "react-router";
import { useBackend, useBackendMutation } from "main/utils/useBackend";
import { toast } from "react-toastify";
 
export default function AdminCoursesEditPage() {
  let { id } = useParams();
 
  const {
    data: course,
    _error,
    _status,
  } = useBackend(
    // Stryker disable next-line all : don't test internal caching of React Query
    [`/api/course/${id}`],
    {
      // Stryker disable next-line all : GET is the default, so changing this to "" doesn't introduce a bug
      method: "GET",
      url: `/api/course/${id}`,
    },
  );
 
  const objectToAxiosPutParams = (course) => ({
    url: `/api/course/${id}`,
    method: "PUT",
    params: {
      id: course.id,
    },
    data: {
      code: course.code,
      name: course.name,
      term: course.term,
    },
  });
 
  const onSuccess = (_, course) => {
    toast(
      `Course Updated - id: ${course.id} code: ${course.code} name: ${course.name}`,
    );
  };
 
  // Stryker disable all
  const mutation = useBackendMutation(
    objectToAxiosPutParams,
    { onSuccess },
    // Stryker disable next-line all : hard to set up test for caching
    [`/api/course/${id}`],
  );
  // Stryker restore all
 
  const { isSuccess } = mutation;
 
  const submitAction = async (data) => {
    mutation.mutate(data);
  };
 
  if (isSuccess) {
    return <Navigate to="/admin/listcourses" />;
  }
 
  return (
    <BasicLayout>
      <div className="pt-2">
        <h1>Edit Course</h1>
        {course && (
          <CoursesForm
            initialContents={course}
            submitAction={submitAction}
            buttonLabel="Update"
          />
        )}
      </div>
    </BasicLayout>
  );
}