#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright 2020 The ChromiumOS Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """Tests for email_sender.""" import contextlib import io import json import unittest import unittest.mock as mock import cros_utils.email_sender as email_sender class Test(unittest.TestCase): """Tests for email_sender.""" @mock.patch("cros_utils.email_sender.AtomicallyWriteFile") def test_x20_email_sending_rejects_invalid_inputs(self, write_file): test_cases = [ { # no subject "subject": "", "identifier": "foo", "direct_recipients": ["gbiv@google.com"], "text_body": "hi", }, { "subject": "foo", # no identifier "identifier": "", "direct_recipients": ["gbiv@google.com"], "text_body": "hi", }, { "subject": "foo", "identifier": "foo", # no recipients "direct_recipients": [], "text_body": "hi", }, { "subject": "foo", "identifier": "foo", "direct_recipients": ["gbiv@google.com"], # no body }, { "subject": "foo", "identifier": "foo", # direct recipients lack @google. "direct_recipients": ["gbiv"], "text_body": "hi", }, { "subject": "foo", "identifier": "foo", # non-list recipients "direct_recipients": "gbiv@google.com", "text_body": "hi", }, { "subject": "foo", "identifier": "foo", # non-list recipients "well_known_recipients": "detective", "text_body": "hi", }, ] sender = email_sender.EmailSender() for case in test_cases: with self.assertRaises(ValueError): sender.SendX20Email(**case) write_file.assert_not_called() @mock.patch("cros_utils.email_sender.AtomicallyWriteFile") def test_x20_email_sending_translates_to_reasonable_json(self, write_file): written_obj = None @contextlib.contextmanager def actual_write_file(file_path): nonlocal written_obj self.assertTrue( file_path.startswith(email_sender.X20_PATH + "/"), file_path ) f = io.StringIO() yield f written_obj = json.loads(f.getvalue()) write_file.side_effect = actual_write_file email_sender.EmailSender().SendX20Email( subject="hello", identifier="world", well_known_recipients=["detective"], direct_recipients=["gbiv@google.com"], text_body="text", html_body="html", ) self.assertEqual( written_obj, { "subject": "hello", "email_identifier": "world", "well_known_recipients": ["detective"], "direct_recipients": ["gbiv@google.com"], "body": "text", "html_body": "html", }, ) if __name__ == "__main__": unittest.main()