Changeset - d63018164a30
[Not reviewed]
default
0 1 0
Mads Kiilerich - 7 years ago 2018-09-01 16:14:30
mads@kiilerich.com
tests: workaround for pytest 3.7.1 breaking autouse of classmethods

See https://github.com/pytest-dev/pytest/issues/3778 .
1 file changed with 5 insertions and 5 deletions:
0 comments (0 inline, 0 general)
kallithea/tests/vcs/base.py
Show inline comments
 
@@ -7,84 +7,84 @@ import datetime
 
import pytest
 

	
 
from kallithea.lib import vcs
 
from kallithea.lib.vcs.nodes import FileNode
 

	
 
from kallithea.tests.vcs.conf import get_new_dir
 

	
 

	
 
class _BackendTestMixin(object):
 
    """
 
    This is a backend independent test case class
 

	
 
    It is possible to set following attributes at subclass:
 

	
 
    - ``backend_alias``: alias of used backend (see ``vcs.BACKENDS``)
 
    - ``recreate_repo_per_test``: If set to ``False``, repo would NOT be created
 
      before every single test. Defaults to ``True``.
 
    """
 
    recreate_repo_per_test = True
 

	
 
    @classmethod
 
    def _get_commits(cls):
 
        commits = [
 
            {
 
                'message': u'Initial commit',
 
                'author': u'Joe Doe <joe.doe@example.com>',
 
                'date': datetime.datetime(2010, 1, 1, 20),
 
                'added': [
 
                    FileNode('foobar', content='Foobar'),
 
                    FileNode('foobar2', content='Foobar II'),
 
                    FileNode('foo/bar/baz', content='baz here!'),
 
                ],
 
            },
 
            {
 
                'message': u'Changes...',
 
                'author': u'Jane Doe <jane.doe@example.com>',
 
                'date': datetime.datetime(2010, 1, 1, 21),
 
                'added': [
 
                    FileNode('some/new.txt', content='news...'),
 
                ],
 
                'changed': [
 
                    FileNode('foobar', 'Foobar I'),
 
                ],
 
                'removed': [],
 
            },
 
        ]
 
        return commits
 

	
 
    @classmethod
 
    # Note: cannot use classmethod fixtures with pytest 3.7.1+
 
    @pytest.fixture(autouse=True,
 
                    scope='class')
 
    def _configure_backend(cls, request):
 
        Backend = vcs.get_backend(cls.backend_alias)
 
        cls.backend_class = Backend
 
        cls.setup_repo(Backend)
 
    def _configure_backend(self, request):
 
        Backend = vcs.get_backend(self.backend_alias)
 
        type(self).backend_class = Backend
 
        type(self).setup_repo(Backend)
 

	
 
    @classmethod
 
    def setup_empty_repo(cls, backend):
 
        repo_path = get_new_dir(str(time.time()))
 
        repo = backend(repo_path, create=True)
 
        return repo
 

	
 
    @classmethod
 
    def setup_repo(cls, backend):
 
        cls.repo = cls.setup_empty_repo(backend)
 
        cls.imc = cls.repo.in_memory_changeset
 
        cls.default_branch = cls.repo.DEFAULT_BRANCH_NAME
 

	
 
        for commit in cls._get_commits():
 
            for node in commit.get('added', []):
 
                cls.imc.add(FileNode(node.path, content=node.content))
 
            for node in commit.get('changed', []):
 
                cls.imc.change(FileNode(node.path, content=node.content))
 
            for node in commit.get('removed', []):
 
                cls.imc.remove(FileNode(node.path))
 

	
 
            cls.tip = cls.imc.commit(message=unicode(commit['message']),
 
                                     author=unicode(commit['author']),
 
                                     date=commit['date'])
 

	
 
    @pytest.fixture(autouse=True)
 
    def _possibly_recreate_repo(self):
 
        if getattr(self, 'recreate_repo_per_test', False):
 
            self.setup_repo(self.backend_class)
0 comments (0 inline, 0 general)