def testReportDatabaseIssue_AlreadyFlagged(self, loadMock, dumpMock, sendEmailMock):
        issueUID = "123"
        monitoredResource = "db"
        issueMessage = "hi"
        emailParams = {}
        loadMock.return_value = {"123": "123"}

        # Function under test
        monitor._reportDatabaseIssue(issueUID, monitoredResource, issueMessage, emailParams)

        self.assertTrue(loadMock.called)
        self.assertTrue(dumpMock.called)
        self.assertFalse(sendEmailMock.called)
        self.assertIn({"123": "123"}, dumpMock.call_args[0])
    def testReportDatabaseIssue_ValueError(self, loadMock, dumpMock, sendEmailMock):
        issueUID = "123"
        monitoredResource = "db"
        issueMessage = "hi"
        emailParams = {}
        loadMock.side_effect = ValueError("")

        # Function under test
        with self.assertRaises(ValueError):
            monitor._reportDatabaseIssue(issueUID, monitoredResource, issueMessage, emailParams)

        self.assertTrue(loadMock.called)
        self.assertFalse(dumpMock.called)
        self.assertFalse(sendEmailMock.called)
    def testReportDatabaseIssue_AlreadyFlagged(self, loadMock, dumpMock,
                                               sendEmailMock):
        issueUID = "123"
        monitoredResource = "db"
        issueMessage = "hi"
        emailParams = {}
        loadMock.return_value = {"123": "123"}

        # Function under test
        monitor._reportDatabaseIssue(issueUID, monitoredResource, issueMessage,
                                     emailParams)

        self.assertTrue(loadMock.called)
        self.assertTrue(dumpMock.called)
        self.assertFalse(sendEmailMock.called)
        self.assertIn({"123": "123"}, dumpMock.call_args[0])
    def testReportDatabaseIssue_ValueError(self, loadMock, dumpMock,
                                           sendEmailMock):
        issueUID = "123"
        monitoredResource = "db"
        issueMessage = "hi"
        emailParams = {}
        loadMock.side_effect = ValueError("")

        # Function under test
        with self.assertRaises(ValueError):
            monitor._reportDatabaseIssue(issueUID, monitoredResource,
                                         issueMessage, emailParams)

        self.assertTrue(loadMock.called)
        self.assertFalse(dumpMock.called)
        self.assertFalse(sendEmailMock.called)
    def testReportDatabaseIssue_NotFlagged(self, loadMock, dumpMock, sendEmailMock):
        issueUID = "123"
        monitoredResource = "db"
        issueMessage = "hi"
        emailParams = {}
        loadMock.return_value = {}

        # Function under test
        monitor._reportDatabaseIssue(issueUID, monitoredResource, issueMessage, emailParams)

        self.assertTrue(loadMock.called)
        self.assertTrue(dumpMock.called)
        self.assertTrue(sendEmailMock.called)
        sendEmailMock.assert_called_once_with(
            monitorName=monitor._MONITOR_NAME, resourceName=monitoredResource, message=issueMessage, params={}
        )
        self.assertIn({"123": "123"}, dumpMock.call_args[0])
    def testReportDatabaseIssue_NotFlagged(self, loadMock, dumpMock,
                                           sendEmailMock):
        issueUID = "123"
        monitoredResource = "db"
        issueMessage = "hi"
        emailParams = {}
        loadMock.return_value = {}

        # Function under test
        monitor._reportDatabaseIssue(issueUID, monitoredResource, issueMessage,
                                     emailParams)

        self.assertTrue(loadMock.called)
        self.assertTrue(dumpMock.called)
        self.assertTrue(sendEmailMock.called)
        sendEmailMock.assert_called_once_with(
            monitorName=monitor._MONITOR_NAME,
            resourceName=monitoredResource,
            message=issueMessage,
            params={})
        self.assertIn({"123": "123"}, dumpMock.call_args[0])