Introducing columns formulas
This commit is contained in:
@@ -243,7 +243,7 @@ class TestConflictResolution:
|
||||
css, formatted = engine.apply_format(rules, cell_value=150, row_data=row_data)
|
||||
|
||||
assert isinstance(css, StyleContainer)
|
||||
assert "var(--color-secondary)" in css.css # Style from Rule 2
|
||||
assert css.cls == "mf-formatting-secondary" # Style from Rule 2
|
||||
assert formatted == "150.00 €" # Formatter from Rule 1
|
||||
|
||||
# Case 2: Condition not met (value <= budget)
|
||||
@@ -282,7 +282,7 @@ class TestConflictResolution:
|
||||
|
||||
css, formatted = engine.apply_format(rules, cell_value=-5.67)
|
||||
|
||||
assert "var(--color-error)" in css.css # Rule 3 wins for style
|
||||
assert css.cls == "mf-formatting-error" # Rule 3 wins for style
|
||||
assert formatted == "-6 €" # Rule 4 wins for formatter (precision=0)
|
||||
|
||||
|
||||
@@ -316,7 +316,7 @@ class TestWithRowData:
|
||||
css, _ = engine.apply_format(rules, cell_value=42, row_data=row_data)
|
||||
|
||||
assert isinstance(css, StyleContainer)
|
||||
assert "background-color" in css.css
|
||||
assert css.cls == "mf-formatting-error"
|
||||
|
||||
|
||||
class TestPresets:
|
||||
@@ -327,7 +327,7 @@ class TestPresets:
|
||||
|
||||
css, _ = engine.apply_format(rules, cell_value=42)
|
||||
|
||||
assert "var(--color-success)" in css.css
|
||||
assert css.cls == "mf-formatting-success"
|
||||
|
||||
def test_formatter_preset(self):
|
||||
"""Formatter preset is resolved correctly."""
|
||||
|
||||
@@ -16,9 +16,14 @@ class TestResolve:
|
||||
assert result["font-weight"] == "bold"
|
||||
|
||||
def test_resolve_preset_with_override(self):
|
||||
"""Preset properties can be overridden by explicit values."""
|
||||
resolver = StyleResolver()
|
||||
# "success" preset has background and color defined
|
||||
"""Preset CSS properties can be overridden by explicit values."""
|
||||
custom_presets = {
|
||||
"success": {
|
||||
"background-color": "var(--color-success)",
|
||||
"color": "var(--color-success-content)",
|
||||
}
|
||||
}
|
||||
resolver = StyleResolver(style_presets=custom_presets)
|
||||
style = Style(preset="success", color="black")
|
||||
result = resolver.resolve(style)
|
||||
|
||||
@@ -66,6 +71,16 @@ class TestResolve:
|
||||
|
||||
assert result == {}
|
||||
|
||||
def test_i_can_resolve_class_only_preset(self):
|
||||
"""Default preset with __class__ only is included as-is in resolve result."""
|
||||
resolver = StyleResolver()
|
||||
style = Style(preset="success")
|
||||
result = resolver.resolve(style)
|
||||
|
||||
assert result["__class__"] == "mf-formatting-success"
|
||||
assert "background-color" not in result
|
||||
assert "color" not in result
|
||||
|
||||
def test_resolve_converts_property_names(self):
|
||||
"""Python attribute names are converted to CSS property names."""
|
||||
resolver = StyleResolver()
|
||||
@@ -151,11 +166,11 @@ class TestToStyleContainer:
|
||||
None,
|
||||
["background-color: red", "color: white"]
|
||||
),
|
||||
# Class only via preset
|
||||
# Class only via preset (default presets use __class__, no inline CSS)
|
||||
(
|
||||
Style(preset="success"),
|
||||
None, # Default presets don't have __class__
|
||||
["background-color: var(--color-success)", "color: var(--color-success-content)"]
|
||||
"mf-formatting-success",
|
||||
[]
|
||||
),
|
||||
# Empty style
|
||||
(
|
||||
@@ -246,3 +261,12 @@ class TestToStyleContainer:
|
||||
assert isinstance(result, StyleContainer)
|
||||
assert result.cls is None
|
||||
assert result.css == ""
|
||||
|
||||
def test_i_can_resolve_default_preset_to_container(self):
|
||||
"""Default preset with __class__ only generates cls but no css."""
|
||||
resolver = StyleResolver()
|
||||
style = Style(preset="error")
|
||||
result = resolver.to_style_container(style)
|
||||
|
||||
assert result.cls == "mf-formatting-error"
|
||||
assert result.css == ""
|
||||
|
||||
Reference in New Issue
Block a user