0
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2025-07-14 03:31:50 +02:00

refactor: tidy client generation and add options

This commit is contained in:
2025-02-28 17:23:43 +01:00
parent 43e1aa9505
commit b4925918f7
6 changed files with 2878 additions and 3076 deletions

View File

@ -0,0 +1,98 @@
from unittest import mock
import pytest
from bec_widgets.cli.generate_cli import BECClassContainer, ClientGenerator
def test_client_generator_init():
"""
Test the initialization of the ClientGenerator class.
"""
generator = ClientGenerator()
assert generator.header.startswith("# This file was automatically generated by generate_cli.py")
assert generator.content == ""
def test_generate_client():
"""
Test the generate_client method of the ClientGenerator class.
"""
generator = ClientGenerator()
class_container = mock.MagicMock(spec=BECClassContainer)
class_container.rpc_top_level_classes = [mock.MagicMock(RPC=True, __name__="TestClass1")]
class_container.connector_classes = [mock.MagicMock(RPC=True, __name__="TestClass2")]
generator.generate_client(class_container)
assert '"TestClass1": "TestClass1"' in generator.content
assert "class TestClass2(RPCBase):" in generator.content
@pytest.mark.parametrize("plugin", (True, False))
def test_write_client_enum(plugin):
"""
Test the write_client_enum method of the ClientGenerator class.
"""
generator = ClientGenerator(base=plugin)
published_classes = [
mock.MagicMock(__name__="TestClass1"),
mock.MagicMock(__name__="TestClass2"),
]
generator.write_client_enum(published_classes)
assert ("class _WidgetsEnumType(str, enum.Enum):" in generator.content) is plugin
assert '"TestClass1": "TestClass1",' in generator.content
assert '"TestClass2": "TestClass2",' in generator.content
def test_generate_content_for_class():
"""
Test the generate_content_for_class method of the ClientGenerator class.
"""
generator = ClientGenerator()
cls = mock.MagicMock(__name__="TestClass", USER_ACCESS=["method1"])
method = mock.MagicMock()
method.__name__ = "method1"
method.__doc__ = "Test method"
method_signature = "(self)"
cls.method1 = method
with mock.patch("inspect.signature", return_value=method_signature):
generator.generate_content_for_class(cls)
assert "class TestClass(RPCBase):" in generator.content
assert "def method1(self):" in generator.content
assert "Test method" in generator.content
def test_write_is_black_formatted(tmp_path):
"""
Test the write method of the ClientGenerator class.
"""
generator = ClientGenerator()
generator.content = """
def test_content():
pass
a=1
b=2
c=a+b
"""
corrected = """def test_content():
pass
a = 1
b = 2
c = a + b"""
file_name = tmp_path / "test_client.py"
generator.write(str(file_name))
with open(file_name, "r", encoding="utf-8") as file:
content = file.read()
assert corrected in content