Skip to content

Commit

Permalink
Add initial unit tests for FunctionsView class
Browse files Browse the repository at this point in the history
  • Loading branch information
salmon131 committed Jun 3, 2023
1 parent 4f20a68 commit 4a9cda5
Showing 1 changed file with 146 additions and 0 deletions.
146 changes: 146 additions & 0 deletions python/tests/unit/skill_definition/test_functions_view.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
import pytest
from semantic_kernel.kernel_exception import KernelException
from semantic_kernel.skill_definition.function_view import FunctionView
from semantic_kernel.skill_definition.functions_view import FunctionsView, FunctionView


def test_add_semantic_function():
view = FunctionView(
name="function1",
skill_name="skill1",
description="Semantic function",
parameters=[],
is_semantic=True,
is_asynchronous=True
)
functions_view = FunctionsView()
functions_view.add_function(view)
semantic_functions = functions_view._semantic_functions.get("skill1")
assert len(semantic_functions) == 1
assert semantic_functions[0] == view


def test_add_native_function():
view = FunctionView(
name="function2",
skill_name="skill2",
description="Native function",
parameters=[],
is_semantic=False,
is_asynchronous=True
)
functions_view = FunctionsView()
functions_view.add_function(view)
native_functions = functions_view._native_functions.get("skill2")
assert len(native_functions) == 1
assert native_functions[0] == view


def test_add_multiple_functions():
semantic_function = FunctionView(
name="function1",
skill_name="skill1",
description="Semantic function",
parameters=[],
is_semantic=True,
is_asynchronous=True
)
native_function = FunctionView(
name="function2",
skill_name="skill2",
description="Native function",
parameters=[],
is_semantic=False,
is_asynchronous=True
)
functions_view = FunctionsView()
functions_view.add_function(semantic_function)
functions_view.add_function(native_function)
semantic_functions = functions_view._semantic_functions.get("skill1")
native_functions = functions_view._native_functions.get("skill2")
assert len(semantic_functions) == 1
assert semantic_functions[0] == semantic_function
assert len(native_functions) == 1
assert native_functions[0] == native_function


def test_is_semantic():
semantic_function = FunctionView(
name="function1",
skill_name="skill1",
description="Semantic function",
parameters=[],
is_semantic=True,
is_asynchronous=True
)
native_function = FunctionView(
name="function2",
skill_name="skill2",
description="Native function",
parameters=[],
is_semantic=False,
is_asynchronous=True
)
functions_view = FunctionsView()
functions_view.add_function(semantic_function)
functions_view.add_function(native_function)
assert functions_view.is_semantic("skill1", "function1") == True
assert functions_view.is_semantic("skill2", "function2") == False
assert functions_view.is_semantic("skill1", "unregistered_function") == False


def test_is_native():
semantic_function = FunctionView(
name="function1",
skill_name="skill1",
description="Semantic function",
parameters=[],
is_semantic=True,
is_asynchronous=True
)
native_function = FunctionView(
name="function2",
skill_name="skill2",
description="Native function",
parameters=[],
is_semantic=False,
is_asynchronous=True
)
functions_view = FunctionsView()
functions_view.add_function(semantic_function)
functions_view.add_function(native_function)
assert functions_view.is_native("skill1", "function1") == False
assert functions_view.is_native("skill2", "function2") == True
assert functions_view.is_native("skill2", "unregistered_function") == False


def test_ambiguous_implementation():
semantic_function = FunctionView(
name="function1",
skill_name="skill1",
description="Semantic function",
parameters=[],
is_semantic=True,
is_asynchronous=True
)
native_function = FunctionView(
name="function1",
skill_name="skill1",
description="Native function",
parameters=[],
is_semantic=False,
is_asynchronous=True
)
functions_view = FunctionsView()
functions_view.add_function(semantic_function)
functions_view.add_function(native_function)

with pytest.raises(KernelException) as exc_info:
functions_view.is_semantic("skill1", "function1")

assert exc_info.value.error_code == KernelException.ErrorCodes.AmbiguousImplementation

with pytest.raises(KernelException) as exc_info:
functions_view.is_native("skill1", "function1")

assert exc_info.value.error_code == KernelException.ErrorCodes.AmbiguousImplementation

0 comments on commit 4a9cda5

Please sign in to comment.