import os

from django.test import TestCase

from django_mailbox.models import Mailbox


__all__ = ["TestMailbox"]


class TestMailbox(TestCase):
    def test_protocol_info(self):
        mailbox = Mailbox()
        mailbox.uri = "alpha://test.com"

        expected_protocol = "alpha"
        actual_protocol = mailbox._protocol_info.scheme

        self.assertEqual(
            expected_protocol,
            actual_protocol,
        )

    def test_last_polling_field_exists(self):
        mailbox = Mailbox()
        self.assertTrue(hasattr(mailbox, "last_polling"))

    def test_get_new_mail_update_last_polling(self):
        mailbox = Mailbox.objects.create(
            uri="mbox://"
            + os.path.join(
                os.path.dirname(__file__),
                "messages",
                "generic_message.eml",
            )
        )
        self.assertEqual(mailbox.last_polling, None)
        list(mailbox.get_new_mail())
        self.assertNotEqual(mailbox.last_polling, None)

    def test_queryset_get_new_mail(self):
        mailbox = Mailbox.objects.create(
            uri="mbox://"
            + os.path.join(
                os.path.dirname(__file__),
                "messages",
                "generic_message.eml",
            )
        )
        Mailbox.objects.filter(pk=mailbox.pk).get_new_mail()
        mailbox.refresh_from_db()
        self.assertNotEqual(mailbox.last_polling, None)
