great-ai/tests/test_dashboard_regressions.py

43 lines
1.4 KiB
Python

from typing import Any
import pandas as pd
import pytest
from great_ai.deploy.routes.dashboard.create_dash_app import get_dimension_descriptor
from great_ai.deploy.routes.dashboard.get_filter_from_datatable import (
get_filter_from_datatable,
)
@pytest.mark.parametrize(
"expression, operator, value",
[
('{value} contains "a=b"', "contains", "a=b"),
("{value} eq 7", "=", 7),
("{value} ge 2.5", ">=", 2.5),
('{value} contains ""', "contains", ""),
(r"{value} contains 'it\'s > 2'", "contains", "it's > 2"),
],
)
def test_dashboard_filter_grammar(expression: str, operator: str, value: Any) -> None:
result = get_filter_from_datatable(expression)
assert result is not None
assert result.property == "value"
assert result.operator == operator
assert result.value == value
@pytest.mark.parametrize(
"expression", ["{value} > ", '{value} contains "unfinished', "invalid"]
)
def test_incomplete_filters_are_ignored(expression: str) -> None:
assert get_filter_from_datatable(expression) is None
def test_long_category_labels_keep_distinct_coordinates() -> None:
prefix = "a" * 40
dimension = get_dimension_descriptor(
pd.DataFrame({"category": [prefix + "1", prefix + "2"]}), "category"
)
assert dimension["values"] == [0, 1]
assert dimension["tickvals"] == [0, 1]
assert dimension["ticktext"] == [prefix, prefix]