blob: 03dee64d71fb5d9f88e6f7273c3cf266a74462b1 [file] [log] [blame]
#!/usr/bin/env python3
# Copyright 2021 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# We're testing protected methods, so allow protected access.
# pylint: disable=protected-access
"""Tests bug filing bits."""
import json
import tempfile
import unittest
from unittest.mock import patch
import bugs
class Tests(unittest.TestCase):
"""Tests for the bugs module."""
def testWritingJSONFileSeemsToWork(self):
"""Tests JSON file writing."""
old_x20_path = bugs.X20_PATH
def restore_x20_path():
bugs.X20_PATH = old_x20_path
self.addCleanup(restore_x20_path)
with tempfile.TemporaryDirectory() as tempdir:
bugs.X20_PATH = tempdir
file_path = bugs._WriteBugJSONFile(
'ObjectType', {
'foo': 'bar',
'baz': bugs.WellKnownComponents.CrOSToolchainPublic,
})
self.assertTrue(file_path.startswith(tempdir),
f'Expected {file_path} to start with {tempdir}')
with open(file_path) as f:
self.assertEqual(
json.load(f),
{
'type': 'ObjectType',
'value': {
'foo': 'bar',
'baz': int(bugs.WellKnownComponents.CrOSToolchainPublic),
},
},
)
@patch('bugs._WriteBugJSONFile')
def testAppendingToBugsSeemsToWork(self, mock_write_json_file):
"""Tests AppendToExistingBug."""
bugs.AppendToExistingBug(1234, 'hello, world!')
mock_write_json_file.assert_called_once_with(
'AppendToExistingBugRequest',
{
'body': 'hello, world!',
'bug_id': 1234,
},
)
@patch('bugs._WriteBugJSONFile')
def testBugCreationSeemsToWork(self, mock_write_json_file):
"""Tests CreateNewBug."""
test_case_additions = (
{},
{
'component_id': bugs.WellKnownComponents.CrOSToolchainPublic,
},
{
'assignee': 'foo@gbiv.com',
'cc': ['bar@baz.com'],
},
)
for additions in test_case_additions:
test_case = {
'component_id': 123,
'title': 'foo',
'body': 'bar',
**additions,
}
bugs.CreateNewBug(**test_case)
expected_output = {
'component_id': test_case['component_id'],
'subject': test_case['title'],
'body': test_case['body'],
}
assignee = test_case.get('assignee')
if assignee:
expected_output['assignee'] = assignee
cc = test_case.get('cc')
if cc:
expected_output['cc'] = cc
mock_write_json_file.assert_called_once_with(
'FileNewBugRequest',
expected_output,
)
mock_write_json_file.reset_mock()
@patch('bugs._WriteBugJSONFile')
def testCronjobLogSendingSeemsToWork(self, mock_write_json_file):
"""Tests SendCronjobLog."""
bugs.SendCronjobLog('my_name', False, 'hello, world!')
mock_write_json_file.assert_called_once_with(
'ChrotomationCronjobUpdate',
{
'name': 'my_name',
'message': 'hello, world!',
'failed': False,
},
)
if __name__ == '__main__':
unittest.main()