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])