# Copyright (c) Huawei Technologies Co., Ltd. 2026-2026. All rights reserved.

# OpenOLC is licensed under Mulan PSL v2.

# You can use this software according to the terms and conditions of the Mulan PSL v2.

# You may obtain a copy of Mulan PSL v2 at:

#         `http://license.coscl.org.cn/MulanPSL2`

# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,

# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,

# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.

# See the Mulan PSL v2 for more details.



import unittest



from olc.bean.policy_category import PolicyCategory





class TestPolicyCategory(unittest.TestCase):



    def test_policy_category_enum_values(self):

        """测试策略类型枚举值是否正确"""

        self.assertEqual(PolicyCategory.FLOW.value, "FLOW")

        self.assertEqual(PolicyCategory.ADMISSION.value, "ADMISSION")

        self.assertEqual(PolicyCategory.DEGRADE.value, "DEGRADE")

        self.assertEqual(PolicyCategory.AUTHORITY.value, "AUTHORITY")

        self.assertEqual(PolicyCategory.SYSTEM.value, "SYSTEM")

        self.assertEqual(PolicyCategory.ISOLATION.value, "ISOLATION")

        self.assertEqual(PolicyCategory.NET.value, "NET")

        self.assertEqual(PolicyCategory.RETRY.value, "RETRY")

        self.assertEqual(PolicyCategory.TIMELIMITER.value, "TIMELIMITER")



    def test_from_string_returns_category_for_valid_name(self):

        """测试from_string方法能正确解析有效的枚举名称"""

        self.assertEqual(PolicyCategory.from_string("FLOW"), PolicyCategory.FLOW)

        self.assertEqual(PolicyCategory.from_string("ADMISSION"), PolicyCategory.ADMISSION)

        self.assertEqual(PolicyCategory.from_string("DEGRADE"), PolicyCategory.DEGRADE)



    def test_from_string_case_insensitive(self):

        """测试from_string方法大小写不敏感"""

        self.assertEqual(PolicyCategory.from_string("flow"), PolicyCategory.FLOW)

        self.assertEqual(PolicyCategory.from_string("Flow"), PolicyCategory.FLOW)

        self.assertEqual(PolicyCategory.from_string("admission"), PolicyCategory.ADMISSION)

        self.assertEqual(PolicyCategory.from_string("Admission"), PolicyCategory.ADMISSION)



    def test_from_string_returns_none_for_invalid_name(self):

        """测试from_string方法对无效名称返回None"""

        self.assertIsNone(PolicyCategory.from_string("invalid"))

        self.assertIsNone(PolicyCategory.from_string(""))

        self.assertIsNone(PolicyCategory.from_string("UNKNOWN"))



    def test_from_string_returns_none_for_none(self):

        """测试from_string方法对None输入返回None"""

        self.assertIsNone(PolicyCategory.from_string(None))



    def test_is_admission_returns_true_for_admission_category(self):

        """测试is_admission方法对ADMISSION类型返回True"""

        self.assertTrue(PolicyCategory.is_admission("ADMISSION"))

        self.assertTrue(PolicyCategory.is_admission("admission"))

        self.assertTrue(PolicyCategory.is_admission("Admission"))



    def test_is_admission_returns_false_for_non_admission_category(self):

        """测试is_admission方法对非ADMISSION类型返回False"""

        self.assertFalse(PolicyCategory.is_admission("FLOW"))

        self.assertFalse(PolicyCategory.is_admission("flow"))

        self.assertFalse(PolicyCategory.is_admission("DEGRADE"))

        self.assertFalse(PolicyCategory.is_admission("AUTHORITY"))



    def test_is_admission_returns_false_for_invalid_category(self):

        """测试is_admission方法对无效类型返回False"""

        self.assertFalse(PolicyCategory.is_admission("invalid"))

        self.assertFalse(PolicyCategory.is_admission(""))

        self.assertFalse(PolicyCategory.is_admission(None))





if __name__ == '__main__':

    unittest.main()