import os

from core.utils.module_import_helper import import_module_from_source, load_single_subclass_from_source
from tests.integration_tests.utils.parent_class import ParentClass


def test_loading_subclass_from_source():
    current_path = os.getcwd()
    module = load_single_subclass_from_source(
        module_name='ChildClass',
        script_path=os.path.join(current_path, 'child_class.py'),
        parent_type=ParentClass)
    assert module and module.__name__ == 'ChildClass'


def test_load_import_module_from_source():
    current_path = os.getcwd()
    module = import_module_from_source(
        module_name='ChildClass',
        py_file_path=os.path.join(current_path, 'child_class.py'))
    assert module and module.__name__ == 'ChildClass'


def test_lazy_loading_subclass_from_source():
    current_path = os.getcwd()
    clz = load_single_subclass_from_source(
        module_name='LazyLoadChildClass',
        script_path=os.path.join(current_path, 'lazy_load_class.py'),
        parent_type=ParentClass,
        use_lazy_loader=True)
    instance = clz('dify')
    assert instance.get_name() == 'dify'