# Copyright (c) Huawei Technologies Co., Ltd. 2026-2026. All rights reserved.
# MindIE 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.olc_control_request import OlcControlRequest


class TestOlcControlRequest(unittest.TestCase):
    def test_initialization(self):
        """测试OlcControlRequest的初始化"""
        # 测试默认值
        request1 = OlcControlRequest()
        self.assertEqual(request1.tags, {})
        self.assertEqual(request1.token_number, 0)

        # 测试带参数初始化
        tags = {"service": "service1", "interface": "interface1"}
        request2 = OlcControlRequest(tags=tags, token_number=5)
        self.assertEqual(request2.tags, tags)
        self.assertEqual(request2.token_number, 5)

    def test_equality(self):
        """测试相等性比较"""
        tags = {"service": "service1", "interface": "interface1"}
        request1 = OlcControlRequest(tags=tags, token_number=5)
        request2 = OlcControlRequest(tags=tags, token_number=5)
        request3 = OlcControlRequest(tags=tags, token_number=10)
        request4 = OlcControlRequest(tags={"service": "service2"}, token_number=5)

        # 测试相等的情况
        self.assertEqual(request1, request2)

        # 测试令牌数不同的情况
        self.assertEqual(request1, request3)

        # 测试标签不同的情况
        self.assertNotEqual(request1, request4)

        # 测试与非OlcControlRequest对象比较
        self.assertNotEqual(request1, "not a request")

    def test_hash(self):
        """测试哈希方法"""
        tags = {"service": "service1", "interface": "interface1"}
        request1 = OlcControlRequest(tags=tags, token_number=5)
        request2 = OlcControlRequest(
            tags=tags, token_number=10
        )  # 不同的token_number但相同的tags

        # 哈希值应该基于tags,而不是token_number
        self.assertEqual(hash(request1), hash(request2))

    def test_repr_method(self):
        """测试__repr__方法"""
        tags = {"service": "service1"}
        request = OlcControlRequest(tags=tags, token_number=5)
        repr_str = repr(request)
        self.assertIn("OlcControlRequest", repr_str)
        self.assertIn("service1", repr_str)
        self.assertIn("5", repr_str)

    def test_str_method(self):
        """测试__str__方法"""
        tags = {"service": "service1"}
        request = OlcControlRequest(tags=tags, token_number=5)
        str_str = str(request)
        self.assertIn("OlcControlRequest", str_str)
        self.assertIn("service1", str_str)
        self.assertIn("5", str_str)


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