All files / pages AdminEditCommonsPage.jsx

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

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 891x 1x 1x 1x 1x 1x   1x 9x   9x 9x 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 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x   9x 1x 1x   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-dom";
import CommonsForm from "main/components/Commons/CommonsForm";
import { Navigate } from "react-router-dom";
import { useBackend, useBackendMutation } from "main/utils/useBackend";
import { toast } from "react-toastify";
 
export default function CommonsEditPage() {
  let { id } = useParams();
 
  const {
    data: commons,
    _error,
    _status,
  } = useBackend(
    // Stryker disable next-line all : don't test internal caching of React Query
    [`/api/commons?id=${id}`],
    {
      // Stryker disable next-line all : GET is the default, so changing this to "" doesn't introduce a bug
      method: "GET",
      url: `/api/commons`,
      params: {
        id,
      },
    },
  );
 
  const objectToAxiosPutParams = (commons) => ({
    url: "/api/commons/update",
    method: "PUT",
    params: {
      id: commons.id,
    },
    data: {
      name: commons.name,
      startingBalance: commons.startingBalance,
      cowPrice: commons.cowPrice,
      milkPrice: commons.milkPrice,
      startingDate: commons.startingDate,
      lastDate: commons.lastDate,
      degradationRate: commons.degradationRate,
      capacityPerUser: commons.capacityPerUser,
      carryingCapacity: commons.carryingCapacity,
      aboveCapacityHealthUpdateStrategy:
        commons.aboveCapacityHealthUpdateStrategy,
      belowCapacityHealthUpdateStrategy:
        commons.belowCapacityHealthUpdateStrategy,
      showLeaderboard: commons.showLeaderboard,
      showChat: commons.showChat,
    },
  });
 
  const onSuccess = (_, commons) => {
    toast(`Commons Updated - id: ${commons.id} name: ${commons.name}`);
  };
 
  const mutation = useBackendMutation(
    objectToAxiosPutParams,
    { onSuccess },
    // Stryker disable next-line all : hard to set up test for caching
    [`/api/commons?id=${id}`],
  );
 
  const { isSuccess } = mutation;
 
  const submitAction = async (data) => {
    mutation.mutate(data);
  };
 
  if (isSuccess) {
    return <Navigate to="/admin/listcommons" />;
  }
 
  return (
    <BasicLayout>
      <div className="pt-2">
        <h1>Edit Commons</h1>
        {commons && (
          <CommonsForm
            initialCommons={commons}
            submitAction={submitAction}
            buttonLabel="Update"
          />
        )}
      </div>
    </BasicLayout>
  );
}