Update tests for Foreach (#1394)

This commit is contained in:
Elijah Ahianyo 2023-07-21 18:49:55 +00:00 committed by GitHub
parent 549ab4e708
commit d4abf5ff2b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -8,156 +8,169 @@ from reflex.state import State
class ForEachState(State): class ForEachState(State):
"""The test state.""" """A state for testing the ForEach component."""
color_a: List[str] = ["red", "yellow"] colors_list: List[str] = ["red", "yellow"]
color_b: List[Dict[str, str]] = [ nested_colors_list: List[List[str]] = [["red", "yellow"], ["blue", "green"]]
colors_dict_list: List[Dict[str, str]] = [
{ {
"name": "red", "name": "red",
}, },
{"name": "yellow"}, {"name": "yellow"},
] ]
color_c: List[Dict[str, List[str]]] = [{"shades": ["light-red"]}] colors_nested_dict_list: List[Dict[str, List[str]]] = [{"shades": ["light-red"]}]
color_d: Dict[str, str] = {"category": "primary", "name": "red"} primary_color: Dict[str, str] = {"category": "primary", "name": "red"}
color_e: Dict[str, List[str]] = { color_with_shades: Dict[str, List[str]] = {
"red": ["orange", "yellow"], "red": ["orange", "yellow"],
"yellow": ["orange", "green"], "yellow": ["orange", "green"],
} }
color_f: Dict[str, Dict[str, List[Dict[str, str]]]] = { nested_colors_with_shades: Dict[str, Dict[str, List[Dict[str, str]]]] = {
"primary": {"red": [{"shade": "dark"}]} "primary": {"red": [{"shade": "dark"}]}
} }
color_g: Tuple[str, str] = ( color_tuple: Tuple[str, str] = (
"red", "red",
"yellow", "yellow",
) )
color_h: Set[str] = {"red", "green"} colors_set: Set[str] = {"red", "green"}
def display_a(color): def display_color(color):
return box(text(color)) return box(text(color))
def display_b(color): def display_color_name(color):
return box(text(color["name"])) return box(text(color["name"]))
def display_c(color): def display_shade(color):
return box(text(color["shades"][0])) return box(text(color["shades"][0]))
def display_d(color): def display_primary_colors(color):
return box(text(color[0]), text(color[1])) return box(text(color[0]), text(color[1]))
def display_e(color): def display_color_with_shades(color):
# color is a key-value pair list similar to `dict.items()`
return box(text(color[0]), text(color[1][0])) return box(text(color[0]), text(color[1][0]))
def display_f(color): def display_nested_color_with_shades(color):
return box(text(color[0]), text(color[1]["red"][0]["shade"])) return box(text(color[0]), text(color[1]["red"][0]["shade"]))
def show_item(item): def show_shade(item):
return text(item[1][0]["shade"]) return text(item[1][0]["shade"])
def display_f1(color): def display_nested_color_with_shades_v2(color):
return box(text(foreach(color[1], show_item))) return box(text(foreach(color[1], show_shade)))
def display_g(color): def display_color_tuple(color):
return box(text(color)) return box(text(color))
def display_h(color): def display_colors_set(color):
return box(text(color)) return box(text(color))
def display_nested_list_element(element: str, index: int):
return box(text(element[index]))
@pytest.mark.parametrize( @pytest.mark.parametrize(
"state_var, render_fn, render_dict", "state_var, render_fn, render_dict",
[ [
( (
ForEachState.color_a, ForEachState.colors_list,
display_a, display_color,
{ {
"iterable_state": "for_each_state.color_a", "iterable_state": "for_each_state.colors_list",
"arg_index": "i", "arg_index": "i",
"iterable_type": "list", "iterable_type": "list",
}, },
), ),
( (
ForEachState.color_b, ForEachState.colors_dict_list,
display_b, display_color_name,
{ {
"iterable_state": "for_each_state.color_b", "iterable_state": "for_each_state.colors_dict_list",
"arg_index": "i", "arg_index": "i",
"iterable_type": "list", "iterable_type": "list",
}, },
), ),
( (
ForEachState.color_c, ForEachState.colors_nested_dict_list,
display_c, display_shade,
{ {
"iterable_state": "for_each_state.color_c", "iterable_state": "for_each_state.colors_nested_dict_list",
"arg_index": "i", "arg_index": "i",
"iterable_type": "list", "iterable_type": "list",
}, },
), ),
( (
ForEachState.color_d, ForEachState.primary_color,
display_d, display_primary_colors,
{ {
"iterable_state": "for_each_state.color_d", "iterable_state": "for_each_state.primary_color",
"arg_index": "i", "arg_index": "i",
"iterable_type": "dict", "iterable_type": "dict",
}, },
), ),
( (
ForEachState.color_e, ForEachState.color_with_shades,
display_e, display_color_with_shades,
{ {
"iterable_state": "for_each_state.color_e", "iterable_state": "for_each_state.color_with_shades",
"arg_index": "i", "arg_index": "i",
"iterable_type": "dict", "iterable_type": "dict",
}, },
), ),
( (
ForEachState.color_f, ForEachState.nested_colors_with_shades,
display_f, display_nested_color_with_shades,
{ {
"iterable_state": "for_each_state.color_f", "iterable_state": "for_each_state.nested_colors_with_shades",
"arg_index": "i", "arg_index": "i",
"iterable_type": "dict", "iterable_type": "dict",
}, },
), ),
( (
ForEachState.color_f, ForEachState.nested_colors_with_shades,
display_f1, display_nested_color_with_shades_v2,
{ {
"iterable_state": "for_each_state.color_f", "iterable_state": "for_each_state.nested_colors_with_shades",
"arg_index": "i", "arg_index": "i",
"iterable_type": "dict", "iterable_type": "dict",
}, },
), ),
( (
ForEachState.color_g, ForEachState.color_tuple,
display_g, display_color_tuple,
{ {
"iterable_state": "for_each_state.color_g", "iterable_state": "for_each_state.color_tuple",
"arg_index": "i", "arg_index": "i",
"iterable_type": "tuple", "iterable_type": "tuple",
}, },
), ),
( (
ForEachState.color_h, ForEachState.colors_set,
display_h, display_colors_set,
{ {
"iterable_state": "for_each_state.color_h", "iterable_state": "for_each_state.colors_set",
"arg_index": "i", "arg_index": "i",
"iterable_type": "set", "iterable_type": "set",
}, },
), ),
(
ForEachState.nested_colors_list,
lambda el, i: display_nested_list_element(el, i),
{
"iterable_state": "for_each_state.nested_colors_list",
"arg_index": "i",
"iterable_type": "list",
},
),
], ],
) )
def test_foreach_render(state_var, render_fn, render_dict): def test_foreach_render(state_var, render_fn, render_dict):
@ -171,7 +184,8 @@ def test_foreach_render(state_var, render_fn, render_dict):
component = Foreach.create(state_var, render_fn) component = Foreach.create(state_var, render_fn)
rend = component.render() rend = component.render()
arg_index = rend["arg_index"]
assert rend["iterable_state"] == render_dict["iterable_state"] assert rend["iterable_state"] == render_dict["iterable_state"]
assert rend["arg_index"] == render_dict["arg_index"] assert rend["arg_index"] == render_dict["arg_index"]
assert arg_index.type_ == int
assert rend["iterable_type"] == render_dict["iterable_type"] assert rend["iterable_type"] == render_dict["iterable_type"]