mirror of
https://github.com/zc-zhangchen/any-auto-register.git
synced 2026-05-08 08:14:04 +08:00
65 lines
1.7 KiB
Python
65 lines
1.7 KiB
Python
import unittest
|
|
|
|
from core.base_mailbox import BaseMailbox, MailboxAccount
|
|
from core.task_runtime import (
|
|
RegisterTaskControl,
|
|
SkipCurrentAttemptRequested,
|
|
StopTaskRequested,
|
|
)
|
|
|
|
|
|
class _PollingMailbox(BaseMailbox):
|
|
def __init__(self):
|
|
self.poll_count = 0
|
|
|
|
def get_email(self) -> MailboxAccount:
|
|
return MailboxAccount(email="demo@example.com")
|
|
|
|
def get_current_ids(self, account: MailboxAccount) -> set:
|
|
return set()
|
|
|
|
def wait_for_code(
|
|
self,
|
|
account: MailboxAccount,
|
|
keyword: str = "",
|
|
timeout: int = 120,
|
|
before_ids: set = None,
|
|
code_pattern: str = None,
|
|
**kwargs,
|
|
) -> str:
|
|
def poll_once():
|
|
self.poll_count += 1
|
|
return None
|
|
|
|
return self._run_polling_wait(
|
|
timeout=timeout,
|
|
poll_interval=0.01,
|
|
poll_once=poll_once,
|
|
)
|
|
|
|
|
|
class MailboxTaskControlTests(unittest.TestCase):
|
|
def test_skip_current_interrupts_wait_loop(self):
|
|
mailbox = _PollingMailbox()
|
|
mailbox._task_control = RegisterTaskControl()
|
|
mailbox._task_control.request_skip_current()
|
|
|
|
with self.assertRaises(SkipCurrentAttemptRequested):
|
|
mailbox.wait_for_code(mailbox.get_email(), timeout=1)
|
|
|
|
self.assertEqual(mailbox.poll_count, 0)
|
|
|
|
def test_stop_interrupts_wait_loop(self):
|
|
mailbox = _PollingMailbox()
|
|
mailbox._task_control = RegisterTaskControl()
|
|
mailbox._task_control.request_stop()
|
|
|
|
with self.assertRaises(StopTaskRequested):
|
|
mailbox.wait_for_code(mailbox.get_email(), timeout=1)
|
|
|
|
self.assertEqual(mailbox.poll_count, 0)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|