import unittest

import pytest

from pypos.modules.penjualan.models.transaksi_value_utils import TransaksiValueUtils

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


class TransaksiValueUtilsTests(unittest.TestCase):
    def test_as_positive_int(self):
        self.assertEqual(TransaksiValueUtils.as_positive_int("7"), 7)
        self.assertEqual(TransaksiValueUtils.as_positive_int("0"), 0)
        self.assertEqual(TransaksiValueUtils.as_positive_int("-3"), 0)
        self.assertEqual(TransaksiValueUtils.as_positive_int("bad", default=5), 5)

    def test_extract_point_from_diskon_log(self):
        self.assertEqual(TransaksiValueUtils.extract_point_from_diskon_log("point=10"), 10)
        self.assertEqual(TransaksiValueUtils.extract_point_from_diskon_log("x=1;point=2.9"), 2)
        self.assertEqual(TransaksiValueUtils.extract_point_from_diskon_log("x=1"), 0)

    def test_extract_diskon_customer_from_diskon_log(self):
        self.assertAlmostEqual(
            TransaksiValueUtils.extract_diskon_customer_from_diskon_log("diskon_customer=15.5"),
            15.5,
            places=2,
        )
        self.assertAlmostEqual(
            TransaksiValueUtils.extract_diskon_customer_from_diskon_log("x=1"),
            0.0,
            places=2,
        )

    def test_extract_ppn_mode_from_diskon_log(self):
        self.assertEqual(TransaksiValueUtils.extract_ppn_mode_from_diskon_log("ppn_mode=include"), "include")
        self.assertEqual(TransaksiValueUtils.extract_ppn_mode_from_diskon_log("x=1;ppn_mode=exclude"), "exclude")
        self.assertEqual(TransaksiValueUtils.extract_ppn_mode_from_diskon_log("ppn_mode=legacy"), "")


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