From 7708c61892c62084ca35c51736c2fbcdec079b05 Mon Sep 17 00:00:00 2001 From: Louis Elkner-Alfaro Date: Wed, 4 Oct 2023 09:13:00 -0700 Subject: [PATCH] Move tests into own file --- generate_issues.py | 86 +++++++++++++++++++--------------------------- tests.py | 36 +++++++++++++++++++ 2 files changed, 72 insertions(+), 50 deletions(-) create mode 100644 tests.py diff --git a/generate_issues.py b/generate_issues.py index 67dbc35..83493af 100644 --- a/generate_issues.py +++ b/generate_issues.py @@ -19,35 +19,19 @@ projects = { "Housing Works": ("housingworks", "app-housingworks-net"), } +issue_fields = [ + "First Issue Title", + "First Issue URL", + "Second Issue Title", + "Second Issue URL", + "Third Issue Title", + "Third Issue URL" +] -def test_parse_notes_section(): - if (parse_notes_section('Resolved Issue #4, #5 and Issue 6') == ['4', '5', '6']): - print("TEST PARSE NOTES SECTION PASSED") - else: - print("TEST PARSE NOTES SECTION FAILED") - -def test_get_issue_title_and_url(): - solution = [ - "Little slow downs are happening - these often signal that the server memory is getting overwhelmed?", - "https://git.agaric.com/housingworks/app-housingworks-net/issues/363" - ] - if get_issue_title_and_url(363) == solution: - print("TEST GET ISSUE TITLE AND URL PASSED") - else: - print("TEST GET ISSUE TITLE AND URL FAILED") - -def parse_notes_section(notes): - regex_pattern = r"[Ii]ssue\s*(?:#)?\d+|#\d+" - matches = re.findall(regex_pattern, notes)[:3] - issue_numbers = [] - for match in matches: - match = re.search(r"\d+", match).group() - issue_numbers.append(match) - return issue_numbers +issues_and_urls = [] def get_issue_title_and_url(issue_number): global issues_and_urls - issues_and_urls = [] owner = projects["Housing Works"][0] repo = projects["Housing Works"][1] issue_url = forgejo_issue_api_string.format(owner=owner, repo=repo, index=issue_number) @@ -67,6 +51,22 @@ def prompt_for_file(file): print(file) return file +def split_issues_into_columns(issues): + for issue in issues: + get_issue_title_and_url(issue) + issues_dict = dict(zip(issue_fields, issues_and_urls)) + return issues_dict + +def parse_notes_section(notes): + regex_pattern = r"[Ii]ssue\s*(?:#)?\d+|#\d+" + matches = re.findall(regex_pattern, notes)[:3] + issue_numbers = [] + for match in matches: + match = re.search(r"\d+", match).group() + issue_numbers.append(match) + return issue_numbers + + def parse_harvest_csv(file=None): global issues_and_urls @@ -75,42 +75,28 @@ def parse_harvest_csv(file=None): print('Beginning parsing for issues') - issue_fields = [ - "First Issue Title", - "First Issue URL", - "Second Issue Title", - "Second Issue URL", - "Third Issue Title", - "Third Issue URL" - ] - - with open(file, 'r') as f: csv_reader = csv.DictReader(f) rows = list(csv_reader) original_fieldnames = csv_reader.fieldnames modified_fieldnames = original_fieldnames + issue_fields - f.close() - with open('modified_report.csv', 'w', newline='') as csvfile: - issues_and_urls = [] writer = csv.DictWriter(csvfile, fieldnames = modified_fieldnames) writer.writeheader() row_count = 0 for row in rows: - issues = parse_notes_section(row['Notes']) - for issue in issues: - get_issue_title_and_url(issue) - issues_dict = dict(zip(issue_fields, issues_and_urls)) - row.update(issues_dict) - issues_and_urls = [] - writer.writerow(row) - + if (row_count % 20 == 0): + print("ON ROW:", row_count) -def run_program(): + issues = parse_notes_section(row['Notes']) + issues_dict = split_issues_into_columns(issues) + row.update(issues_dict) + writer.writerow(row) + + issues_and_urls = [] + row_count += 1 + +if __name__ == "__main__": parse_harvest_csv() -test_parse_notes_section() -test_get_issue_title_and_url() -run_program() diff --git a/tests.py b/tests.py new file mode 100644 index 0000000..e081be7 --- /dev/null +++ b/tests.py @@ -0,0 +1,36 @@ +import generate_issues +import re + +def test_split_issues_into_columns(): + issues_string = 'Resolved Issue #363, #362 and Issue 361' + issues = generate_issues.parse_notes_section(issues_string) + solution = {'First Issue Title': 'Little slow downs are happening - these often signal that the server memory is getting overwhelmed?', 'First Issue URL': 'https://git.agaric.com/housingworks/app-housingworks-net/issues/363', 'Second Issue Title': 'Little slow downs are happening - these often signal that the server memory is getting overwhelmed?', 'Second Issue URL': 'https://git.agaric.com/housingworks/app-housingworks-net/issues/363', 'Third Issue Title': 'the csv Importer has quit working on both the live and test sites???', 'Third Issue URL': 'https://git.agaric.com/housingworks/app-housingworks-net/issues/362'} + + if (generate_issues.split_issues_into_columns(issues) == solution): + print("TEST SPLIT ISSUES INTO COLUMNS PASSED") + else: + print("TEST SPLIT ISSUES INTO COLUMNS FAILED") + +def test_parse_notes_section(): + if (generate_issues.parse_notes_section('Resolved Issue #4, #5 and Issue 6') == ['4', '5', '6']): + print("TEST PARSE NOTES SECTION PASSED") + else: + print("TEST PARSE NOTES SECTION FAILED") + +def test_get_issue_title_and_url(): + solution = [ + "Little slow downs are happening - these often signal that the server memory is getting overwhelmed?", + "https://git.agaric.com/housingworks/app-housingworks-net/issues/363" + ] + if generate_issues.get_issue_title_and_url(363) == solution: + print("TEST GET ISSUE TITLE AND URL PASSED") + else: + print("TEST GET ISSUE TITLE AND URL FAILED") + +def run_tests(): + test_parse_notes_section() + test_get_issue_title_and_url() + test_split_issues_into_columns() + +run_tests() +