| |
@@ -38,13 +38,14 @@
|
| |
|
| |
|
| |
class TestPagureBotBasics(object):
|
| |
+ @pytest.mark.parametrize("inversed", [False, True])
|
| |
@pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
@pytest.mark.parametrize("vote", ['+1', '-1', '0'])
|
| |
- def test_basic_vote(self, vote, keyword):
|
| |
+ def test_basic_vote(self, vote, keyword, inversed):
|
| |
comments = [pagure_bot.Comment(c) for c in [
|
| |
{
|
| |
'id': 1,
|
| |
- 'comment': "%s %s" % (keyword, vote),
|
| |
+ 'comment': "%s %s" % ((vote, keyword) if inversed else (keyword, vote)),
|
| |
'user': {
|
| |
'name': stub_admin_user1
|
| |
}
|
| |
@@ -109,13 +110,14 @@
|
| |
|
| |
|
| |
class TestPagureBotGotchas(object):
|
| |
+ @pytest.mark.parametrize("inversed", [False, True])
|
| |
@pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
@pytest.mark.parametrize("sign", ['+', '–']) # these chars are not + or -
|
| |
- def test_unicode_plus(self, sign, keyword):
|
| |
+ def test_unicode_plus(self, sign, keyword, inversed):
|
| |
comments = [pagure_bot.Comment(c) for c in [
|
| |
{
|
| |
'id': 1,
|
| |
- 'comment': "%s %s1" % (keyword, sign),
|
| |
+ 'comment': "%s1 %s" % (sign, keyword) if inversed else "%s %s1" % (keyword, sign),
|
| |
'user': {
|
| |
'name': stub_admin_user1
|
| |
}
|
| |
@@ -125,13 +127,14 @@
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
assert trackers[keyword].votes == {}
|
| |
|
| |
+ @pytest.mark.parametrize("inversed", [False, True])
|
| |
@pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
@pytest.mark.parametrize("sign", ['+', '-'])
|
| |
- def test_plusminus_eleven(self, sign, keyword):
|
| |
+ def test_plusminus_eleven(self, sign, keyword, inversed):
|
| |
comments = [pagure_bot.Comment(c) for c in [
|
| |
{
|
| |
'id': 1,
|
| |
- 'comment': "%s %s11" % (keyword, sign),
|
| |
+ 'comment': "%s11 %s" % (sign, keyword) if inversed else "%s %s11" % (keyword, sign),
|
| |
'user': {
|
| |
'name': stub_admin_user1
|
| |
}
|
| |
@@ -141,13 +144,14 @@
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
assert trackers[keyword].votes == {}
|
| |
|
| |
+ @pytest.mark.parametrize("inversed", [False, True])
|
| |
@pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
@pytest.mark.parametrize("sign", ['+', '-'])
|
| |
- def test_plusminus_two(self, sign, keyword):
|
| |
+ def test_plusminus_two(self, sign, keyword, inversed):
|
| |
comments = [pagure_bot.Comment(c) for c in [
|
| |
{
|
| |
'id': 1,
|
| |
- 'comment': "%s %s2" % (keyword, sign),
|
| |
+ 'comment': "%s2 %s" % (sign, keyword) if inversed else "%s %s2" % (keyword, sign),
|
| |
'user': {
|
| |
'name': stub_admin_user1
|
| |
}
|
| |
@@ -157,13 +161,14 @@
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
assert trackers[keyword].votes == {}
|
| |
|
| |
+ @pytest.mark.parametrize("inversed", [False, True])
|
| |
@pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
@pytest.mark.parametrize("sign", ['+', '-'])
|
| |
- def test_plusminus_typo(self, sign, keyword):
|
| |
+ def test_plusminus_typo(self, sign, keyword, inversed):
|
| |
comments = [pagure_bot.Comment(c) for c in [
|
| |
{
|
| |
'id': 1,
|
| |
- 'comment': "%s %s!" % (keyword, sign),
|
| |
+ 'comment': "%s! %s" % (sign, keyword) if inversed else "%s %s!" % (keyword, sign),
|
| |
'user': {
|
| |
'name': stub_admin_user1
|
| |
}
|
| |
@@ -173,13 +178,14 @@
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
assert trackers[keyword].votes == {}
|
| |
|
| |
+ @pytest.mark.parametrize("inversed", [False, True])
|
| |
@pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
@pytest.mark.parametrize("sign", ['+', '-'])
|
| |
- def test_plusminus_float(self, sign, keyword):
|
| |
+ def test_plusminus_float(self, sign, keyword, inversed):
|
| |
comments = [pagure_bot.Comment(c) for c in [
|
| |
{
|
| |
'id': 1,
|
| |
- 'comment': "%s %s0.5" % (keyword, sign),
|
| |
+ 'comment': "%s0.5 %s" % (sign, keyword) if inversed else "%s %s0.5" % (keyword, sign),
|
| |
'user': {
|
| |
'name': stub_admin_user1
|
| |
}
|
| |
@@ -189,13 +195,14 @@
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
assert trackers[keyword].votes == {}
|
| |
|
| |
+ @pytest.mark.parametrize("inversed", [False, True])
|
| |
@pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
@pytest.mark.parametrize("sign", ['+', '-'])
|
| |
- def test_plusminus_emoji(self, sign, keyword):
|
| |
+ def test_plusminus_emoji(self, sign, keyword, inversed):
|
| |
comments = [pagure_bot.Comment(c) for c in [
|
| |
{
|
| |
'id': 1,
|
| |
- 'comment': "%s %s👎" % (keyword, sign),
|
| |
+ 'comment': "%s👎 %s" % (sign, keyword) if inversed else "%s %s👎" % (keyword, sign),
|
| |
'user': {
|
| |
'name': stub_admin_user1
|
| |
}
|
| |
@@ -205,13 +212,14 @@
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
assert trackers[keyword].votes == {}
|
| |
|
| |
+ @pytest.mark.parametrize("inversed", [False, True])
|
| |
@pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
@pytest.mark.parametrize("sign", ['+', '-'])
|
| |
- def test_plusminus_backtick(self, sign, keyword):
|
| |
+ def test_plusminus_backtick(self, sign, keyword, inversed):
|
| |
comments = [pagure_bot.Comment(c) for c in [
|
| |
{
|
| |
'id': 1,
|
| |
- 'comment': "`%s %s1`" % (keyword, sign),
|
| |
+ 'comment': "`%s1 %s`" % (sign, keyword) if inversed else "`%s %s1`" % (keyword, sign),
|
| |
'user': {
|
| |
'name': stub_admin_user1
|
| |
}
|
| |
@@ -223,13 +231,14 @@
|
| |
|
| |
|
| |
class TestPagureBotMultiline(object):
|
| |
+ @pytest.mark.parametrize("inversed", [False, True])
|
| |
@pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
@pytest.mark.parametrize("sign", ['+', '-'])
|
| |
- def test_multiline_singlevote(self, sign, keyword):
|
| |
+ def test_multiline_singlevote(self, sign, keyword, inversed):
|
| |
comments = [pagure_bot.Comment(c) for c in [
|
| |
{
|
| |
'id': 1,
|
| |
- 'comment': "foobar\n%s %s1\nbarbaz" % (keyword, sign),
|
| |
+ 'comment': "foobar\n%s1 %s\nbarbaz" % (sign, keyword) if inversed else "foobar\n%s %s1\nbarbaz" % (keyword, sign),
|
| |
'user': {
|
| |
'name': stub_admin_user1
|
| |
}
|
| |
@@ -244,17 +253,19 @@
|
| |
}
|
| |
}
|
| |
|
| |
+ @pytest.mark.parametrize("inversed", itertools.product([False, True], [False, True]))
|
| |
@pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
@pytest.mark.parametrize("vote", [('+1', '-1'), ('-1', '+1'), ('+1', '0'),
|
| |
('-1', '0'), ('0', '-1'), ('0', '+1')])
|
| |
- def test_multiline_multivote_same(self, vote, keyword):
|
| |
+ def test_multiline_multivote_same(self, vote, keyword, inversed):
|
| |
vote_first = vote[0]
|
| |
vote_second = vote[1]
|
| |
+ first = (vote_first, keyword) if inversed[0] else (keyword, vote_first)
|
| |
+ second = (vote_second, keyword) if inversed[1] else (keyword, vote_second)
|
| |
comments = [pagure_bot.Comment(c) for c in [
|
| |
{
|
| |
'id': 1,
|
| |
- 'comment': "foobar\n%s %s\nbarbaz\n%s %s" % (keyword, vote_first,
|
| |
- keyword, vote_second),
|
| |
+ 'comment': "foobar\n%s %s\nbarbaz\n%s %s" % (first + second),
|
| |
'user': {
|
| |
'name': stub_admin_user1
|
| |
}
|
| |
@@ -269,20 +280,22 @@
|
| |
}
|
| |
}
|
| |
|
| |
+ @pytest.mark.parametrize("inversed", itertools.product([False, True], [False, True]))
|
| |
@pytest.mark.parametrize("keyword", itertools.permutations(pagure_bot.TRACKER_KEYWORDS, 2))
|
| |
@pytest.mark.parametrize("vote", [('+1', '-1'), ('-1', '+1'), ('+1', '0'),
|
| |
('-1', '0'), ('0', '-1'), ('0', '+1'),
|
| |
('0', '0'), ('-1', '-1'), ('+1', '+1')])
|
| |
- def test_multiline_multivote_different(self, vote, keyword):
|
| |
+ def test_multiline_multivote_different(self, vote, keyword, inversed):
|
| |
keyword_first = keyword[0]
|
| |
keyword_second = keyword[1]
|
| |
vote_first = vote[0]
|
| |
vote_second = vote[1]
|
| |
+ first = (vote_first, keyword_first) if inversed[0] else (keyword_first, vote_first)
|
| |
+ second = (vote_second, keyword_second) if inversed[1] else (keyword_second, vote_second)
|
| |
comments = [pagure_bot.Comment(c) for c in [
|
| |
{
|
| |
'id': 1,
|
| |
- 'comment': "foobar\n%s %s\nbarbaz\n%s %s" % (keyword_first, vote_first,
|
| |
- keyword_second, vote_second),
|
| |
+ 'comment': "foobar\n%s %s\nbarbaz\n%s %s" % (first + second),
|
| |
'user': {
|
| |
'name': stub_admin_user1
|
| |
}
|
| |
@@ -541,13 +554,14 @@
|
| |
|
| |
|
| |
class TestPagureBotWhitespaces(object):
|
| |
+ @pytest.mark.parametrize("inversed", [False, True])
|
| |
@pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
@pytest.mark.parametrize("vote", ['+1', '-1', '0'])
|
| |
- def test_trailing_whitespace(self, vote, keyword):
|
| |
+ def test_trailing_whitespace(self, vote, keyword, inversed):
|
| |
comments = [pagure_bot.Comment(c) for c in [
|
| |
{
|
| |
'id': 1,
|
| |
- 'comment': "%s %s " % (keyword, vote),
|
| |
+ 'comment': "%s %s " % ((vote, keyword) if inversed else (keyword, vote)),
|
| |
'user': {
|
| |
'name': stub_admin_user1
|
| |
}
|
| |
@@ -562,13 +576,14 @@
|
| |
}
|
| |
}
|
| |
|
| |
+ @pytest.mark.parametrize("inversed", [False, True])
|
| |
@pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
@pytest.mark.parametrize("vote", ['+1', '-1', '0'])
|
| |
- def test_whitespaces_inside_vote(self, vote, keyword):
|
| |
+ def test_leading_whitespace(self, vote, keyword, inversed):
|
| |
comments = [pagure_bot.Comment(c) for c in [
|
| |
{
|
| |
'id': 1,
|
| |
- 'comment': "%s %s" % (keyword, vote),
|
| |
+ 'comment': " %s %s" % ((vote, keyword) if inversed else (keyword, vote)),
|
| |
'user': {
|
| |
'name': stub_admin_user1
|
| |
}
|
| |
@@ -583,13 +598,58 @@
|
| |
}
|
| |
}
|
| |
|
| |
+ @pytest.mark.parametrize("inversed", [False, True])
|
| |
@pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
@pytest.mark.parametrize("vote", ['+1', '-1', '0'])
|
| |
- def test_newline_inside_vote_ignored(self, vote, keyword):
|
| |
+ def test_whitespaces_inside_vote(self, vote, keyword, inversed):
|
| |
comments = [pagure_bot.Comment(c) for c in [
|
| |
{
|
| |
'id': 1,
|
| |
- 'comment': "%s\n%s" % (keyword, vote),
|
| |
+ 'comment': "%s %s" % ((vote, keyword) if inversed else (keyword, vote)),
|
| |
+ 'user': {
|
| |
+ 'name': stub_admin_user1
|
| |
+ }
|
| |
+ }
|
| |
+ ]]
|
| |
+
|
| |
+ trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
+ assert trackers[keyword].votes == {
|
| |
+ stub_admin_user1: {
|
| |
+ 'vote': '%s' % vote,
|
| |
+ 'comment_id': 1
|
| |
+ }
|
| |
+ }
|
| |
+
|
| |
+ @pytest.mark.parametrize("inversed", [False, True])
|
| |
+ @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
+ @pytest.mark.parametrize("vote", ['+1', '-1', '0'])
|
| |
+ def test_trailing_leading_inside_whitespace(self, vote, keyword, inversed):
|
| |
+ comments = [pagure_bot.Comment(c) for c in [
|
| |
+ {
|
| |
+ 'id': 1,
|
| |
+ 'comment': " %s %s " % ((vote, keyword) if inversed else (keyword, vote)),
|
| |
+ 'user': {
|
| |
+ 'name': stub_admin_user1
|
| |
+ }
|
| |
+ }
|
| |
+ ]]
|
| |
+
|
| |
+ trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
+ assert trackers[keyword].votes == {
|
| |
+ stub_admin_user1: {
|
| |
+ 'vote': '%s' % vote,
|
| |
+ 'comment_id': 1
|
| |
+ }
|
| |
+ }
|
| |
+
|
| |
+ @pytest.mark.parametrize("inversed", [False, True])
|
| |
+ @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
+ @pytest.mark.parametrize("vote", ['+1', '-1', '0'])
|
| |
+ def test_newline_inside_vote_ignored(self, vote, keyword, inversed):
|
| |
+ comments = [pagure_bot.Comment(c) for c in [
|
| |
+ {
|
| |
+ 'id': 1,
|
| |
+ 'comment': "%s\n%s" % ((vote, keyword) if inversed else (keyword, vote)),
|
| |
'user': {
|
| |
'name': stub_admin_user1
|
| |
}
|
| |
@@ -601,6 +661,29 @@
|
| |
|
| |
@pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
@pytest.mark.parametrize("outcome", ['Accepted', 'Rejected'])
|
| |
+ def test_agreed_single_acceptedrejected_leading_wspace_needs_summary(self, outcome, keyword, setup_stubs):
|
| |
+ comments = [pagure_bot.Comment(c) for c in [
|
| |
+ {
|
| |
+ 'id': 1,
|
| |
+ 'comment': "%s +1" % keyword,
|
| |
+ 'user': {
|
| |
+ 'name': stub_admin_user1
|
| |
+ }
|
| |
+ },
|
| |
+ {
|
| |
+ 'id': 2,
|
| |
+ 'comment': " AGREED %s%s foo bar" % (outcome, keyword),
|
| |
+ 'user': {
|
| |
+ 'name': stub_admin_user1
|
| |
+ }
|
| |
+ }
|
| |
+ ]]
|
| |
+
|
| |
+ trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
+ assert trackers[keyword].need_summary_post
|
| |
+
|
| |
+ @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
+ @pytest.mark.parametrize("outcome", ['Accepted', 'Rejected'])
|
| |
def test_agreed_single_acceptedrejected_trailing_wspace_needs_summary(self, outcome, keyword, setup_stubs):
|
| |
comments = [pagure_bot.Comment(c) for c in [
|
| |
{
|
| |
@@ -635,7 +718,7 @@
|
| |
},
|
| |
{
|
| |
'id': 2,
|
| |
- 'comment': "AGREED %s%s foo bar " % (outcome, keyword),
|
| |
+ 'comment': " AGREED %s%s foo bar " % (outcome, keyword),
|
| |
'user': {
|
| |
'name': stub_admin_user1
|
| |
}
|
| |
TRACKER VOTE command was too strict, bot now accepts all of these:
where ... (three dots) shows a trailing whitespace
Fixes https://pagure.io/fedora-qa/blockerbugs/issue/153