Skip to content

Commit c3a5149

Browse files
committed
Added a method to datetime utils
Fixed failing non invitation days test
1 parent 9f7531f commit c3a5149

File tree

3 files changed

+45
-21
lines changed

3 files changed

+45
-21
lines changed

pages/call_and_recall/non_invitations_days_page.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,17 @@ def __init__(self, page: Page):
1010
super().__init__(page)
1111
self.page = page
1212
# Non Invitation Days - page locators, methods
13-
self.enter_note_field = self.page.get_by_role("textbox", name="note")
13+
self.enter_note_field = self.page.locator("#note")
1414
self.enter_date_field = self.page.get_by_role("textbox", name="date")
1515
self.add_non_invitation_day_button = self.page.get_by_role(
1616
"button", name="Add Non-Invitation Day"
1717
)
1818
self.non_invitation_day_delete_button = self.page.get_by_role(
1919
"button", name="Delete"
2020
)
21-
self.created_on_date_locator = self.page.locator("#displayRS")
21+
self.created_on_date_locator = self.page.locator(
22+
"tr.oddTableRow td:nth-child(4)"
23+
)
2224

2325
def verify_non_invitation_days_tile(self) -> None:
2426
"""Verifies the page title of the Non Invitation Days page"""
@@ -46,18 +48,16 @@ def click_delete_button(self) -> None:
4648
"""Clicks the Delete button for a non-invitation day"""
4749
self.click(self.non_invitation_day_delete_button)
4850

49-
def verify_date_is_visible(self) -> None:
51+
def verify_created_on_date_is_visible(self) -> None:
5052
"""Verifies that the specified date is visible on the page
5153
Args:
5254
date (str): The date to verify, formatted as 'dd/mm/yyyy'.
5355
"""
54-
date = DateTimeUtils.current_datetime("dd/mm/yyyy")
55-
expect(self.created_on_date_locator).to_have_text(date)
56+
today = DateTimeUtils.current_datetime("%d/%m/%Y")
57+
expect(self.created_on_date_locator).to_have_text(today)
5658

57-
def verify_date_is_not_visible(self) -> None:
58-
"""Verifies that the specified date is not visible on the page
59-
Args:
60-
date (str): The date to verify, formatted as 'dd/mm/yyyy'.
59+
def verify_created_on_date_is_not_visible(self) -> None:
60+
"""Verifies that the 'created on' date element is not visible on the page.
61+
This is used to confirm that the non-invitation day has been successfully deleted.
6162
"""
62-
date = DateTimeUtils.current_datetime("dd/mm/yyyy")
63-
expect(self.created_on_date_locator).not_to_have_text(date)
63+
expect(self.created_on_date_locator).not_to_be_visible

tests/regression/call_and_recall/test_non_invitation_days_regression.py

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from pages.call_and_recall.call_and_recall_page import CallAndRecallPage
55
from pages.call_and_recall.non_invitations_days_page import NonInvitationDaysPage
66
from utils.user_tools import UserTools
7+
from utils.date_time_utils import DateTimeUtils
78

89

910
@pytest.fixture(scope="function", autouse=True)
@@ -24,29 +25,32 @@ def test_add_then_delete_non_invitation_day(page: Page) -> None:
2425
"""
2526
Verifies that a user can add and delete a non-invitation day.
2627
"""
27-
# Scenario: Add then delete a non invitation day
28-
# And I go to "Non-Invitation Days"
28+
test_date = DateTimeUtils().generate_unique_weekday_date()
29+
30+
# When I go to "Non-Invitation Days"
2931
CallAndRecallPage(page).go_to_non_invitation_days_page()
3032

31-
# # The date entered should be a week day, otherwise a warning message will pop up
32-
# When I enter "14/11/2030" in the input box with id "date"
33-
NonInvitationDaysPage(page).enter_date("14/11/2030")
34-
# # Add a new non invitation day
33+
# And I enter a date in the input box with id "date"
34+
# (The date entered should be a week day, otherwise a warning message will pop up)
35+
NonInvitationDaysPage(page).enter_date(test_date)
36+
3537
# And I enter "Add a non invitation day for automated test" in the input box with id "note"
3638
NonInvitationDaysPage(page).enter_note(
3739
"Add a non-invitation day for automated test"
3840
)
3941

4042
# And I click the "Add Non-Invitation Day" button
4143
NonInvitationDaysPage(page).click_add_non_invitation_day_button()
44+
4245
# Then todays date is visible in the non-invitation days table
43-
NonInvitationDaysPage(page).verify_date_is_visible()
46+
NonInvitationDaysPage(page).verify_created_on_date_is_visible()
47+
4448
# When I click the delete button for the non-invitation day
45-
# NonInvitationDaysPage(page).click_delete_button() TODO: this step should be executed as part of the next step (delete this step once confirmed working)
4649
# And I press OK on my confirmation prompt
4750
BasePage(page).safe_accept_dialog(page.get_by_role("button", name="Delete"))
48-
# Then todays date is not visible in the non-invitation days table
49-
NonInvitationDaysPage(page).verify_date_is_not_visible()
51+
52+
# Then the non-invitation days has been successfully deleted
53+
NonInvitationDaysPage(page).verify_created_on_date_is_not_visible()
5054

5155

5256
@pytest.mark.regression

utils/date_time_utils.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from datetime import datetime, timedelta
2+
import random
23

34

45
class DateTimeUtils:
@@ -124,3 +125,22 @@ def month_string_to_number(self, string: str) -> int:
124125
return out
125126
except Exception:
126127
raise ValueError("Not a month")
128+
129+
def generate_unique_weekday_date(self, start_year: int = 2025) -> str:
130+
# Start from tomorrow to ensure future date
131+
base_date = datetime.now() + timedelta(days=1)
132+
133+
# Keep moving forward until we find a weekday in 2025 or later
134+
while True:
135+
if base_date.weekday() < 5 and base_date.year >= start_year:
136+
break
137+
base_date += timedelta(days=1)
138+
139+
# Add randomness to avoid repeated values across runs
140+
base_date += timedelta(days=random.randint(0, 10))
141+
142+
# Re-check for weekday after shift
143+
while base_date.weekday() >= 5:
144+
base_date += timedelta(days=1)
145+
146+
return base_date.strftime("%d/%m/%Y")

0 commit comments

Comments
 (0)