mirror of
https://github.com/ditkrg/todo-to-issue-action.git
synced 2026-01-23 06:16:43 +00:00
I initially thought it a good idea to split these up, but it led to a lot of unnnecessary code redundancy. This is a better approach.
71 lines
2.5 KiB
Python
71 lines
2.5 KiB
Python
import json
|
|
import os
|
|
import unittest
|
|
import tempfile
|
|
import subprocess
|
|
import io
|
|
|
|
from TodoParser import TodoParser
|
|
from main import process_diff
|
|
|
|
|
|
class IssueUrlInsertionTest(unittest.TestCase):
|
|
orig_cwd = None
|
|
tempdir = None
|
|
diff_file = None
|
|
parser = None
|
|
|
|
def _setUp(self, diff_file):
|
|
# get current working directory
|
|
self.orig_cwd = os.getcwd()
|
|
|
|
# Create temporary directory to hold simulated filesystem.
|
|
self.tempdir = tempfile.TemporaryDirectory()
|
|
|
|
# run patch against the diff file to generate the simulated filesystem
|
|
subprocess.run(['patch', '-d', self.tempdir.name,
|
|
'-i', f'{os.getcwd()}/tests/{diff_file}'],
|
|
stdout=subprocess.DEVNULL,
|
|
stderr=subprocess.DEVNULL,
|
|
check=True)
|
|
|
|
self.diff_file = open(f'tests/{diff_file}', 'r')
|
|
self.parser = TodoParser()
|
|
with open('syntax.json', 'r') as syntax_json:
|
|
self.parser.syntax_dict = json.load(syntax_json)
|
|
|
|
# change to the simulated filesystem directory
|
|
os.chdir(self.tempdir.name)
|
|
|
|
def _standardTest(self, expected_count):
|
|
# create object to hold output
|
|
output = io.StringIO()
|
|
# process the diffs
|
|
process_diff(diff=self.diff_file, insert_issue_urls=True, parser=self.parser, output=output)
|
|
# make sure the number of issue URL comments inserted is as expected
|
|
self.assertEqual(output.getvalue().count('Issue URL successfully inserted'),
|
|
expected_count,
|
|
msg='\nProcessing log\n--------------\n'+output.getvalue())
|
|
|
|
# this test can take a while and, as far as TodoParser is concerned,
|
|
# redundant with the tests of test_todo_parser, so enable the means
|
|
# to skip it if desired
|
|
@unittest.skipIf(os.getenv('SKIP_PROCESS_DIFF_TEST', 'false') == 'true',
|
|
"Skipping because 'SKIP_PROCESS_DIFF_TEST' is 'true'")
|
|
def test_url_insertion(self):
|
|
self._setUp('test_new.diff')
|
|
self._standardTest(80)
|
|
|
|
@unittest.expectedFailure
|
|
def test_same_title_in_same_file(self):
|
|
self._setUp('test_same_title_in_same_file.diff')
|
|
self._standardTest(5)
|
|
|
|
def tearDown(self):
|
|
# return to original working directory to ensure we don't mess up other tests
|
|
os.chdir(self.orig_cwd)
|
|
|
|
# explicitly cleanup to avoid warning being printed about implicit cleanup
|
|
self.tempdir.cleanup()
|
|
self.tempdir = None
|