oncall-engine/engine/apps/labels/tests/test_labels.py
Yulya Artyukhina 66a898df7d
Add labels feature flag for list of organizations (#3246)
# 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)
2023-11-02 09:52:32 +00:00

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)