def setUp(self):
     super(AlertsTests, self).setUp()
     self.alerts = Alerts("123")
class AlertsTests(TestCase):
    """
    Tests for the Alerts class
    """

    def setUp(self):
        super(AlertsTests, self).setUp()
        self.alerts = Alerts("123")

    @patch.object(Alerts, "_post")
    def test_create(self, mock_post):
        """
        Test .create()
        """
        alert_config = WebHookAlertConfig(url="https://www.google.com")

        self.alerts.create(alert_config)
        mock_post.assert_called_once_with(
            request="create",
            uri="actions",
            params={
                "rate_count": 1,
                "rate_range": "hour",
                "limit_count": 1,
                "limit_range": "hour",
                "schedule": [],
                "enabled": True,
                "type": "webhook",
                "args": {"url": "https://www.google.com"},
            },
        )

    @patch.object(Alerts, "_post")
    def test_list(self, mock_post):
        """
        Test .list()
        """
        self.alerts.list()
        mock_post.assert_called_once_with(request="list", uri="actions")

    @patch.object(Alerts, "list")
    def test_get_no_args(self, mock_list):
        """
        Test .get() without alert_args
        """
        mock_list.return_value = [
            {"type": "slack", "args": {"url": "https://hooks.slack.com/services/111"}},
            {"type": "slack", "args": {"url": "https://hooks.slack.com/services/222"}},
            {"type": "mailto", "args": {"direct": "*****@*****.**"}},
        ]
        response = self.alerts.get("slack")

        self.assertEqual(
            response,
            [
                {"type": "slack", "args": {"url": "https://hooks.slack.com/services/111"}},
                {"type": "slack", "args": {"url": "https://hooks.slack.com/services/222"}},
            ],
        )

    @patch.object(Alerts, "list")
    def test_get_with_args(self, mock_list):
        """
        Test .get() with alert_args
        """
        mock_list.return_value = [
            {"type": "slack", "args": {"url": "https://hooks.slack.com/services/111"}},
            {"type": "slack", "args": {"url": "https://hooks.slack.com/services/222"}},
            {"type": "mailto", "args": {"direct": "*****@*****.**"}},
        ]
        response = self.alerts.get("slack", {"url": "https://hooks.slack.com/services/111"})

        self.assertEqual(response, [{"type": "slack", "args": {"url": "https://hooks.slack.com/services/111"}}])

    @patch.object(Alerts, "list")
    def test_get_none(self, mock_list):
        """
        Test .get() with no matches
        """
        mock_list.return_value = [{"type": "mailto", "args": {"direct": "*****@*****.**"}}]
        response = self.alerts.get("slack")

        self.assertEqual(response, [])

    @patch.object(Alerts, "_post")
    def test_update(self, mock_post):
        """
        Test .update()
        """
        label = {
            "should not get through": "nope",
            "id": "d9d4596e-49e4-4135-b3b3-847f9e7c1f43",
            "args": {"direct": "*****@*****.**"},
            "rate_count": 1,
            "rate_range": "hour",
            "limit_count": 1,
            "limit_range": "hour",
            "schedule": [],
            "enabled": True,
            "type": "mailto",
        }

        self.alerts.update(label)

        mock_post.assert_called_once_with(
            request="update",
            uri="actions",
            params={
                "id": "d9d4596e-49e4-4135-b3b3-847f9e7c1f43",
                "args": {"direct": "*****@*****.**"},
                "rate_count": 1,
                "rate_range": "hour",
                "limit_count": 1,
                "limit_range": "hour",
                "schedule": [],
                "enabled": True,
                "type": "mailto",
            },
        )

    @patch.object(Alerts, "_post")
    def test_delete(self, mock_post):
        """
        Test .delete()
        """
        self.alerts.delete("006d95a8-4fac-42c4-90ed-c3c34978de3e")
        mock_post.assert_called_once_with(
            request="delete", uri="actions", params={"id": "006d95a8-4fac-42c4-90ed-c3c34978de3e"}
        )