All files / components/Finals FinalExamCard.jsx

100% Statements 19/19
100% Branches 21/21
100% Functions 4/4
100% Lines 19/19

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      2x                   2x                             2x       2x 6x     2x 6x     2x 6x         13x 4x     9x 2x                           7x     13x     13x 13x   13x       13x                      
import Card from "react-bootstrap/Card";
 
// Stryker disable StringLiteral : otherwise we would have to test for every possible day and month value, which is not practical
const dayToStringMap = {
  M: "Monday",
  T: "Tuesday",
  W: "Wednesday",
  R: "Thursday",
  F: "Friday",
  S: "Saturday",
  U: "Sunday",
};
 
const monthToStringMap = {
  "01": "January",
  "02": "February",
  "03": "March",
  "04": "April",
  "05": "May",
  "06": "June",
  "07": "July",
  "08": "August",
  "09": "September",
  10: "October",
  11: "November",
  12: "December",
};
 
const emptyString = "";
 
// Stryker restore StringLiteral
 
const dayToString = (day) => {
  return dayToStringMap[day] || day;
};
 
const monthToString = (month) => {
  return monthToStringMap[month] || month;
};
 
const formatDate = (date) => {
  return `${monthToString(date.substring(4, 6))} ${parseInt(date.substring(6, 8))}, ${date.substring(0, 4)}`;
};
 
// cardProps can be used to pass additional props to the Card component, such as styling or className
function FinalExamCard({ finalsInfo, cardProps = {} }) {
  if (!finalsInfo) {
    return null;
  }
 
  if (finalsInfo.hasFinals === false) {
    return (
      <Card {...cardProps}>
        <Card.Body>
          <Card.Title>Final Exam:</Card.Title>
          <Card.Text>
            {finalsInfo.comments
              ? finalsInfo.comments
              : "No final exam information available."}
          </Card.Text>
        </Card.Body>
      </Card>
    );
  }
 
  const day = finalsInfo.examDay
    ? dayToString(finalsInfo.examDay)
    : emptyString;
  const date = finalsInfo.examDate
    ? formatDate(finalsInfo.examDate)
    : emptyString;
  const beginTime = finalsInfo.beginTime ? finalsInfo.beginTime : emptyString;
  const endTime = finalsInfo.endTime ? finalsInfo.endTime : emptyString;
 
  const examInfoString = finalsInfo.examDay
    ? `${day}, ${date} ${beginTime}—${endTime}`
    : "Exam information not available.";
 
  return (
    <Card {...cardProps}>
      <Card.Body>
        <Card.Title>Final Exam:</Card.Title>
        <Card.Text>{examInfoString}</Card.Text>
      </Card.Body>
    </Card>
  );
}
 
export default FinalExamCard;