Нужна помощь в избавлении от хардкода в автотестах

Текст задания в тесте

Тесты работают, но проверка дней выходные или нет, захардкожена в последней строчке("-3" чтобы брал только 3 элемента массива, исключая часы). Может быть есть другой способ как сделать это более правильно, прошу помощи т.к. знаний работы с "календарем" в jave недостаточно(

@Step("Шаг 5. Выполняем п.18 из ТК_А4 ")
public void checkProcessingDeadline() {
    LocalDateTime deadlineDay = LocalDateTime.now();
    adminPage = page(AdminPage.class);
    viewingRequest = page(ViewingRequest.class);

    ProductionCalendarPage productionCalendarPage = page(ProductionCalendarPage.class);

    mainPage.getAllTab().hover();

    mainPage.menuAppeals("Администрирование обращений").click();
    while (!adminPage.verificationRules("Входящий звонок", "Приглашение", "Мероприятия").isDisplayed()) {
        adminPage.getListViewNextButton().click();

    }
    adminPage.verificationRules("Входящий звонок", "Приглашение", "Мероприятия").click();


    deadlineDay = deadlineDay.plusDays(adminPage.getProcessingTime());

    mainPage.getAllTab().hover();

    mainPage.menuAppeals("Производственный календарь").click();
    productionCalendarPage.getDaysOrder().click();
    productionCalendarPage.getFirstDay().click();

    ArrayList<String> days = new ArrayList<>();


    while (!productionCalendarPage.getLastPage().isDisplayed()) {
        days.add(productionCalendarPage.getWeekend().getText());
        productionCalendarPage.getNextPage().click();
    }
    while (days.contains(deadlineDay.format(DateTimeFormatter.ofPattern("dd.MM.yyyy")))
            || deadlineDay.getDayOfWeek().equals(DayOfWeek.SATURDAY)
            || deadlineDay.getDayOfWeek().equals(DayOfWeek.SUNDAY)) {
        deadlineDay = deadlineDay.plusDays(1);

    }

    open(viewingRequestUrl);
    String finalDeadLine = deadlineDay.format(DateTimeFormatter.ofPattern("dd.MM.yyyy HH"));
    String expDeadLine = viewingRequest.processingeadline().getText();
    Assert.assertEquals(finalDeadLine, expDeadLine.substring(0, expDeadLine.length() - 3));

}

Ответы (1 шт):

Автор решения: Roman Konoval

Лучше всего сравнивать не строки, а сами даты. Т.е. вместо перевода даты в строку, лучше наоборот строку перевести в дату. Для того чтоб сравнить их с точностью, скажем до часов, игнорируя минуты, нужно воспользоваться обрезанием с помощью метода truncateTo. Вот пример, который показывает и как парсить строку и как обрезать дату:

LocalDateTime deadlineDay = LocalDateTime.of(2021, 06, 02, 10, 02, 30);
String expDeadLineStr = "02.06.2021 10:45:33";
LocalDateTime expDeadLine = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss")
                               .parse(expDeadLineStr, LocalDateTime::from);

LocalDateTime truncatedExpDeadLine = expDeadLine.truncatedTo(ChronoUnit.HOURS);
LocalDateTime truncatedDeadlineDay = deadlineDay.truncatedTo(ChronoUnit.HOURS);

Assert.assertEquals(truncatedDeadlineDay, truncatedExpDeadLine);
→ Ссылка