def test_xml_dates_unable_to_parse(self): test_cases = [ ('P', isoerror.ISO8601Error), ('PT15.S', isoerror.ISO8601Error), ('1Y2M', isoerror.ISO8601Error) ] for xml_date, expected_exception in test_cases: description = 'Test {} is unable to be parsed to seconds correctly'.format(xml_date) with self.subTest(description): with self.assertRaises(expected_exception): DateUtilities.convert_xml_date_time_format_to_seconds(xml_date)
async def handle_outbound_message(self, from_asid: Optional[str], message_id: str, correlation_id: str, interaction_details: dict, payload: str, wdo: Optional[wd.WorkDescription]) \ -> Tuple[int, str, Optional[wd.WorkDescription]]: logger.info('Entered async reliable workflow to handle outbound message') wdo = await self._create_new_work_description_if_required(message_id, wdo, self.workflow_name) logger.audit('Outbound {WorkflowName} workflow invoked.', fparams={'WorkflowName': self.workflow_name}) try: details = await self._lookup_endpoint_details(interaction_details) url = details[self.ENDPOINT_URL] to_party_key = details[self.ENDPOINT_PARTY_KEY] cpa_id = details[self.ENDPOINT_CPA_ID] except Exception: await wdo.set_outbound_status(wd.MessageStatus.OUTBOUND_MESSAGE_PREPARATION_FAILED) return 500, 'Error obtaining outbound URL', None reliability_details = await self._lookup_reliability_details(interaction_details) retry_interval_xml_datetime = reliability_details[common_asynchronous.MHS_RETRY_INTERVAL] try: retry_interval = DateUtilities.convert_xml_date_time_format_to_seconds(retry_interval_xml_datetime) except isoerror.ISO8601Error: await wdo.set_outbound_status(wd.MessageStatus.OUTBOUND_MESSAGE_PREPARATION_FAILED) return 500, 'Error when converting retry interval: {} to seconds'.format(retry_interval_xml_datetime), None error, http_headers, message = await self._serialize_outbound_message(message_id, correlation_id, interaction_details, payload, wdo, to_party_key, cpa_id) if error: return error[0], error[1], None return await self._make_outbound_request_with_retries_and_handle_response(url, http_headers, message, wdo, reliability_details, retry_interval)
def test_utc_now(self): past = datetime.now(tz=timezone(timedelta())) # another way to create a UTC (+00:00) timestamp time.sleep(0.1) present = DateUtilities.utc_now() time.sleep(0.1) future = datetime.now(tz=timezone(timedelta())) self.assertTrue(past < present) self.assertTrue(present < future) self.assertEqual(timezone.utc, present.tzinfo, 'datetime from utc_now() should be UTC')
def test_xml_dates_parsed_successfully(self): test_cases = [('P1DT2H', 93600), ('PT20M', 1200), ('PT1M30.5S', 90.5), ('PT10S', 10), ('PT1M', 60), ('PT20S', 20), ('PT4M', 240), ('PT1H', 3600)] for xml_date, expected_seconds in test_cases: description = 'Test {} is parsed to seconds correctly'.format( xml_date) with self.subTest(description): actual_seconds = DateUtilities.convert_xml_date_time_format_to_seconds( xml_date) self.assertEqual( expected_seconds, actual_seconds, 'Should have parsed to expected number of seconds')