import unittest

import pytest

from pypos.modules.auth.services.device_registration_response_mapper import (
    DeviceRegistrationResponseMapper,
)

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


class DeviceRegistrationResponseMapperTests(unittest.TestCase):
    def test_extractors(self):
        mapper = DeviceRegistrationResponseMapper()
        self.assertEqual(mapper.extract_status_code({"status": "200"}), 200)
        self.assertEqual(mapper.extract_status_code({"status": "ok"}), "ok")
        self.assertEqual(mapper.extract_status_code("bad"), None)

        self.assertEqual(
            mapper.extract_data_reg({"dataReg": {"id": 1}}),
            {"id": 1},
        )
        self.assertEqual(
            mapper.extract_data_reg({"data": {"id": 2}}),
            {"id": 2},
        )

    def test_result_builders_and_status_mapper(self):
        mapper = DeviceRegistrationResponseMapper()
        self.assertTrue(mapper.is_registration_success_status(200))
        self.assertTrue(mapper.is_registration_success_status("success"))
        self.assertFalse(mapper.is_registration_success_status("failed"))

        existing = mapper.build_existing_registered_result("Cabang A", auto_close=True)
        self.assertTrue(existing["ok"])
        self.assertTrue(existing["already_registered"])
        self.assertTrue(existing["auto_close"])
        self.assertIn("Cabang A", existing["message"])

        pending = mapper.build_pending_approval_result(auto_close=False)
        self.assertTrue(pending["pending_approval"])
        self.assertNotIn("auto_close", pending)

        self.assertTrue(mapper.is_conflict_cabang_reason("conflict_cabang_id"))
        self.assertEqual(
            mapper.extract_failure_reason({"reason": "bad request"}),
            "bad request",
        )


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