# What this PR does Adds a flag that allows to enable labels feature for the list of organizations ## Which issue(s) this PR fixes https://github.com/grafana/oncall-private/issues/2226 ## Checklist - [x] Unit, integration, and e2e (if applicable) tests updated - [x] Documentation added (or `pr:no public docs` PR label added if not required) - [x] `CHANGELOG.md` updated (or `pr:no changelog` PR label added if not required)
109 lines
4.7 KiB
Python
109 lines
4.7 KiB
Python
import pytest
|
|
|
|
from apps.alerts.models import AlertReceiveChannel
|
|
from apps.labels.models import AlertReceiveChannelAssociatedLabel, AssociatedLabel, LabelValueCache
|
|
from apps.labels.utils import get_associating_label_model, is_labels_feature_enabled
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_labels_feature_flag(mock_is_labels_feature_enabled_for_org, make_organization, settings):
|
|
organization = make_organization()
|
|
# returns True if feature flag is enabled
|
|
assert settings.FEATURE_LABELS_ENABLED_FOR_ALL
|
|
assert organization.id not in settings.FEATURE_LABELS_ENABLED_FOR_GRAFANA_ORGS
|
|
assert is_labels_feature_enabled(organization)
|
|
|
|
mock_is_labels_feature_enabled_for_org(organization.org_id)
|
|
# returns True if feature flag is disabled and organization is in the feature list
|
|
assert not settings.FEATURE_LABELS_ENABLED_FOR_ALL
|
|
assert organization.org_id in settings.FEATURE_LABELS_ENABLED_FOR_GRAFANA_ORGS
|
|
assert is_labels_feature_enabled(organization)
|
|
|
|
mock_is_labels_feature_enabled_for_org(12345)
|
|
# returns False if feature flag is disabled and organization is not in the feature list
|
|
assert organization.org_id not in settings.FEATURE_LABELS_ENABLED_FOR_GRAFANA_ORGS
|
|
assert not is_labels_feature_enabled(organization)
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_label_associate_new_label(make_organization, make_alert_receive_channel):
|
|
organization = make_organization()
|
|
alert_receive_channel = make_alert_receive_channel(organization)
|
|
label_key_id = "testkeyid"
|
|
label_value_id = "testvalueid"
|
|
labels_data = [
|
|
{
|
|
"key": {"id": label_key_id, "name": "testkey"},
|
|
"value": {"id": label_value_id, "name": "testvalue"},
|
|
}
|
|
]
|
|
|
|
assert not alert_receive_channel.labels.exists()
|
|
assert not LabelValueCache.objects.filter(key_id=label_key_id, id=label_value_id).exists()
|
|
|
|
AssociatedLabel.update_association(labels_data, alert_receive_channel, organization)
|
|
assert len(alert_receive_channel.labels.all()) == 1
|
|
assert alert_receive_channel.labels.get(key_id=label_key_id, value_id=label_value_id)
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_label_associate_existing_label(make_label_key_and_value, make_organization, make_alert_receive_channel):
|
|
organization = make_organization()
|
|
alert_receive_channel = make_alert_receive_channel(organization)
|
|
label_key, label_value = make_label_key_and_value(organization)
|
|
labels_data = [
|
|
{
|
|
"key": {"id": label_key.id, "name": label_key.name},
|
|
"value": {"id": label_value.id, "name": label_value.name},
|
|
}
|
|
]
|
|
assert not alert_receive_channel.labels.exists()
|
|
AssociatedLabel.update_association(labels_data, alert_receive_channel, organization)
|
|
assert len(alert_receive_channel.labels.all()) == 1
|
|
assert alert_receive_channel.labels.filter(key=label_key, value=label_value).exists()
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_label_update_association_by_removing_label(
|
|
make_integration_label_association, make_organization, make_alert_receive_channel
|
|
):
|
|
organization = make_organization()
|
|
alert_receive_channel = make_alert_receive_channel(organization)
|
|
label_association_1 = make_integration_label_association(organization, alert_receive_channel)
|
|
label_association_2 = make_integration_label_association(organization, alert_receive_channel)
|
|
labels_data = [
|
|
{
|
|
"key": {"id": label_association_1.key_id, "name": label_association_1.key.name},
|
|
"value": {"id": label_association_1.value_id, "name": label_association_1.value.name},
|
|
}
|
|
]
|
|
|
|
assert len(alert_receive_channel.labels.all()) == 2
|
|
assert alert_receive_channel.labels.filter(
|
|
key=label_association_1.key_id, value=label_association_1.value_id
|
|
).exists()
|
|
assert alert_receive_channel.labels.filter(
|
|
key=label_association_2.key_id, value=label_association_2.value_id
|
|
).exists()
|
|
|
|
# update labels association by removing label_association_2
|
|
AssociatedLabel.update_association(labels_data, alert_receive_channel, organization)
|
|
assert len(alert_receive_channel.labels.all()) == 1
|
|
assert alert_receive_channel.labels.filter(
|
|
key=label_association_1.key_id, value=label_association_1.value_id
|
|
).exists()
|
|
assert not alert_receive_channel.labels.filter(
|
|
key=label_association_2.key_id, value=label_association_2.value_id
|
|
).exists()
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_get_associating_label_model():
|
|
model_name = AlertReceiveChannel.__name__
|
|
expected_result = AlertReceiveChannelAssociatedLabel
|
|
result = get_associating_label_model(model_name)
|
|
assert result == expected_result
|
|
|
|
wrong_model_name = "SomeModel"
|
|
with pytest.raises(LookupError):
|
|
get_associating_label_model(wrong_model_name)
|