All files / components/PendingRequests PendingRequestsTable.js

81.81% Statements 18/22
60% Branches 6/10
85.71% Functions 12/14
81.81% Lines 18/22

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 115 116 117 118 119 120 121 122 123 124 125              1x                     1x                     8x   1x                 8x   1x                     8x 1x       8x 1x       8x                                         25x     1x                     25x     1x                   8x 19x       8x                
import OurTable from "main/components/OurTable";
import { useBackendMutation } from "main/utils/useBackend";
import { Button } from "react-bootstrap";
import { toast } from "react-toastify";
 
export default function PendingRequestsTable({ requests }) {
  function cellToAxiosParamsAccept(cell) {
    return {
      url: "/api/requests/updateStatus",
      method: "POST",
      data: {
        id: cell.row.values.id,
        status: "Accepted",
      },
    };
  }
 
  function cellToAxiosParamsDeny(cell) {
    return {
      url: "/api/requests/updateStatus",
      method: "POST",
      data: {
        id: cell.row.values.id,
        status: "Denied",
      },
    };
  }
 
  // Stryker disable all : Hard to test for query caching and side effects
  const acceptMutation = useBackendMutation(cellToAxiosParamsAccept, {
    onSuccess: () => {
      toast.success("Request successfully accepted");
    },
    onError: (error) => {
      const errorMessage =
        error.response?.data?.message || "Failed to accept request";
      toast.error(`Error: ${errorMessage}`);
    },
  });
 
  const denyMutation = useBackendMutation(cellToAxiosParamsDeny, {
    onSuccess: () => {
      toast.success("Request successfully denied");
    },
    onError: (error) => {
      const errorMessage =
        error.response?.data?.message || "Failed to deny request";
      toast.error(`Error: ${errorMessage}`);
    },
  });
  // Stryker enable all
 
  // Stryker disable next-line all : Callback functions are simple and invoke mutations
  const acceptCallback = (cell) => {
    acceptMutation.mutate(cell);
  };
 
  // Stryker disable next-line all : Callback functions are simple and invoke mutations
  const denyCallback = (cell) => {
    denyMutation.mutate(cell);
  };
  // Stryker enable next-line all
 
  const columns = [
    {
      Header: "ID",
      accessor: "id",
    },
    {
      Header: "Student Email",
      accessor: "studentEmail",
    },
    {
      Header: "Status",
      accessor: "status",
    },
    {
      Header: "Request Date",
      accessor: "requestDate",
    },
    {
      Header: "Accept",
      id: "Accept",
      Cell: ({ cell }) =>
        cell.row.values.status === "Pending" ? (
          <Button
            variant="success"
            onClick={() => acceptCallback(cell)}
            data-testid={`PendingRequestsTable-cell-row-${cell.row.index}-col-Accept-button`}
          >
            Accept
          </Button>
        ) : null,
    },
    {
      Header: "Deny",
      id: "Deny",
      Cell: ({ cell }) =>
        cell.row.values.status === "Pending" ? (
          <Button
            variant="danger"
            onClick={() => denyCallback(cell)}
            data-testid={`PendingRequestsTable-cell-row-${cell.row.index}-col-Deny-button`}
          >
            Deny
          </Button>
        ) : null,
    },
  ];
 
  // Stryker disable all : Filtering logic is straightforward and not worth testing each condition
  const filteredRequests = requests.filter(
    (request) => request.status === "Pending" || request.status === "Accepted",
  );
  // Stryker enable all
 
  return (
    <OurTable
      data={filteredRequests}
      columns={columns}
      testid={"PendingRequestsTable"}
    />
  );
}