oncall-engine/tools/migrators/lib/tests/pagerduty/resources/test_integrations.py
Joey Orlando e4728ea69f
feat: add opsgenie to migrator script (#5495)
This PR adds support for migrating data from OpsGenie to Grafana IRM.

Closes https://github.com/grafana/irm/issues/1179
2025-04-07 08:47:27 -04:00

102 lines
3.2 KiB
Python

from unittest.mock import patch
import pytest
from lib.pagerduty.resources.integrations import filter_integrations, match_integration
@pytest.fixture
def mock_integration():
return {
"id": "INTEGRATION1",
"name": "Test Integration",
"service": {
"name": "Service 1",
"teams": [{"summary": "Team 1"}],
},
}
@patch("lib.pagerduty.resources.integrations.PAGERDUTY_FILTER_TEAM", "Team 1")
def test_filter_integrations_by_team(mock_integration):
integrations = [
mock_integration,
{
**mock_integration,
"service": {
"name": "Service 1",
"teams": [{"summary": "Team 2"}],
},
},
]
filtered = filter_integrations(integrations)
assert len(filtered) == 1
assert filtered[0]["id"] == "INTEGRATION1"
@patch(
"lib.pagerduty.resources.integrations.PAGERDUTY_FILTER_INTEGRATION_REGEX",
"^Service 1 - Test",
)
def test_filter_integrations_by_regex(mock_integration):
integrations = [
mock_integration,
{
**mock_integration,
"service": {"name": "Service 2", "teams": [{"summary": "Team 1"}]},
},
]
filtered = filter_integrations(integrations)
assert len(filtered) == 1
assert filtered[0]["id"] == "INTEGRATION1"
@patch("lib.pagerduty.resources.integrations.PAGERDUTY_FILTER_TEAM", "Team 1")
@patch(
"lib.pagerduty.resources.integrations.PAGERDUTY_FILTER_INTEGRATION_REGEX",
"^Service 2 - Test",
)
def test_filter_integrations_with_multiple_filters_or_logic(mock_integration):
"""Test that OR logic is applied between filters - an integration matching any filter is included"""
integrations = [
mock_integration, # Has Team 1 but doesn't match regex
{
"id": "INTEGRATION2",
"name": "Test Integration",
"service": {
"name": "Service 2", # Matches regex
"teams": [{"summary": "Team 2"}], # Not Team 1
},
},
{
"id": "INTEGRATION3",
"name": "Test Integration",
"service": {
"name": "Service 3", # Doesn't match regex
"teams": [{"summary": "Team 3"}], # Not Team 1
},
},
]
filtered = filter_integrations(integrations)
# INTEGRATION1 matches team filter, INTEGRATION2 matches regex filter, INTEGRATION3 matches neither
assert len(filtered) == 2
assert {i["id"] for i in filtered} == {"INTEGRATION1", "INTEGRATION2"}
def test_match_integration_name_case_insensitive():
pd_integration = {"service": {"name": "Test service"}, "name": "test Integration"}
oncall_integrations = [{"name": "test Service - Test integration"}]
match_integration(pd_integration, oncall_integrations)
assert pd_integration["oncall_integration"] == oncall_integrations[0]
def test_match_integration_name_extra_spaces():
pd_integration = {
"service": {"name": " test service "},
"name": " test integration ",
}
oncall_integrations = [{"name": "test service - test integration"}]
match_integration(pd_integration, oncall_integrations)
assert pd_integration["oncall_integration"] == oncall_integrations[0]