All files / pages AdminCoursesEditPage.jsx

100% Statements 54/54
100% Branches 7/7
100% Functions 4/4
100% Lines 54/54

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 711x 1x 1x 1x 1x 1x   1x 14x   14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x     14x 2x 2x 2x 2x 2x 2x 2x 2x   14x 2x 2x   14x 14x 14x 14x 14x     14x   14x 2x 2x   14x 6x 6x   8x 8x 8x 8x 8x 14x 14x 14x 14x           14x  
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 CoursesEditPage({ storybook = false }) {
  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=${id}`],
    {
      // Stryker disable next-line all : GET is the default, so mutating this to "" doesn't introduce a bug
      method: "GET",
      url: `/api/course/${id}`,
    },
  );
 
  const objectToAxiosPutParams = (course) => ({
    url: `/api/course/${course.id}`,
    method: "PUT",
    data: {
      code: course.code,
      name: course.name,
      term: course.term,
    },
  });
 
  const onSuccess = (course) => {
    toast(`Course Updated - id: ${course.id} code: ${course.code}`);
  };
 
  const mutation = useBackendMutation(
    objectToAxiosPutParams,
    { onSuccess },
    // Stryker disable next-line all : hard to set up test for caching
    [`/api/course?id=${id}`],
  );
 
  const { isSuccess } = mutation;
 
  const onSubmit = async (data) => {
    mutation.mutate(data);
  };
 
  if (isSuccess && !storybook) {
    return <Navigate to="/admin/listcourses" />;
  }
 
  return (
    <BasicLayout>
      <div className="pt-2">
        <h1>Edit Course</h1>
        {course && (
          <CoursesForm
            submitAction={onSubmit}
            buttonLabel={"Update"}
            initialContents={course}
          />
        )}
      </div>
    </BasicLayout>
  );
}