Compare commits
2
Commits
d681002b0f
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
58b4c502eb | ||
|
|
48d0d786b2 |
@@ -202,6 +202,48 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"INTRADAY": {
|
||||
"enabled": true,
|
||||
"run_session": true,
|
||||
"run_token": true,
|
||||
"me_instance": "53",
|
||||
"session": {},
|
||||
"token": {
|
||||
"market_code": "NATIONAL",
|
||||
"product_type": "INTRADAY",
|
||||
"product_codes": [
|
||||
"I_DayStatic_C"
|
||||
],
|
||||
"generation_mode": "Intraday24by7",
|
||||
"delivery_start_offset_minutes": 5,
|
||||
"trading_start_time": "00:20",
|
||||
"trading_start_days_before_delivery": 1,
|
||||
"duration_before_delivery_end_time": 150,
|
||||
"delivery_to_time": "23:59"
|
||||
}
|
||||
},
|
||||
"DAC": {
|
||||
"enabled": false,
|
||||
"run_session": true,
|
||||
"run_token": true,
|
||||
"me_instance": "57",
|
||||
"session": {
|
||||
"time_mode": "offset",
|
||||
"start_offset_minutes": 5,
|
||||
"end_time": "23:00"
|
||||
},
|
||||
"token": {
|
||||
"market_code": "NATIONAL",
|
||||
"product_type": "DAC",
|
||||
"product_codes": ["DACStatic"],
|
||||
"generation_mode": "DAC",
|
||||
"delivery_start_offset_minutes": 5,
|
||||
"delivery_to_time": "23:59",
|
||||
"session_start_time": "13:00",
|
||||
"session_end_time": "23:00",
|
||||
"delivery_time_period": 15
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,6 +39,16 @@ class Locator(object):
|
||||
tokendeliveryenddate = "//input[@placeholder='DELIVERY_END_DATE']"
|
||||
tokenexpirydate = "//input[@placeholder='Token Expiry Date']"
|
||||
tokentype = "//input[@name='TYPE' or @placeholder='TYPE']"
|
||||
intradaydeliveryfromdate = "//input[@placeholder='Delivery From Date']"
|
||||
intradaydeliverytodate = "//input[@placeholder='Delivery To Date']"
|
||||
intradaytradingstarttime = "//input[@placeholder='Trading Start Time']"
|
||||
intradaydaysbeforedelivery = "//input[@placeholder='Trading Start days before delivery']"
|
||||
intradaydurationbeforeend = "//input[@placeholder='Duration before delivery end time']"
|
||||
intradaysuccessmessage = "//*[contains(normalize-space(text()), 'Tokens generated successfully')]"
|
||||
dactradingfromdate = "//input[@placeholder='Trading From Date']"
|
||||
dactradingtodate = "//input[@placeholder='Trading To Date']"
|
||||
dacsessionstarttime = "//input[@placeholder='Session Start Time']"
|
||||
dacsessionendtime = "//input[@placeholder='Session End Time']"
|
||||
tokentradedate = "//input[@placeholder='Trade Date']"
|
||||
upcordernormalstart = "//input[@name='ses3StartTime']"
|
||||
upcordernormalend = "//input[@name='ses3EndTime']"
|
||||
|
||||
@@ -56,6 +56,15 @@ def get_delivery_date_and_expiry(token):
|
||||
return delivery_date, token_expiry
|
||||
|
||||
|
||||
def get_intraday_delivery_window(token, now=None):
|
||||
"""Return an Intraday delivery window that cannot start in the past."""
|
||||
now = datetime.now() if now is None else now
|
||||
start = now + timedelta(minutes=token.get("delivery_start_offset_minutes", 5))
|
||||
start_text = start.strftime("%d/%m/%Y %H:%M")
|
||||
end_text = f"{start.strftime('%d/%m/%Y')} {token.get('delivery_to_time', '23:59')}"
|
||||
return start_text, end_text
|
||||
|
||||
|
||||
def get_time_session_times(token, row_text, default_start_time, default_end_time):
|
||||
|
||||
time_session_config = token.get("time_sessions", {}).get(row_text, {})
|
||||
@@ -263,6 +272,76 @@ def create_rtm_token(driver, step, token):
|
||||
handle_transient_popups(driver)
|
||||
|
||||
|
||||
def create_intraday_token(driver, step, token):
|
||||
"""Create an Intraday token through the Token Generator page."""
|
||||
open_trading_maintenance_page(driver, Locator.tokengenerator)
|
||||
handle_transient_popups(driver)
|
||||
step.capture("open_token_generator_intraday")
|
||||
|
||||
for element_id, value, name in (
|
||||
(Locator.generatormarketcode, token["market_code"], "market_code"),
|
||||
(Locator.generatorproductcode, token["product_code"], "product_code"),
|
||||
(Locator.generatorgenerationmode, token["generation_mode"], "generation_mode"),
|
||||
):
|
||||
select_bootstrap_dropdown_by_id(driver, element_id, value, exact=True)
|
||||
step.capture(f"select_{name}_intraday")
|
||||
|
||||
step.click((By.XPATH, Locator.addnewtokenbtn), "click_add_new_token_intraday")
|
||||
|
||||
delivery_start, delivery_end = get_intraday_delivery_window(token)
|
||||
values = (
|
||||
(Locator.intradaydeliveryfromdate, delivery_start, "delivery_from_date"),
|
||||
(Locator.intradaydeliverytodate, delivery_end, "delivery_to_date"),
|
||||
(Locator.intradaytradingstarttime, token.get("trading_start_time", "00:20"), "trading_start_time"),
|
||||
(Locator.intradaydaysbeforedelivery, str(token.get("trading_start_days_before_delivery", 1)), "days_before_delivery"),
|
||||
)
|
||||
for locator, value, name in values:
|
||||
type_first_visible_input(driver, locator, value)
|
||||
step.capture(f"enter_{name}_intraday")
|
||||
|
||||
step.click((By.XPATH, Locator.savetokenbtn), "save_token_intraday")
|
||||
WebDriverWait(driver, 30).until(
|
||||
EC.visibility_of_element_located((By.XPATH, Locator.intradaysuccessmessage))
|
||||
)
|
||||
step.capture("intraday_token_generated_successfully")
|
||||
handle_transient_popups(driver)
|
||||
|
||||
|
||||
def create_dac_token(driver, step, token):
|
||||
"""Create a DAC token through the Token Generator page."""
|
||||
open_trading_maintenance_page(driver, Locator.tokengenerator)
|
||||
handle_transient_popups(driver)
|
||||
step.capture("open_token_generator_dac")
|
||||
|
||||
for element_id, value, name in (
|
||||
(Locator.generatormarketcode, token["market_code"], "market_code"),
|
||||
(Locator.generatorproductcode, token["product_code"], "product_code"),
|
||||
(Locator.generatorgenerationmode, token["generation_mode"], "generation_mode"),
|
||||
):
|
||||
select_bootstrap_dropdown_by_id(driver, element_id, value, exact=True)
|
||||
step.capture(f"select_{name}_dac")
|
||||
|
||||
step.click((By.XPATH, Locator.addnewtokenbtn), "click_add_new_token_dac")
|
||||
|
||||
trading_start, trading_end = get_intraday_delivery_window(token)
|
||||
values = (
|
||||
(Locator.dactradingfromdate, trading_start, "trading_from_date"),
|
||||
(Locator.dactradingtodate, trading_end, "trading_to_date"),
|
||||
(Locator.dacsessionstarttime, token.get("session_start_time", "13:00"), "session_start_time"),
|
||||
(Locator.dacsessionendtime, token.get("session_end_time", "23:00"), "session_end_time"),
|
||||
)
|
||||
for locator, value, name in values:
|
||||
type_first_visible_input(driver, locator, value)
|
||||
step.capture(f"enter_{name}_dac")
|
||||
|
||||
step.click((By.XPATH, Locator.savetokenbtn), "save_token_dac")
|
||||
WebDriverWait(driver, 30).until(
|
||||
EC.visibility_of_element_located((By.XPATH, Locator.intradaysuccessmessage))
|
||||
)
|
||||
step.capture("dac_token_generated_successfully")
|
||||
handle_transient_popups(driver)
|
||||
|
||||
|
||||
def create_upc_token(driver, step, token):
|
||||
open_trading_maintenance_page(driver, Locator.tokengenerator)
|
||||
handle_transient_popups(driver)
|
||||
@@ -290,6 +369,12 @@ def create_upc_token(driver, step, token):
|
||||
|
||||
|
||||
def run_token_setup(driver, step, token):
|
||||
if token.get("product_type", "").upper() == "DAC":
|
||||
create_dac_token(driver, step, token)
|
||||
return
|
||||
if token.get("product_type", "").upper() == "INTRADAY":
|
||||
create_intraday_token(driver, step, token)
|
||||
return
|
||||
if token.get("product_type", "").upper() == "UPC":
|
||||
create_upc_token(driver, step, token)
|
||||
return
|
||||
@@ -327,7 +412,11 @@ def create_and_activate_token(driver, step, token):
|
||||
|
||||
step.click((By.XPATH, Locator.addnewtokenbtn), f"click_add_new_token_{product_code.lower()}")
|
||||
|
||||
next_day, token_expiry = get_delivery_date_and_expiry(token)
|
||||
is_intraday = token.get("product_type", "").upper() == "INTRADAY"
|
||||
if is_intraday:
|
||||
delivery_start, delivery_end = get_intraday_delivery_window(token)
|
||||
else:
|
||||
next_day, token_expiry = get_delivery_date_and_expiry(token)
|
||||
|
||||
if token.get("product_type", "").upper() == "REC":
|
||||
token_type_prefix = token.get("type_prefix", "REC")
|
||||
@@ -351,14 +440,17 @@ def create_and_activate_token(driver, step, token):
|
||||
continue
|
||||
type_first_visible_input(driver, locator, value)
|
||||
|
||||
if (
|
||||
if is_intraday:
|
||||
step.type((By.XPATH, Locator.tokendeliverystartdate), delivery_start, f"enter_delivery_start_date_{product_code.lower()}")
|
||||
step.type((By.XPATH, Locator.tokendeliveryenddate), delivery_end, f"enter_delivery_end_date_{product_code.lower()}")
|
||||
elif (
|
||||
token.get("generation_mode") not in ("WeeklyUPC", "MonthlyUPC")
|
||||
and token.get("product_type", "").upper() != "REC"
|
||||
):
|
||||
step.type((By.XPATH, Locator.tokendeliverystartdate), next_day, f"enter_delivery_start_date_{product_code.lower()}")
|
||||
step.type((By.XPATH, Locator.tokendeliveryenddate), next_day, f"enter_delivery_end_date_{product_code.lower()}")
|
||||
|
||||
if token.get("generation_mode") not in ("WeeklyUPC", "MonthlyUPC"):
|
||||
if not is_intraday and token.get("generation_mode") not in ("WeeklyUPC", "MonthlyUPC"):
|
||||
step.type((By.XPATH, Locator.tokenexpirydate), token_expiry, f"enter_token_expiry_date_{product_code.lower()}")
|
||||
|
||||
step.click((By.XPATH, Locator.savetokenbtn), f"save_token_{product_code.lower()}")
|
||||
@@ -368,7 +460,8 @@ def create_and_activate_token(driver, step, token):
|
||||
step.click((By.XPATH, Locator.tokengeneratorresetbtn), f"reset_token_generator_{product_code.lower()}")
|
||||
return
|
||||
|
||||
complete_time_session_edits_from_saved_token(driver, step, token)
|
||||
if not is_intraday:
|
||||
complete_time_session_edits_from_saved_token(driver, step, token)
|
||||
|
||||
|
||||
@pytest.mark.trading_token
|
||||
|
||||
Reference in New Issue
Block a user