Files @ c734686b3cf2
Branch filter:

Location: kallithea/rhodecode/tests/models/test_diff_parsers.py

Marcin Kuzminski
moved permission management into separate entity.
- this solves issues when whole form submision could influence permission management
particular case is that when repo group permission is revoked and user is no longer able to update repository settings
from __future__ import with_statement
import os
import unittest
from rhodecode.tests import *
from rhodecode.lib.diffs import DiffProcessor, NEW_FILENODE, DEL_FILENODE, \
    MOD_FILENODE, RENAMED_FILENODE, CHMOD_FILENODE

dn = os.path.dirname
FIXTURES = os.path.join(dn(dn(os.path.abspath(__file__))), 'fixtures')

DIFF_FIXTURES = {
    'hg_diff_add_single_binary_file.diff': [
        (u'US Warszawa.jpg', 'A', ['b', NEW_FILENODE]),
    ],
    'hg_diff_mod_single_binary_file.diff': [
        (u'US Warszawa.jpg', 'M', ['b', MOD_FILENODE]),
    ],
    'hg_diff_del_single_binary_file.diff': [
        (u'US Warszawa.jpg', 'D', ['b', DEL_FILENODE]),
    ],
    'hg_diff_binary_and_normal.diff': [
        (u'img/baseline-10px.png', 'A', ['b', NEW_FILENODE]),
        (u'js/jquery/hashgrid.js', 'A', [340, 0]),
        (u'index.html',            'M', [3, 2]),
        (u'less/docs.less',        'M', [34, 0]),
        (u'less/scaffolding.less', 'M', [1, 3]),
        (u'readme.markdown',       'M', [1, 10]),
        (u'img/baseline-20px.png', 'D', ['b', DEL_FILENODE]),
        (u'js/global.js',          'D', [0, 75])
    ],
    'hg_diff_chmod.diff': [
        (u'file', 'M', ['b', CHMOD_FILENODE]),
    ],
    'hg_diff_rename_file.diff': [
        (u'file_renamed', 'M', ['b', RENAMED_FILENODE]),
    ],
    'git_diff_chmod.diff': [
        (u'work-horus.xls', 'M', ['b', CHMOD_FILENODE]),
    ],
    'git_diff_rename_file.diff': [
        (u'file.xls', 'M', ['b', RENAMED_FILENODE]),
    ],
    'git_diff_mod_single_binary_file.diff': [
        ('US Warszawa.jpg', 'M', ['b', MOD_FILENODE])

    ],
    'git_diff_binary_and_normal.diff': [
        (u'img/baseline-10px.png', 'A', ['b', NEW_FILENODE]),
        (u'js/jquery/hashgrid.js', 'A', [340, 0]),
        (u'index.html',            'M', [3, 2]),
        (u'less/docs.less',        'M', [34, 0]),
        (u'less/scaffolding.less', 'M', [1, 3]),
        (u'readme.markdown',       'M', [1, 10]),
        (u'img/baseline-20px.png', 'D', ['b', DEL_FILENODE]),
        (u'js/global.js',          'D', [0, 75])
    ],
    'diff_with_diff_data.diff': [
        (u'vcs/backends/base.py', 'M', [18, 2]),
        (u'vcs/backends/git/repository.py', 'M', [46, 15]),
        (u'vcs/backends/hg.py', 'M', [22, 3]),
        (u'vcs/tests/test_git.py', 'M', [5, 5]),
        (u'vcs/tests/test_repository.py', 'M', [174, 2])
    ],
#    'large_diff.diff': [
#
#    ],


}


def _diff_checker(fixture):
    with open(os.path.join(FIXTURES, fixture)) as f:
        diff = f.read()

    diff_proc = DiffProcessor(diff)
    diff_proc_d = diff_proc.prepare()
    data = [(x['filename'], x['operation'], x['stats']) for x in diff_proc_d]
    expected_data = DIFF_FIXTURES[fixture]

    assert expected_data == data


def test_parse_diff():
    for fixture in DIFF_FIXTURES:
        yield _diff_checker, fixture