# edited by glg
import unittest
from unittest.mock import patch

from pypos.modules.penjualan.services.transaksi_payload_service import (
    TransaksiPayloadService,
)


class TransaksiContextGudangPerCabangTests(unittest.TestCase):
    def test_context_prioritizes_cabang_default_gudang(self):
        service = TransaksiPayloadService()
        service._lookup_cabang_default_gudang = lambda cabang_id: {
            "gudang_id": -1010,
            "gudang_nama": "Gudang Cabang",
        }
        with patch(
            "pypos.modules.penjualan.services.transaksi_payload_service.get_active_device_info",
            return_value={"cabang_id": 101, "toko_id": 1},
        ), patch(
            "pypos.modules.penjualan.services.transaksi_payload_service.get_device_id",
            return_value="MACHINE-1",
        ):
            ctx = service._resolve_transaksi_context(
                {
                    "id": 188,
                    "nama": "kasir",
                    "cabang_id": 101,
                    "gudang_id": -999,
                    "gudang_nama": "Gudang User",
                }
            )

        self.assertEqual(int(ctx.get("gudang_id") or 0), -1010)
        self.assertEqual(str(ctx.get("gudang_nama") or ""), "Gudang Cabang")

    def test_context_falls_back_to_user_gudang_when_cabang_default_empty(self):
        service = TransaksiPayloadService()
        service._lookup_cabang_default_gudang = lambda cabang_id: {
            "gudang_id": 0,
            "gudang_nama": "",
        }
        with patch(
            "pypos.modules.penjualan.services.transaksi_payload_service.get_active_device_info",
            return_value={"cabang_id": 101, "toko_id": 1},
        ), patch(
            "pypos.modules.penjualan.services.transaksi_payload_service.get_device_id",
            return_value="MACHINE-1",
        ):
            ctx = service._resolve_transaksi_context(
                {
                    "id": 188,
                    "nama": "kasir",
                    "cabang_id": 101,
                    "gudang_id": -999,
                    "gudang_nama": "Gudang User",
                }
            )

        self.assertEqual(int(ctx.get("gudang_id") or 0), -999)
        self.assertEqual(str(ctx.get("gudang_nama") or ""), "Gudang User")


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