All files / server/src/features/assignment/utils getUpcomingLotterySignups.ts

94.73% Statements 18/19
75% Branches 3/4
100% Functions 9/9
94.73% Lines 18/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            44x       18x 11x 19x   11x     11x     44x         2x         2x   6x     6x       2x     44x         16x         16x   5x     5x   14x    
import dayjs, { Dayjs } from "dayjs";
import { config } from "shared/config";
import { ProgramItem } from "shared/types/models/programItem";
import { LotterySignup } from "shared/types/models/user";
import { getLotterySignupEndTime } from "shared/utils/signupTimes";
 
const getLotterySignupProgramItems = (
  lotterySignups: readonly LotterySignup[],
  programItems: readonly ProgramItem[],
): ProgramItem[] =>
  lotterySignups.flatMap((signup) => {
    const found = programItems.find(
      (programItem) => programItem.programItemId === signup.programItemId,
    );
    Iif (!found) {
      return [];
    }
    return found;
  });
 
export const getUpcomingLotterySignupProgramItemIds = (
  lotterySignups: readonly LotterySignup[],
  programItems: readonly ProgramItem[],
  timeNow: Dayjs,
): string[] => {
  const lotterySignupProgramItems = getLotterySignupProgramItems(
    lotterySignups,
    programItems,
  );
 
  return lotterySignupProgramItems
    .filter((lotterySignupProgramItem) => {
      const parentStartTime = config
        .event()
        .startTimesByParentIds.get(lotterySignupProgramItem.parentId);
      return timeNow.isBefore(
        dayjs(parentStartTime ?? lotterySignupProgramItem.startTime),
      );
    })
    .map((programItem) => programItem.programItemId);
};
 
export const getLotteryNotYetRunProgramItemIds = (
  lotterySignups: readonly LotterySignup[],
  programItems: readonly ProgramItem[],
  timeNow: Dayjs,
): string[] => {
  const lotterySignupProgramItems = getLotterySignupProgramItems(
    lotterySignups,
    programItems,
  );
 
  return lotterySignupProgramItems
    .filter((lotterySignupProgramItem) => {
      const lotterySignupEndTime = getLotterySignupEndTime(
        lotterySignupProgramItem,
      );
      return timeNow.isBefore(lotterySignupEndTime);
    })
    .map((programItem) => programItem.programItemId);
};