mirror of
https://github.com/bec-project/bec_widgets.git
synced 2025-07-14 11:41:49 +02:00
refactor: tidy client generation and add options
This commit is contained in:
98
tests/unit_tests/test_generate_cli.py
Normal file
98
tests/unit_tests/test_generate_cli.py
Normal 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
|
Reference in New Issue
Block a user