Blame tests/test_pagure_lib_git_get_tags_objects.py

Clement Verna ce25e9
# -*- coding: utf-8 -*-
Clement Verna ce25e9
Clement Verna ce25e9
"""
Clement Verna ce25e9
 (c) 2016 - Copyright Red Hat Inc
Clement Verna ce25e9
Clement Verna ce25e9
 Authors:
Clement Verna ce25e9
   Clement Verna <cverna@tutanota.com></cverna@tutanota.com>
Clement Verna ce25e9
Clement Verna ce25e9
"""
Clement Verna ce25e9
Clement Verna ce25e9
import unittest
Clement Verna ce25e9
import sys
Clement Verna ce25e9
import os
Clement Verna 40ad40
import time
Clement Verna ce25e9
Clement Verna ce25e9
import pygit2
Clement Verna ce25e9
Clement Verna ce25e9
sys.path.insert(0, os.path.join(os.path.dirname(
Clement Verna ce25e9
    os.path.abspath(__file__)), '..'))
Clement Verna ce25e9
Farhaan Bukhsh 72e9db
import pagure
Clement Verna ce25e9
import pagure.lib.git
Clement Verna ce25e9
import tests
Clement Verna ce25e9
Clement Verna ce25e9
Clement Verna ce25e9
def get_tag_name(tags):
Clement Verna ce25e9
    """ Return a list of the tag names """
Clement Verna ce25e9
    output = []
Clement Verna ce25e9
    for tag in tags:
Ryan Lerch f6c9d8
        output.append(tag['tagname'])
Clement Verna ce25e9
    return output
Clement Verna ce25e9
Clement Verna ce25e9
Jeremy Cline 20109f
def add_repo_tag(git_dir, repo, tags, repo_name):
Clement Verna ce25e9
    """ Use a list to create multiple tags on a git repo """
Clement Verna 40ad40
    for tag in reversed(tags):
Clement Verna 40ad40
        time.sleep(1)
Clement Verna 40ad40
        tests.add_commit_git_repo(
Jeremy Cline 20109f
            os.path.join(git_dir, 'repos', repo_name),
Clement Verna 40ad40
            ncommits=1)
Clement Verna 40ad40
        first_commit = repo.revparse_single('HEAD')
Clement Verna 40ad40
        tagger = pygit2.Signature('Alice Doe', 'adoe@example.com', 12347, 0)
Clement Verna ce25e9
        repo.create_tag(
Clement Verna ce25e9
            tag, first_commit.oid.hex, pygit2.GIT_OBJ_COMMIT, tagger,
Clement Verna ce25e9
            "Release " + tag)
Clement Verna ce25e9
Clement Verna ce25e9
Clement Verna ce25e9
class PagureLibGitGetTagstests(tests.Modeltests):
Clement Verna ce25e9
Clement Verna ce25e9
    def setUp(self):
Clement Verna ce25e9
        """ Set up the environnment, ran before every tests. """
Clement Verna ce25e9
        super(PagureLibGitGetTagstests, self).setUp()
Clement Verna ce25e9
Clement Verna ce25e9
        pagure.lib.git.SESSION = self.session
Clement Verna ce25e9
        pagure.APP.config['GIT_FOLDER'] = os.path.join(
Jeremy Cline 20109f
            self.path, 'repos')
Clement Verna ce25e9
        pagure.APP.config['TICKETS_FOLDER'] = os.path.join(
Jeremy Cline 20109f
            self.path, 'tickets')
Clement Verna ce25e9
        pagure.APP.config['DOCS_FOLDER'] = os.path.join(
Jeremy Cline 20109f
            self.path, 'docs')
Clement Verna ce25e9
        pagure.APP.config['REQUESTS_FOLDER'] = os.path.join(
Jeremy Cline 20109f
            self.path, 'requests')
Clement Verna ce25e9
Clement Verna ce25e9
    def test_get_git_tags_objects(self):
Clement Verna ce25e9
        """ Test the get_git_tags_objects method of pagure.lib.git. """
Clement Verna ce25e9
        tests.create_projects(self.session)
Jeremy Cline 20109f
        tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True)
Farhaan Bukhsh 83f8bc
        project = pagure.lib._get_project(self.session, 'test')
Clement Verna ebd4f9
Clement Verna ebd4f9
        # Case 1 - Empty repo with no tags
Clement Verna ebd4f9
        exp = []
Clement Verna ebd4f9
        tags = pagure.lib.git.get_git_tags_objects(project)
Clement Verna ebd4f9
        self.assertEqual(exp, get_tag_name(tags))
Clement Verna ebd4f9
Clement Verna ce25e9
        tests.add_readme_git_repo(os.path.join(os.path.join(
Jeremy Cline 20109f
            self.path, 'repos'), 'test.git'))
Clement Verna ce25e9
        repo = pygit2.Repository(os.path.join(os.path.join(
Jeremy Cline 20109f
            self.path, 'repos'), 'test.git'))
Clement Verna ce25e9
Clement Verna ebd4f9
        # Case 2 - Repo with one commit and no tags
Clement Verna 40ad40
        exp = []
Clement Verna ce25e9
        tags = pagure.lib.git.get_git_tags_objects(project)
Clement Verna ce25e9
        self.assertEqual(exp, get_tag_name(tags))
Clement Verna ce25e9
Clement Verna ebd4f9
        # Case 3 - Simple sort
Clement Verna 40ad40
        exp = ['0.1.0', 'test-0.0.21', '0.0.12-beta', '0.0.12-alpha', '0.0.12',
Clement Verna 40ad40
               '0.0.11', '0.0.3', 'foo-0.0.2', '0.0.1']
Jeremy Cline 20109f
        add_repo_tag(self.path, repo, exp, 'test.git')
Clement Verna ce25e9
        tags = pagure.lib.git.get_git_tags_objects(project)
Clement Verna ce25e9
        self.assertEqual(exp, get_tag_name(tags))
Clement Verna ce25e9
Clement Verna ebd4f9
        # Case 4 - Sorting with different splitting characters
Farhaan Bukhsh 72e9db
        project = pagure.get_authorized_project(self.session, 'test2')
Clement Verna ce25e9
        tests.add_readme_git_repo(os.path.join(os.path.join(
Jeremy Cline 20109f
            self.path, 'repos'), 'test2.git'))
Clement Verna ce25e9
        repo = pygit2.Repository(os.path.join(os.path.join(
Jeremy Cline 20109f
            self.path, 'repos'), 'test2.git'))
Clement Verna ce25e9
Clement Verna 40ad40
        exp = ['1.0-0_2', '1.0-0_1', '0.1-1_0', '0.1-0_0', '0.0-2_0',
Clement Verna 40ad40
               '0.0-1_34', '0.0-1_11', '0.0-1_3', '0.0-1_2', '0.0-1_1']
Jeremy Cline 20109f
        add_repo_tag(self.path, repo, exp, 'test2.git')
Clement Verna ce25e9
        tags = pagure.lib.git.get_git_tags_objects(project)
Clement Verna ce25e9
        self.assertEqual(exp, get_tag_name(tags))
Clement Verna ce25e9
Clement Verna ce25e9
Clement Verna ce25e9
if __name__ == '__main__':
Pierre-Yves Chibon 393f31
    unittest.main(verbosity=2)