Ejemplo n.º 1
0
 def setUp(self):
     super().setUp()
     self.dto_1 = EmailMessageDto(
         run_number=49543,
         sender=HMRC_ADDRESS,
         receiver=EMAIL_USER,
         date="Mon, 17 May 2021 14:20:18 +0100",
         body="lite licence reply",
         subject="ILBDOTI_live_CHIEF_licenceReply_49543_201901130300",
         attachment=["ILBDOTI_live_CHIEF_licenceReply_49543_201901130300", self.licence_data_reply_body,],
         raw_data="qwerty",
     )
     self.dto_2 = EmailMessageDto(
         run_number=17,
         sender=SPIRE_ADDRESS,
         receiver=EMAIL_USER,
         date="Mon, 17 May 2021 14:20:18 +0100",
         body="spire licence update",
         subject="ILBDOTI_live_CHIEF_licenceData_17_201901130300",
         attachment=["ILBDOTI_live_CHIEF_licenceData_49543_201901130300", self.licence_data_file_body,],
         raw_data="qwerty",
     )
     self.dto_3 = EmailMessageDto(
         run_number=49542,
         sender=HMRC_ADDRESS,
         receiver=EMAIL_USER,
         date="Mon, 17 May 2021 14:20:18 +0100",
         body="spire licence reply",
         subject="ILBDOTI_live_CHIEF_licenceReply_49542_201901130300",
         attachment=["ILBDOTI_live_CHIEF_licenceReply_49542_201901130300", self.licence_data_reply_body],
         raw_data="qwerty",
     )
Ejemplo n.º 2
0
    def test_licence_reply_does_not_throw_exception_if_mail_already_updated(
            self):
        self.mail.extract_type = ExtractTypeEnum.LICENCE_DATA
        self.mail.status = ReceptionStatusEnum.REPLY_SENT
        self.mail.save()

        response_date = self.mail.response_date

        email_message_dto = EmailMessageDto(
            run_number=self.hmrc_run_number,
            sender=HMRC_ADDRESS,
            receiver=EMAIL_USER,
            date="Mon, 17 May 2021 14:20:18 +0100",
            body="body",
            subject=self.licence_data_reply_name,
            attachment=[
                self.licence_data_reply_name, self.licence_data_reply_body
            ],
            raw_data="qwerty",
        )

        serialize_email_message(email_message_dto)

        self.mail.refresh_from_db()

        self.assertEqual(response_date, self.mail.response_date)
Ejemplo n.º 3
0
    def test_mail_data_serialized_successfully(self):
        email_message_dto = EmailMessageDto(
            run_number=self.source_run_number,
            sender=HMRC_ADDRESS,
            receiver=SPIRE_ADDRESS,
            date="Mon, 17 May 2021 14:20:18 +0100",
            body="body",
            subject=self.licence_usage_file_name,
            attachment=[
                self.licence_usage_file_name, self.licence_usage_file_body
            ],
            raw_data="",
        )
        self.assertRaises(ValidationError, serialize_email_message,
                          email_message_dto)

        email = Mail.objects.last()
        usage_data = UsageData.objects.get(mail=email)

        self.assertEqual(email.extract_type, ExtractTypeEnum.USAGE_DATA)
        self.assertEqual(email.response_filename, None)
        self.assertEqual(email.response_data, None)
        self.assertEqual(usage_data.hmrc_run_number, self.hmrc_run_number)
        self.assertEqual(usage_data.spire_run_number,
                         email_message_dto.run_number)
        self.assertEqual(email.raw_data, email_message_dto.raw_data)
Ejemplo n.º 4
0
    def test_usage_data_reply_is_saved(self):
        self.mail.status = ReceptionStatusEnum.REPLY_PENDING
        self.mail.save()
        email_message_dto = EmailMessageDto(
            run_number=self.source_run_number + 1,
            sender=SPIRE_ADDRESS,
            receiver=HMRC_ADDRESS,
            date="Mon, 17 May 2021 14:20:18 +0100",
            body="body",
            subject=self.usage_data_reply_name,
            attachment=[
                self.usage_data_reply_name, self.usage_data_reply_body
            ],
            raw_data="qwerty",
        )

        serialize_email_message(email_message_dto)
        self.mail.refresh_from_db()

        self.assertEqual(self.mail.status, ReceptionStatusEnum.REPLY_RECEIVED)
        self.assertIsNotNone(self.mail.response_date)

        self.assertIn(
            self.mail.response_data,
            self.usage_data_reply_body.decode("utf-8"),
        )
Ejemplo n.º 5
0
def to_mail_message_dto(mail_data) -> EmailMessageDto:
    mail_contents = mail_data[1]
    contents = b"\r\n".join(mail_contents).decode(settings.DEFAULT_ENCODING)
    msg_obj = Parser().parsestr(contents)
    msg = body_contents_of(msg_obj)
    file_name, file_data = get_attachment(msg_obj)
    msg_date = parse(msg_obj.get("Date"))
    return EmailMessageDto(
        subject=msg_obj.get("Subject"),
        sender=msg_obj.get("From"),
        receiver=msg_obj.get("To"),
        date=msg_date,
        body=msg,
        attachment=[file_name, file_data],
        run_number=get_run_number(msg_obj.get("Subject")),
        raw_data=str(mail_data),
    )
Ejemplo n.º 6
0
def build_reply_mail_message_dto(mail) -> EmailMessageDto:
    sender = settings.HMRC_ADDRESS
    receiver = settings.SPIRE_ADDRESS
    run_number = None

    if mail.extract_type == ExtractTypeEnum.LICENCE_DATA:
        licence_data = LicenceData.objects.get(mail=mail)
        run_number = licence_data.source_run_number
        receiver = convert_source_to_sender(licence_data.source)
        logging.info(
            f"[{mail.extract_type}] Source {licence_data.source} run number: {run_number}, HMRC run number: {licence_data.hmrc_run_number}"
        )
    elif mail.extract_type == ExtractTypeEnum.LICENCE_REPLY:
        licence_data = LicenceData.objects.get(mail=mail)
        run_number = licence_data.source_run_number
        receiver = convert_source_to_sender(licence_data.source)
        logging.info(
            f"[{mail.extract_type}] Source {licence_data.source} run number: {run_number}, HMRC run number: {licence_data.hmrc_run_number}"
        )
    elif mail.extract_type == ExtractTypeEnum.USAGE_DATA:
        usage_data = UsageData.objects.get(mail=mail)
        run_number = usage_data.hmrc_run_number
        sender = settings.SPIRE_ADDRESS
        receiver = settings.HMRC_ADDRESS
        mail.response_data = combine_lite_and_spire_usage_responses(mail)

    attachment = [
        build_sent_filename(mail.response_filename, run_number),
        build_sent_file_data(mail.response_data, run_number),
    ]

    logging.info(
        f"Preparing reply Mail dto of extract type {mail.extract_type}, sender {sender}, receiver {receiver} with filename {attachment[0]}"
    )

    return EmailMessageDto(
        run_number=run_number,
        sender=sender,
        receiver=receiver,
        subject=attachment[0],
        date=datetime.now(),
        body=None,
        attachment=attachment,
        raw_data=None,
    )
Ejemplo n.º 7
0
def build_request_mail_message_dto(mail: Mail) -> EmailMessageDto:
    sender = None
    receiver = None
    attachment = [None, None]
    run_number = 0
    if mail.extract_type == ExtractTypeEnum.LICENCE_DATA:
        sender = settings.INCOMING_EMAIL_USER
        receiver = settings.OUTGOING_EMAIL_USER
        licence_data = LicenceData.objects.get(mail=mail)
        run_number = licence_data.hmrc_run_number
        attachment = [
            build_sent_filename(mail.edi_filename, run_number),
            build_sent_file_data(mail.edi_data, run_number),
        ]
    elif mail.extract_type == ExtractTypeEnum.USAGE_DATA:
        sender = settings.HMRC_ADDRESS
        receiver = settings.SPIRE_ADDRESS
        update = UsageData.objects.get(mail=mail)
        run_number = update.spire_run_number
        spire_data, _ = split_edi_data_by_id(mail.edi_data)
        if len(
                spire_data
        ) > 2:  # if SPIRE blocks contain more than just a header & footer
            file = build_edifact_file_from_data_blocks(spire_data)
            attachment = [
                build_sent_filename(mail.edi_filename, run_number),
                build_sent_file_data(file, run_number),
            ]

    logging.info(
        f"Preparing request Mail dto of extract type {mail.extract_type}, sender {sender}, receiver {receiver} with filename {attachment[0]}"
    )

    return EmailMessageDto(
        run_number=run_number,
        sender=sender,
        receiver=receiver,
        date=datetime.now(),
        subject=attachment[0],
        body=None,
        attachment=attachment,
        raw_data=None,
    )
Ejemplo n.º 8
0
def build_reply_mail_message_dto(mail) -> EmailMessageDto:
    if mail.extract_type not in MOCK_HMRC_SUPPORTED_EXTRACT_TYPES:
        return None

    sender = settings.MOCK_HMRC_EMAIL_USER
    receiver = settings.SPIRE_STANDIN_EMAIL_USER
    attachment = [
        build_reply_pending_filename(mail.edi_filename),
        build_reply_pending_file_data(mail),
    ]

    return EmailMessageDto(
        run_number=mail.source_run_number,
        sender=sender,
        receiver=receiver,
        subject=attachment[0],
        body=None,
        attachment=attachment,
        raw_data=None,
    )
Ejemplo n.º 9
0
    def test_build_email_message(self):
        attachment = "30 \U0001d5c4\U0001d5c6/\U0001d5c1 \u5317\u4EB0"
        email_message_dto = EmailMessageDto(
            run_number=1,
            sender=settings.HMRC_ADDRESS,
            receiver=settings.SPIRE_ADDRESS,
            date="Mon, 17 May 2021 14:20:18 +0100",
            body=None,
            subject="Some subject",
            attachment=["some filename", attachment],
            raw_data="",
        )

        mime_multipart = builders.build_email_message(email_message_dto)
        mime_multipart.set_boundary("===============8537751789001939036==")

        self.assertEqual(
            mime_multipart.as_string(),
            ('Content-Type: multipart/mixed; boundary="===============8537751789001939036=="\n'
             "MIME-Version: 1.0\n"
             f"From: {settings.EMAIL_USER}\n"
             f"To: {settings.SPIRE_ADDRESS}\n"
             "Subject: Some subject\n"
             "name: Some subject\n\n"
             "--===============8537751789001939036==\n"
             'Content-Type: text/plain; charset="iso-8859-1"\n'
             "MIME-Version: 1.0\n"
             "Content-Transfer-Encoding: quoted-printable\n\n"
             "\n\n\n"
             "--===============8537751789001939036==\n"
             "Content-Type: application/octet-stream\n"
             "MIME-Version: 1.0\n"
             "Content-Transfer-Encoding: base64\n"
             'Content-Disposition: attachment; filename="some filename"\n'
             "Content-Transfer-Encoding: 7bit\n"
             "name: Some subject\n\n"
             "30 km/h Bei Jing \n"
             "--===============8537751789001939036==--\n"),
        )
Ejemplo n.º 10
0
    def test_licence_data_reply_is_saved(self):
        self.mail.extract_type = ExtractTypeEnum.LICENCE_DATA
        self.mail.status = ReceptionStatusEnum.REPLY_PENDING
        self.mail.save()

        email_message_dto = EmailMessageDto(
            run_number=self.source_run_number + 1,
            sender=HMRC_ADDRESS,
            receiver=SPIRE_ADDRESS,
            date="Mon, 17 May 2021 14:20:18 +0100",
            body="body",
            subject=self.licence_data_reply_name,
            attachment=[
                self.licence_data_reply_name,
                self.licence_data_reply_body,
            ],
            raw_data="qwerty",
        )

        serialize_email_message(email_message_dto)
        self.mail.refresh_from_db()
        logging.debug("resp data: {}".format(self.mail.response_data))
        self.assertEqual(self.mail.status, ReceptionStatusEnum.REPLY_RECEIVED)
        self.assertIsNotNone(self.mail.response_date)