from unittest.mock import Mock from datetime import datetime from tests.locators import Locator from tests.setup.tokens import test_trading_token as actions def test_rtm_saves_generator_token_without_idas_activation(monkeypatch): events = [] monkeypatch.setattr(actions, "open_trading_maintenance_page", lambda driver, menu: events.append(menu)) monkeypatch.setattr(actions, "handle_transient_popups", lambda driver: None) monkeypatch.setattr( actions, "select_bootstrap_dropdown_by_id", lambda driver, field, value, exact=False: events.append((field, value, exact)), ) idas_flow = Mock() monkeypatch.setattr(actions, "create_and_activate_token", idas_flow) step = Mock() step.click.side_effect = lambda locator, name: events.append(locator[1]) monkeypatch.setattr(actions, "get_rtm_token_times", lambda token: ( "23/09/2026 00:00", "23/09/2026 23:59", "10:15", "20:00", )) monkeypatch.setattr(actions, "type_first_visible_input", lambda driver, locator, value: events.append((locator, value))) actions.run_token_setup(Mock(), step, { "product_type": "RTM", "market_code": "NATIONAL", "product_code": "RTM", "generation_mode": "RTM", }) assert events == [ Locator.tokengenerator, ("marketCode", "NATIONAL", True), ("productCode", "RTM", True), ("tokenMstr.genMode", "RTM", True), Locator.addnewtokenbtn, (Locator.rtmdeliveryfromdate, "23/09/2026 00:00"), (Locator.rtmdeliverytodate, "23/09/2026 23:59"), (Locator.rtmsessionstarttime, "10:15"), (Locator.rtmsessionendtime, "20:00"), Locator.savetokenbtn, ] step.type.assert_not_called() idas_flow.assert_not_called() def test_idas_keeps_existing_creation_and_activation_flow(monkeypatch): idas_flow = Mock() rtm_flow = Mock() monkeypatch.setattr(actions, "create_and_activate_token", idas_flow) monkeypatch.setattr(actions, "open_rtm_new_token", rtm_flow) driver, step = Mock(), Mock() token = {"product_type": "IDAS", "product_code": "IDAS4"} actions.run_token_setup(driver, step, token) idas_flow.assert_called_once_with(driver, step, token) rtm_flow.assert_not_called() def test_rtm_token_timing_defaults_and_overrides(): now = datetime(2026, 9, 23, 10, 58) assert actions.get_rtm_token_times({}, now) == ( "23/09/2026 00:00", "23/09/2026 23:59", "11:03", "20:00", ) assert actions.get_rtm_token_times({ "delivery_offset_days": 1, "delivery_from_time": "01:30", "delivery_to_time": "22:00", "session_start_offset_minutes": 12, "session_end_time": "21:15", }, now) == ( "24/09/2026 01:30", "24/09/2026 22:00", "11:10", "21:15", )