import unittest

import pytest

from pypos.modules.penjualan.services.transaksi_harga_validation_service import (
    TransaksiHargaValidationService,
)

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


class TransaksiHargaValidationServiceTests(unittest.TestCase):
    def test_resolve_harga_jual_dengan_prioritas_field(self):
        payload = {"harga": "2500", "harga_normal": "2000", "harga_jual": "1500"}
        self.assertEqual(
            TransaksiHargaValidationService.resolve_harga_jual(payload),
            2500.0,
        )

        payload_fallback = {"harga": 0, "harga_normal": "1950", "harga_jual": "2200"}
        self.assertEqual(
            TransaksiHargaValidationService.resolve_harga_jual(payload_fallback),
            1950.0,
        )

    def test_is_valid_harga_jual_false_untuk_payload_invalid(self):
        self.assertFalse(TransaksiHargaValidationService.is_valid_harga_jual(None))
        self.assertFalse(
            TransaksiHargaValidationService.is_valid_harga_jual({"harga": "", "harga_normal": 0, "harga_jual": None})
        )

    def test_build_log_dan_warning_message(self):
        log_line = TransaksiHargaValidationService.build_invalid_harga_log(
            id_barang="123",
            barang_detail={"nama": "Produk A", "barcode": "8990000000000"},
        )
        self.assertIn("id=123", log_line)
        self.assertIn("Produk A", log_line)
        self.assertIn("8990000000000", log_line)

        msg = TransaksiHargaValidationService.build_invalid_harga_warning_message().lower()
        self.assertIn("web admin", msg)
        self.assertIn("sinkronisasi", msg)


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