Skip to content

Commit

Permalink
Fix bitbucket merge pattern. Testable functions.
Browse files Browse the repository at this point in the history
  • Loading branch information
barseghyanartur committed Nov 19, 2019
1 parent 180c7ec commit 7b3ce70
Show file tree
Hide file tree
Showing 6 changed files with 214 additions and 116 deletions.
5 changes: 4 additions & 1 deletion src/matyan/patterns.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,10 @@ def get_branch_types_for_regex() -> str:
r'(?P<branch_title>[a-zA-Z-\d]*)'

REGEX_PATTERN_MERGED_BRANCH_NAME = r'(\s*)' \
r'((Merged in )|(Merge pull request.*))' + \
r'(' \
r'(Merged in )|' \
r'(Merge pull request .* from )' \
r')' + \
REGEX_PATTERN_BRANCH_NAME

REGEX_PATTERN_COMMIT = r'(?P<ticket_number>[a-zA-Z]{1,7}-\d{4,6})?'
Expand Down
2 changes: 0 additions & 2 deletions src/matyan/tests/base.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
# -*- coding: utf-8 -*-

import os
import logging
import socket
Expand Down
46 changes: 46 additions & 0 deletions src/matyan/tests/mixins.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import os
import git

from ..helpers import project_dir

__author__ = 'Artur Barseghyan'
__copyright__ = '2019 Artur Barseghyan'
__license__ = 'GPL-2.0-only OR LGPL-2.0-or-later'
__all__ = (
'ChangelogMixin',
)


class ChangelogMixin:
"""Changelog mixin."""

@classmethod
def prepare_changelog_data(cls):
"""Prepare data."""
# if is_internet_available() or is_travis():
# Test directory for cloning the repo
cls.test_dir = project_dir("tests/matyan-testing")
if not os.path.exists(cls.test_dir):
git.Repo.clone_from(
"https://barseghyanartur@bitbucket.org/barseghyanartur/matyan-testing.git", # NOQA
cls.test_dir,
StrictHostKeyChecking=False
)

# Go to cloned repository
os.chdir(cls.test_dir)

# Expected output of the `generate-changelog` command.
changelog_output = project_dir(
'tests/output/generate-changelog.md'
)
with open(changelog_output, 'r') as file:
cls.changelog_output = file.read().strip()

# Expected output of the `generate-changelog --show-releases`
# command.
changelog_releases_output = project_dir(
'tests/output/generate-changelog-releases.md'
)
with open(changelog_releases_output, 'r') as file:
cls.changelog_releases_output = file.read().strip()
31 changes: 3 additions & 28 deletions src/matyan/tests/test_commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
internet_available_or_is_travis_only,
is_travis,
)
from .mixins import ChangelogMixin

__author__ = 'Artur Barseghyan'
__copyright__ = '2019 Artur Barseghyan'
Expand All @@ -22,7 +23,7 @@
LOGGER = logging.getLogger(__name__)


class TestCommands(unittest.TestCase):
class TestCommands(unittest.TestCase, ChangelogMixin):
"""Matyan commands tests."""

maxDiff = None
Expand All @@ -31,33 +32,7 @@ class TestCommands(unittest.TestCase):
def setUpClass(cls):
"""Set up."""
super(TestCommands, cls).setUpClass()
# if is_internet_available() or is_travis():
# Test directory for cloning the repo
test_dir = project_dir("tests/matyan-testing")
if not os.path.exists(test_dir):
git.Repo.clone_from(
"https://barseghyanartur@bitbucket.org/barseghyanartur/matyan-testing.git", # NOQA
test_dir,
StrictHostKeyChecking=False
)

# Go to cloned repository
os.chdir(test_dir)

# Expected output of the `generate-changelog` command.
changelog_output = project_dir(
'tests/output/generate-changelog.md'
)
with open(changelog_output, 'r') as file:
cls.changelog_output = file.read().strip()

# Expected output of the `generate-changelog --show-releases`
# command.
changelog_releases_output = project_dir(
'tests/output/generate-changelog-releases.md'
)
with open(changelog_releases_output, 'r') as file:
cls.changelog_releases_output = file.read().strip()
cls.prepare_changelog_data()

# @internet_available_or_is_travis_only
@log_info
Expand Down
67 changes: 50 additions & 17 deletions src/matyan/tests/test_core.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,15 @@
import logging
import os
import unittest
from unittest import mock

from ..utils import (
create_config_file,
generate_changelog_cli,
generate_changelog,
generate_empty_tree,
get_branch_type,
get_logs,
json_changelog_cli,
json_changelog,
prepare_changelog,
prepare_releases_changelog,
validate_between,
Expand All @@ -26,6 +27,7 @@
log_info,
internet_available_or_is_travis_only,
)
from .mixins import ChangelogMixin

__author__ = 'Artur Barseghyan'
__copyright__ = '2019 Artur Barseghyan'
Expand All @@ -35,29 +37,60 @@
LOGGER = logging.getLogger(__name__)


class TestCore(unittest.TestCase):
"""Core matyan functionality tests."""
class TestCore(unittest.TestCase, ChangelogMixin):
"""Core functionality tests."""

def setUp(self):
"""Set up."""
# TODO
maxDiff = None

def tearDown(self):
"""Tear down."""
# TODO
@classmethod
def setUpClass(cls) -> None:
super(TestCore, cls).setUpClass()
cls.prepare_changelog_data()

@log_info
def test_01_merge_branch_patterns(self):
def test_01_generate_changelog(self):
"""Test generate changelog."""
merge_messages = [
res = generate_changelog(
include_other=False,
path=self.test_dir
).strip()
self.assertEqual(res, self.changelog_output)
return res

@log_info
def test_02_generate_changelog_show_releases(self):
"""Test generate changelog."""
res = generate_changelog(
include_other=False,
show_releases=True,
path=self.test_dir
).strip()
self.assertEqual(res, self.changelog_releases_output)
return res

@log_info
def test_03_merge_branch_patterns(self):
"""Test generate changelog."""
merge_messages = {
'Merge pull request #1234 in PROJ/repo from bugfix/PROJ-'
'3545-currency-not-saved-at-sso to dev',
'3545-currency-not-saved-at-sso to dev': {
'ticket_number': 'PROJ-3545',
'branch_title': 'currency-not-saved-at-sso'
},
'Merged in bugfix/MSFT-1236-prevent-duplicate-postal-codes '
'(pull request #3)',
]
for message in merge_messages:
'(pull request #3)': {
'ticket_number': 'MSFT-1236',
'branch_title': 'prevent-duplicate-postal-codes'
},
}
for message, parsed in merge_messages.items():
match = re.match(REGEX_PATTERN_MERGED_BRANCH_NAME, message)
self.assertIsNotNone(match)
with self.subTest(f'Testing {message}: {parsed}'):
self.assertIsNotNone(match)
ticket_number = match.group('ticket_number')
self.assertEqual(ticket_number, parsed['ticket_number'])
branch_title = match.group('branch_title')
self.assertEqual(branch_title, parsed['branch_title'])


if __name__ == '__main__':
Expand Down

0 comments on commit 7b3ce70

Please sign in to comment.