diff --git a/redash/models.py b/redash/models.py index 8eb346521..9d1aa06fa 100644 --- a/redash/models.py +++ b/redash/models.py @@ -755,7 +755,8 @@ class Alert(ModelTimestampsMixin, BaseModel): .join(DataSourceGroup, on=(Query.data_source==DataSourceGroup.data_source))\ .where(DataSourceGroup.group << groups)\ .switch(Alert)\ - .join(User) + .join(User)\ + .group_by(Alert, User, Query) @classmethod def get_by_id_and_org(cls, id, org): diff --git a/tests/models/test_alerts.py b/tests/models/test_alerts.py index 729a23b76..558ad706d 100644 --- a/tests/models/test_alerts.py +++ b/tests/models/test_alerts.py @@ -25,3 +25,13 @@ class TestAlertAll(BaseTestCase): alerts = Alert.all(groups=[group]) self.assertNotIn(alert1, alerts) self.assertIn(alert2, alerts) + + def test_return_each_alert_only_once(self): + group = self.factory.create_group() + self.factory.data_source.add_group(group) + + alert = self.factory.create_alert() + + alerts = Alert.all(groups=[self.factory.default_group, group]) + self.assertEqual(1, len(list(alerts))) + self.assertIn(alert, alerts)