I am writing a fairly convoluted method and encountered the situation of complex logic judgment.
Generally, I can use if/else or switch to implement multiple conditional judgments, but there will be a problem: with the increase of logic complexity, if/else and switch in the code will become more and more bloated.
Secondly, my branch coverage stats are all over the place, as Istanbul is reporting (I think erroneously) that it cannot hit some of the else branches.
What other approaches exist that could help? So far, I've come across is the use of a map, but I'm not sure how to execute code blocks within the context of one.
static filterCourseContentElementButtonEvents(
courseContents: ICourseContent[],
courseContentElementButtonEvent: {
id: CourseContentElementButtonEventType;
value: CourseContentElementButtonEventTypeValue;
}[],
selectedCourseContentUid: string
): {
id: CourseContentElementButtonEventType;
value: CourseContentElementButtonEventTypeValue;
}[] {
if (!CourseContentElementButtonService.isPreviousButtonEventTypeAvailable(
courseContents,
selectedCourseContentUid
)) {
courseContentElementButtonEvent = CourseContentElementButtonService.deleteCourseContentElementButtonEvent(
courseContentElementButtonEvent,
CourseContentElementButtonEventType.PREVIOUS
);
}
if (!CourseContentElementButtonService.isNextButtonEventTypeAvailable(
courseContents,
selectedCourseContentUid
)) {
courseContentElementButtonEvent = CourseContentElementButtonService.deleteCourseContentElementButtonEvent(
courseContentElementButtonEvent,
CourseContentElementButtonEventType.NEXT
);
}
if (!CourseContentElementButtonService.isJumpButtonEventTypeAvailable(
courseContents,
selectedCourseContentUid
)) {
courseContentElementButtonEvent = CourseContentElementButtonService.deleteCourseContentElementButtonEvent(
courseContentElementButtonEvent,
CourseContentElementButtonEventType.JUMP
);
}
if (!CourseContentElementButtonService.isSubmitButtonEventTypeAvailable(
courseContents,
selectedCourseContentUid
)) {
courseContentElementButtonEvent = CourseContentElementButtonService.deleteCourseContentElementButtonEvent(
courseContentElementButtonEvent,
CourseContentElementButtonEventType.SUBMIT_RESPONSE
);
}
if (!CourseContentElementButtonService.isEndButtonEventTypeAvailable(
courseContents,
selectedCourseContentUid
)) {
courseContentElementButtonEvent = CourseContentElementButtonService.deleteCourseContentElementButtonEvent(
courseContentElementButtonEvent,
CourseContentElementButtonEventType.END
);
}
return courseContentElementButtonEvent;
}