review/tests/test_delete.py @ bef3dce04be6

tests: generalize setup_reviewed_repo
author Steve Losh <steve@stevelosh.com>
date Thu, 22 Jul 2010 19:12:51 -0400
parents dff2e396a30f
children (none)
from nose import with_setup
from util import setup_reviewed_sandbox, teardown_sandbox, review, should_fail_with
from util import get_identifiers

from .. import messages

@with_setup(setup_reviewed_sandbox(), teardown_sandbox)
def test_delete_invalid():
    should_fail_with(messages.REQUIRES_IDS, delete=True)
    should_fail_with(messages.UNKNOWN_ID % 'a', delete=True, args=['a'])

    review(comment=True, message='test')

    should_fail_with(messages.UNKNOWN_ID % 'z', delete=True, args=['z'])

    # Use the pidgeonhole princicple to create ambiguous identifiers.
    for i in range(17):
        review(comment=True, message='test%d' % i)

    ids = get_identifiers()
    id_map = {}
    for i in ids:
        id_map[i[0]] = id_map.get(i[0], 0) + 1
    i = str(filter(lambda k: id_map[k] > 1, id_map.keys())[0])

    should_fail_with(messages.AMBIGUOUS_ID % i, delete=True, args=[i])

@with_setup(setup_reviewed_sandbox(), teardown_sandbox)
def test_delete_comment():
    def t(rev):
        review(rev=rev, comment=True, message='test')
        i = get_identifiers(rev)[0]

        output = review(delete=True, args=[i])
        assert not output
        output = review(rev=rev, verbose=True)
        assert '(%s)\n' % i not in output

        review(rev=rev, comment=True, message='test2')
        review(rev=rev, comment=True, message='test3')
        i1, i2 = get_identifiers(rev)

        output = review(delete=True, args=[i1])
        assert not output
        output = review(rev=rev, verbose=True)
        assert '(%s)\n' % i1 not in output
        assert '(%s)\n' % i2 in output

        review(rev=rev, comment=True, message='test4')
        i1, i2 = get_identifiers(rev)

        output = review(delete=True, args=[i1, i2])
        assert not output
        output = review(rev=rev, verbose=True)
        assert '(%s)\n' % i1 not in output
        assert '(%s)\n' % i2 not in output
    t('.')
    t('0')

@with_setup(setup_reviewed_sandbox(), teardown_sandbox)
def test_delete_signoff():
    # TODO: test multiple signoff deletions
    review(signoff=True, message='test')
    i = get_identifiers()[0]

    output = review(delete=True, args=[i])
    assert not output
    output = review(verbose=True)
    assert '(%s)\n' % i not in output

    review(comment=True, message='test2')
    review(signoff=True, message='test3')
    i1, i2 = get_identifiers()

    output = review(delete=True, args=[i2])
    assert not output
    output = review(verbose=True)
    assert '(%s)\n' % i1 in output
    assert '(%s)\n' % i2 not in output

@with_setup(setup_reviewed_sandbox(), teardown_sandbox)
def test_delete_both():
    def t(rev):
        review(rev=rev, signoff=True, message='test')
        review(rev=rev, comment=True, message='test')
        ids = get_identifiers(rev)

        output = review(rev=rev, delete=True, args=ids)
        assert not output
        output = review(rev=rev, verbose=True)
        assert '(%s)\n' % ids[0] not in output
        assert '(%s)\n' % ids[1] not in output

        review(rev=rev, signoff=True, message='test2')
        review(rev=rev, comment=True, message='test3')
        review(rev=rev, comment=True, message='test4')
        ids = get_identifiers(rev)

        output = review(rev=rev, delete=True, args=ids[:2])
        assert not output
        output = review(rev=rev, verbose=True)
        assert '(%s)\n' % ids[0] not in output
        assert '(%s)\n' % ids[1] not in output
        assert '(%s)\n' % ids[2] in output
    t('.')
    t('0')