Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion keep/api/models/alert.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ class AlertDto(BaseModel):
firingStartTimeSinceLastResolved: str | None = None
firingCounter: int = 0
unresolvedCounter: int = 0
environment: str = "undefined"
environment: str | None = None
isFullDuplicate: bool | None = False
isPartialDuplicate: bool | None = False
duplicateReason: str | None = None
Expand Down
19 changes: 19 additions & 0 deletions tests/test_alert_dto.py
Original file line number Diff line number Diff line change
Expand Up @@ -262,3 +262,22 @@ def test_alert_dismiss_forever():
with freezegun.freeze_time(now + timedelta(days=365)):
revalidated_alert = AlertDto(**alert.dict())
assert revalidated_alert.dismissed is True


def test_alert_dto_environment_default_is_none():
"""environment should default to None, not a literal string like 'undefined'."""
alert = create_basic_alert(
name="Env Default Test",
last_received="2024-01-01T00:00:00.000Z",
)
assert alert.environment is None


def test_alert_dto_environment_explicit_value():
"""Explicitly set environment should be preserved."""
alert = create_basic_alert(
name="Env Explicit Test",
last_received="2024-01-01T00:00:00.000Z",
environment="production",
)
assert alert.environment == "production"
10 changes: 10 additions & 0 deletions tests/test_iohandler.py
Original file line number Diff line number Diff line change
Expand Up @@ -1038,6 +1038,16 @@ def test_fn_na_on_missing_key(mocked_context_manager):
assert result == "ts=N/A", f"Expected 'ts=N/A', got '{result}'"


def test_fn_na_on_none_environment(mocked_context_manager):
"""fn.na renders 'N/A' when environment is absent (defaults to None, not 'undefined')."""
mocked_context_manager.get_full_context.return_value = {
"alert": {"name": "test-alert"}, # no 'environment' field
}
iohandler = IOHandler(mocked_context_manager)
result = iohandler.render("env={{#fn.na}}{{ alert.environment }}{{/fn.na}}")
assert result == "env=N/A", f"Expected 'env=N/A', got '{result}'"


def test_fn_default_on_missing_key(mocked_context_manager):
"""fn.default renders an empty string when the wrapped field is absent."""
mocked_context_manager.get_full_context.return_value = {
Expand Down
Loading