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"} /> ); } |