Skip to content

Commit

Permalink
✨ Fix tests
Browse files Browse the repository at this point in the history
  • Loading branch information
asim-shrestha committed Jul 23, 2023
1 parent 6ad94ea commit 888c758
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 40 deletions.
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
from typing import Literal, Union
from typing import Literal, TypeVar

from reworkd_platform.schemas.workflow.base import Block, BlockIOBase

T = TypeVar("T", float, str)


class IfInput(BlockIOBase):
value_one: Union[str, int, float, bool]
value_one: str
operator: Literal["==", "!=", "<", ">", "<=", ">="]
value_two: Union[str, int, float, bool]
value_two: str


class IfOutput(BlockIOBase):
Expand All @@ -23,19 +25,38 @@ async def run(self) -> IfOutput:
value_two = self.input.value_two
operator = self.input.operator

if operator == "==":
result = value_one == value_two
elif operator == "!=":
result = value_one != value_two
elif operator == "<":
result = value_one < value_two
elif operator == ">":
result = value_one > value_two
elif operator == "<=":
result = value_one <= value_two
elif operator == ">=":
result = value_one >= value_two
else:
raise ValueError(f"Invalid operator: {operator}")
result = compare(value_one, operator, value_two)

return IfOutput(result=result)


def compare(value_one: str, operator: str, value_two: str) -> bool:
if is_number(value_one) and is_number(value_two):
return perform_operation(float(value_one), operator, float(value_two))
else:
return perform_operation(value_one, operator, value_two)


def perform_operation(value_one: T, operator: str, value_two: T) -> bool:
if operator == "==":
return value_one == value_two
elif operator == "!=":
return value_one != value_two
elif operator == "<":
return value_one < value_two
elif operator == ">":
return value_one > value_two
elif operator == "<=":
return value_one <= value_two
elif operator == ">=":
return value_one >= value_two
else:
raise ValueError(f"Invalid operator: {operator}")


def is_number(string: str) -> bool:
try:
float(string)
return True
except ValueError:
return False
50 changes: 27 additions & 23 deletions platform/reworkd_platform/tests/workflow/test_if_condition.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,30 +10,35 @@
@pytest.mark.parametrize(
"value_one,operator,value_two,expected_result",
[
(1, "==", 1, True),
(1, "!=", 2, True),
(1, "<", 2, True),
(2, ">", 1, True),
(2, "<=", 2, True),
(1, ">=", 1, True),
# Ints
("1", "==", "1", True),
("1", "!=", "2", True),
("1", "<", "2", True),
("2", ">", "1", True),
("2", "<=", "2", True),
("1", ">=", "1", True),
# Floats
("1.5", "==", "1.5", True),
("1.5", "!=", "2.5", True),
("1.5", "<", "2.5", True),
("2.5", ">", "1.5", True),
("2.5", "<=", "2.5", True),
("1.5", ">=", "1.5", True),
# Strings
("a", "==", "a", True),
("a", "!=", "b", True),
("a", "<", "b", True),
("b", ">", "a", True),
("a", "<=", "a", True),
("b", ">=", "a", True),
(1.5, "==", 1.5, True),
(1.5, "!=", 2.5, True),
(1.5, "<", 2.5, True),
(2.5, ">", 1.5, True),
(2.5, "<=", 2.5, True),
(1.5, ">=", 1.5, True),
(True, "==", True, True),
(True, "!=", False, True),
(False, "<", True, True),
(True, ">", False, True),
(False, "<=", False, True),
(True, ">=", True, True),
# Edge cases
("", "==", "", True),
(" ", "!=", "", True),
(" ", "<", "a", True),
("b", ">", " ", True),
(" ", "<=", " ", True),
("b", ">=", " ", True),
("1.5", "==", "1.50", True), # Tests precision handling
],
)
async def test_if_condition_success(value_one, operator, value_two, expected_result):
Expand All @@ -47,11 +52,10 @@ async def test_if_condition_success(value_one, operator, value_two, expected_res
@pytest.mark.parametrize(
"value_one,operator,value_two",
[
(1, "invalid_operator", 2),
("a", "==", 1),
(1.5, "==", "a"),
(True, "==", 1),
(1, "==", "a"),
("1", "invalid_operator", "2"),
("1", "==", "a"),
("1.5", "==", "a"),
("1", "==", ""),
],
)
async def test_if_condition_errors(value_one, operator, value_two):
Expand Down

0 comments on commit 888c758

Please sign in to comment.