import unittest

import pytest

from pypos.modules.auth.services.device_registration_request_builder import (
    DeviceRegistrationRequestBuilder,
)

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


class DeviceRegistrationRequestBuilderTests(unittest.TestCase):
    def test_parse_toko_id(self):
        self.assertEqual(DeviceRegistrationRequestBuilder.parse_toko_id("1001"), 1001)
        with self.assertRaises(ValueError):
            DeviceRegistrationRequestBuilder.parse_toko_id("")
        with self.assertRaises(ValueError):
            DeviceRegistrationRequestBuilder.parse_toko_id("0")

    def test_normalize_and_required_fields(self):
        data = DeviceRegistrationRequestBuilder.normalize_register_inputs(
            alias=" kasir-1 ",
            keterangan=" meja depan ",
            cabang_nama=" Cabang A ",
            cabang_id=" 101 ",
            nama_pengguna=" glg ",
            web_admin_url=" https://demo ",
            toko_id=" 1001 ",
        )
        self.assertEqual(data["alias"], "kasir-1")
        self.assertTrue(DeviceRegistrationRequestBuilder.has_required_register_fields(data))
        data["alias"] = ""
        self.assertFalse(DeviceRegistrationRequestBuilder.has_required_register_fields(data))

    def test_build_payloads(self):
        payload = DeviceRegistrationRequestBuilder.build_registration_payload(
            machine_id="MID-01",
            browser_verif="123456",
            alias="kasir-1",
            keterangan="meja depan",
            cabang_nama="Cabang A",
            cabang_id="101",
            nama_pengguna="glg",
            toko_id_int=1001,
        )
        self.assertEqual(payload["machine_id"], "MID-01")
        self.assertEqual(payload["toko_id"], 1001)
        self.assertIn("cpu_info", payload)
        self.assertIn("com_info", payload)

        pending = DeviceRegistrationRequestBuilder.build_pending_local_payload(
            machine_id="MID-01",
            browser_verif="123456",
            alias="kasir-1",
            keterangan="meja depan",
            cabang_nama="Cabang A",
            cabang_id="101",
            nama_pengguna="glg",
            toko_id_int=1001,
            cpu_info="cpu",
            com_info="host",
        )
        self.assertEqual(pending["nama"], "glg")
        self.assertEqual(pending["cpu_info"], "cpu")
        self.assertEqual(pending["com_info"], "host")


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