import unittest

import pytest

from pypos.modules.auth.services.device_registration_retry_policy import (
    DeviceRegistrationRetryPolicy,
)

# edited by glg
pytestmark = [pytest.mark.unit]


class DeviceRegistrationRetryPolicyTests(unittest.TestCase):
    def test_resolve_probe_attempt_limit(self):
        policy = DeviceRegistrationRetryPolicy()
        self.assertEqual(policy.resolve_probe_attempt_limit({}), 1)
        self.assertEqual(policy.resolve_probe_attempt_limit({"device_registration_probe_retry_attempts": 0}), 1)
        self.assertEqual(policy.resolve_probe_attempt_limit({"device_registration_probe_retry_attempts": 2}), 2)
        self.assertEqual(policy.resolve_probe_attempt_limit({"device_registration_probe_retry_attempts": 10}), 3)

    def test_retry_decision(self):
        policy = DeviceRegistrationRetryPolicy()
        self.assertTrue(policy.should_retry_probe_exception(1, 2, Exception("x")))
        self.assertFalse(policy.should_retry_probe_exception(2, 2, Exception("x")))
        self.assertTrue(policy.should_retry_probe_status(1, 2, None))
        self.assertFalse(policy.should_retry_probe_status(2, 2, None))
        self.assertFalse(policy.should_retry_probe_status(1, 2, 200))


if __name__ == "__main__":
    unittest.main()
