| |
@@ -6,6 +6,7 @@
|
| |
from blockerbugs.util import pagure_interface
|
| |
from blockerbugs.util import pagure_bot
|
| |
|
| |
+ EXTENDED_TRACKERS = ["betafreezeexception", "finalfreezeexception"] + pagure_bot.TRACKER_KEYWORDS
|
| |
|
| |
def powerset(iterable):
|
| |
s = list(iterable)
|
| |
@@ -38,13 +39,14 @@
|
| |
|
| |
|
| |
class TestPagureBotBasics(object):
|
| |
- @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
+ @pytest.mark.parametrize("inversed", [False, True])
|
| |
+ @pytest.mark.parametrize("keyword", EXTENDED_TRACKERS)
|
| |
@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
|
| |
}
|
| |
@@ -52,14 +54,14 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {
|
| |
+ assert trackers[keyword.replace("freezeexception", "fe")].votes == {
|
| |
stub_admin_user1: {
|
| |
'vote': '%s' % vote,
|
| |
'comment_id': 1
|
| |
}
|
| |
}
|
| |
|
| |
- @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
+ @pytest.mark.parametrize("keyword", EXTENDED_TRACKERS)
|
| |
def test_basic_vote_repeated(self, keyword):
|
| |
comments = [pagure_bot.Comment(c) for c in [
|
| |
{
|
| |
@@ -79,7 +81,7 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {
|
| |
+ assert trackers[keyword.replace("freezeexception", "fe")].votes == {
|
| |
stub_admin_user1: {
|
| |
'vote': '-1',
|
| |
'comment_id': 2
|
| |
@@ -88,7 +90,7 @@
|
| |
|
| |
|
| |
class TestPagureBotTypos(object):
|
| |
- @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
+ @pytest.mark.parametrize("keyword", EXTENDED_TRACKERS)
|
| |
@pytest.mark.parametrize("sign", ['+', '-'])
|
| |
def test_typo(self, sign, keyword):
|
| |
keyword_typo = list(keyword)
|
| |
@@ -105,17 +107,18 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {}
|
| |
+ assert trackers[keyword.replace("freezeexception", "fe")].votes == {}
|
| |
|
| |
|
| |
class TestPagureBotGotchas(object):
|
| |
- @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
+ @pytest.mark.parametrize("inversed", [False, True])
|
| |
+ @pytest.mark.parametrize("keyword", EXTENDED_TRACKERS)
|
| |
@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
|
| |
}
|
| |
@@ -123,15 +126,16 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {}
|
| |
+ assert trackers[keyword.replace("freezeexception", "fe")].votes == {}
|
| |
|
| |
- @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
+ @pytest.mark.parametrize("inversed", [False, True])
|
| |
+ @pytest.mark.parametrize("keyword", EXTENDED_TRACKERS)
|
| |
@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
|
| |
}
|
| |
@@ -139,15 +143,16 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {}
|
| |
+ assert trackers[keyword.replace("freezeexception", "fe")].votes == {}
|
| |
|
| |
- @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
+ @pytest.mark.parametrize("inversed", [False, True])
|
| |
+ @pytest.mark.parametrize("keyword", EXTENDED_TRACKERS)
|
| |
@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
|
| |
}
|
| |
@@ -155,15 +160,16 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {}
|
| |
+ assert trackers[keyword.replace("freezeexception", "fe")].votes == {}
|
| |
|
| |
- @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
+ @pytest.mark.parametrize("inversed", [False, True])
|
| |
+ @pytest.mark.parametrize("keyword", EXTENDED_TRACKERS)
|
| |
@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
|
| |
}
|
| |
@@ -171,15 +177,16 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {}
|
| |
+ assert trackers[keyword.replace("freezeexception", "fe")].votes == {}
|
| |
|
| |
- @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
+ @pytest.mark.parametrize("inversed", [False, True])
|
| |
+ @pytest.mark.parametrize("keyword", EXTENDED_TRACKERS)
|
| |
@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
|
| |
}
|
| |
@@ -187,15 +194,16 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {}
|
| |
+ assert trackers[keyword.replace("freezeexception", "fe")].votes == {}
|
| |
|
| |
- @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
+ @pytest.mark.parametrize("inversed", [False, True])
|
| |
+ @pytest.mark.parametrize("keyword", EXTENDED_TRACKERS)
|
| |
@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
|
| |
}
|
| |
@@ -203,15 +211,16 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {}
|
| |
+ assert trackers[keyword.replace("freezeexception", "fe")].votes == {}
|
| |
|
| |
- @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
+ @pytest.mark.parametrize("inversed", [False, True])
|
| |
+ @pytest.mark.parametrize("keyword", EXTENDED_TRACKERS)
|
| |
@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
|
| |
}
|
| |
@@ -219,17 +228,18 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {}
|
| |
+ assert trackers[keyword.replace("freezeexception", "fe")].votes == {}
|
| |
|
| |
|
| |
class TestPagureBotMultiline(object):
|
| |
- @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
+ @pytest.mark.parametrize("inversed", [False, True])
|
| |
+ @pytest.mark.parametrize("keyword", EXTENDED_TRACKERS)
|
| |
@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
|
| |
}
|
| |
@@ -237,24 +247,26 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {
|
| |
+ assert trackers[keyword.replace("freezeexception", "fe")].votes == {
|
| |
stub_admin_user1: {
|
| |
'vote': '%s1' % sign,
|
| |
'comment_id': 1
|
| |
}
|
| |
}
|
| |
|
| |
- @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
+ @pytest.mark.parametrize("inversed", itertools.product([False, True], [False, True]))
|
| |
+ @pytest.mark.parametrize("keyword", EXTENDED_TRACKERS)
|
| |
@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
|
| |
}
|
| |
@@ -262,27 +274,33 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {
|
| |
+ assert trackers[keyword.replace("freezeexception", "fe")].votes == {
|
| |
stub_admin_user1: {
|
| |
'vote': '%s' % vote_second,
|
| |
'comment_id': 1
|
| |
}
|
| |
}
|
| |
|
| |
- @pytest.mark.parametrize("keyword", itertools.permutations(pagure_bot.TRACKER_KEYWORDS, 2))
|
| |
+ @pytest.mark.parametrize("inversed", itertools.product([False, True], [False, True]))
|
| |
+ @pytest.mark.parametrize("keyword", itertools.permutations(EXTENDED_TRACKERS, 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]
|
| |
+ # if we hit two keywords which are synonyms for each other,
|
| |
+ # move on, test is invalid
|
| |
+ if keyword_first.replace("fe", "freezeexception") == keyword_second.replace("fe", "freezeexception"):
|
| |
+ return None
|
| |
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
|
| |
}
|
| |
@@ -290,13 +308,13 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword_first].votes == {
|
| |
+ assert trackers[keyword_first.replace("freezeexception", "fe")].votes == {
|
| |
stub_admin_user1: {
|
| |
'vote': '%s' % vote_first,
|
| |
'comment_id': 1
|
| |
}
|
| |
}
|
| |
- assert trackers[keyword_second].votes == {
|
| |
+ assert trackers[keyword_second.replace("freezeexception", "fe")].votes == {
|
| |
stub_admin_user1: {
|
| |
'vote': '%s' % vote_second,
|
| |
'comment_id': 1
|
| |
@@ -304,8 +322,104 @@
|
| |
}
|
| |
|
| |
|
| |
+ class TestPagureBotSinglelineMultivote(object):
|
| |
+ @pytest.mark.parametrize("inversed", itertools.product([False, True], [False, True]))
|
| |
+ @pytest.mark.parametrize("keyword", EXTENDED_TRACKERS)
|
| |
+ @pytest.mark.parametrize("vote", [('+1', '-1'), ('-1', '+1'), ('+1', '0'),
|
| |
+ ('-1', '0'), ('0', '-1'), ('0', '+1')])
|
| |
+ def test_singleline_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,
|
| |
+ # Votes should be accepted with second taking precedence
|
| |
+ 'comment': "%s %s %s %s" % (first + second),
|
| |
+ 'user': {
|
| |
+ 'name': stub_admin_user1
|
| |
+ }
|
| |
+ }
|
| |
+ ]]
|
| |
+
|
| |
+ trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
+ assert trackers[keyword.replace("freezeexception", "fe")].votes == {
|
| |
+ stub_admin_user1: {
|
| |
+ 'vote': '%s' % vote_second,
|
| |
+ 'comment_id': 1
|
| |
+ }
|
| |
+ }
|
| |
+
|
| |
+ @pytest.mark.parametrize("inversed", itertools.product([False, True], [False, True]))
|
| |
+ @pytest.mark.parametrize("keyword", itertools.permutations(EXTENDED_TRACKERS, 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_singleline_multivote_different(self, vote, keyword, inversed):
|
| |
+ keyword_first = keyword[0]
|
| |
+ keyword_second = keyword[1]
|
| |
+ # if we hit two keywords which are synonyms for each other,
|
| |
+ # move on, test is invalid
|
| |
+ if keyword_first.replace("fe", "freezeexception") == keyword_second.replace("fe", "freezeexception"):
|
| |
+ return None
|
| |
+ 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,
|
| |
+ # Both votes should be accepted
|
| |
+ 'comment': "%s %s %s %s" % (first + second),
|
| |
+ 'user': {
|
| |
+ 'name': stub_admin_user1
|
| |
+ }
|
| |
+ }
|
| |
+ ]]
|
| |
+
|
| |
+ trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
+ assert trackers[keyword_first.replace("freezeexception", "fe")].votes == {
|
| |
+ stub_admin_user1: {
|
| |
+ 'vote': '%s' % vote_first,
|
| |
+ 'comment_id': 1
|
| |
+ }
|
| |
+ }
|
| |
+ assert trackers[keyword_second.replace("freezeexception", "fe")].votes == {
|
| |
+ stub_admin_user1: {
|
| |
+ 'vote': '%s' % vote_second,
|
| |
+ 'comment_id': 1
|
| |
+ }
|
| |
+ }
|
| |
+
|
| |
+ def test_singleline_multivote_summary_rejected(self):
|
| |
+ """Votes should be rejected due to additional text. We need
|
| |
+ both comments to check we reject both even and odd word counts
|
| |
+ """
|
| |
+ comments = [pagure_bot.Comment(c) for c in [
|
| |
+ {
|
| |
+ 'id': 1,
|
| |
+ 'comment': "+1 FinalBlocker -1 BetaBlocker lalala",
|
| |
+ 'user': {
|
| |
+ 'name': stub_admin_user1
|
| |
+ }
|
| |
+ },
|
| |
+ {
|
| |
+ 'id': 2,
|
| |
+ 'comment': "+1 FinalBlocker -1 BetaBlocker lalala foofoofoo",
|
| |
+ 'user': {
|
| |
+ 'name': stub_admin_user1
|
| |
+ }
|
| |
+ }
|
| |
+ ]]
|
| |
+
|
| |
+ trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
+ assert trackers["finalblocker"].votes == {}
|
| |
+ assert trackers["betablocker"].votes == {}
|
| |
+
|
| |
+
|
| |
class TestPagureBotAgreedRevote(object):
|
| |
- @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
+ @pytest.mark.parametrize("keyword", EXTENDED_TRACKERS)
|
| |
@pytest.mark.parametrize("outcome", ['Accepted', 'Rejected'])
|
| |
def test_agreed_single_acceptedrejected_needs_summary(self, outcome, keyword, setup_stubs):
|
| |
comments = [pagure_bot.Comment(c) for c in [
|
| |
@@ -326,15 +440,15 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {
|
| |
+ assert trackers[keyword.replace("freezeexception", "fe")].votes == {
|
| |
stub_admin_user1: {
|
| |
'vote': '+1',
|
| |
'comment_id': 1
|
| |
}
|
| |
}
|
| |
- assert trackers[keyword].need_summary_post
|
| |
+ assert trackers[keyword.replace("freezeexception", "fe")].need_summary_post
|
| |
|
| |
- @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
+ @pytest.mark.parametrize("keyword", EXTENDED_TRACKERS)
|
| |
@pytest.mark.parametrize("outcome", ['Accepted', 'Rejected'])
|
| |
def test_agreed_single_acceptedrejected_no_justification_needs_summary(self, outcome, keyword, setup_stubs):
|
| |
comments = [pagure_bot.Comment(c) for c in [
|
| |
@@ -355,15 +469,15 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {
|
| |
+ assert trackers[keyword.replace("freezeexception", "fe")].votes == {
|
| |
stub_admin_user1: {
|
| |
'vote': '+1',
|
| |
'comment_id': 1
|
| |
}
|
| |
}
|
| |
- assert trackers[keyword].need_summary_post
|
| |
+ assert trackers[keyword.replace("freezeexception", "fe")].need_summary_post
|
| |
|
| |
- @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
+ @pytest.mark.parametrize("keyword", EXTENDED_TRACKERS)
|
| |
@pytest.mark.parametrize("outcome", ['Accepted', 'Rejected'])
|
| |
def test_agreed_single_acceptedrejected_by_impostor_need_summary(self, outcome, keyword, setup_stubs):
|
| |
comments = [pagure_bot.Comment(c) for c in [
|
| |
@@ -391,15 +505,15 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {
|
| |
+ assert trackers[keyword.replace("freezeexception", "fe")].votes == {
|
| |
stub_admin_user1: {
|
| |
'vote': '+1',
|
| |
'comment_id': 1
|
| |
}
|
| |
}
|
| |
- assert trackers[keyword].need_summary_post
|
| |
+ assert trackers[keyword.replace("freezeexception", "fe")].need_summary_post
|
| |
|
| |
- @pytest.mark.parametrize("keywords", powerset(pagure_bot.TRACKER_KEYWORDS))
|
| |
+ @pytest.mark.parametrize("keywords", powerset(EXTENDED_TRACKERS))
|
| |
def test_agreed_multiple_accepts_need_summary(self, keywords, setup_stubs):
|
| |
outcomes = " ".join(["accepted%s" % keyword for keyword in keywords])
|
| |
comments = [pagure_bot.Comment(c) for c in [
|
| |
@@ -414,9 +528,9 @@
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
for keyword in keywords:
|
| |
- assert trackers[keyword].need_summary_post
|
| |
+ assert trackers[keyword.replace("freezeexception", "fe")].need_summary_post
|
| |
|
| |
- @pytest.mark.parametrize("keywords", powerset(pagure_bot.TRACKER_KEYWORDS))
|
| |
+ @pytest.mark.parametrize("keywords", powerset(EXTENDED_TRACKERS))
|
| |
def test_agreed_multiple_accepts_no_justification_need_summary(self, keywords, setup_stubs):
|
| |
outcomes = " ".join(["accepted%s" % keyword for keyword in keywords])
|
| |
comments = [pagure_bot.Comment(c) for c in [
|
| |
@@ -431,9 +545,9 @@
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
for keyword in keywords:
|
| |
- assert trackers[keyword].need_summary_post
|
| |
+ assert trackers[keyword.replace("freezeexception", "fe")].need_summary_post
|
| |
|
| |
- @pytest.mark.parametrize("keywords", powerset(pagure_bot.TRACKER_KEYWORDS))
|
| |
+ @pytest.mark.parametrize("keywords", powerset(EXTENDED_TRACKERS))
|
| |
def test_agreed_multiple_accepts_has_summary(self, keywords, setup_stubs):
|
| |
outcomes = " ".join(["accepted%s" % keyword for keyword in keywords])
|
| |
comments = [pagure_bot.Comment(c) for c in [
|
| |
@@ -455,9 +569,9 @@
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
for keyword in keywords:
|
| |
- assert not trackers[keyword].need_summary_post
|
| |
+ assert not trackers[keyword.replace("freezeexception", "fe")].need_summary_post
|
| |
|
| |
- @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
+ @pytest.mark.parametrize("keyword", EXTENDED_TRACKERS)
|
| |
def test_revote_single(self, keyword, setup_stubs):
|
| |
comments = [pagure_bot.Comment(c) for c in [
|
| |
{
|
| |
@@ -491,12 +605,16 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {}
|
| |
- assert not trackers[keyword].need_summary_post
|
| |
+ assert trackers[keyword.replace("freezeexception", "fe")].votes == {}
|
| |
+ assert not trackers[keyword.replace("freezeexception", "fe")].need_summary_post
|
| |
|
| |
@pytest.mark.parametrize("keyword_a, keyword_b",
|
| |
- itertools.permutations(pagure_bot.TRACKER_KEYWORDS, 2))
|
| |
+ itertools.permutations(EXTENDED_TRACKERS, 2))
|
| |
def test_agreed_stops_counting_counts_other(self, keyword_a, keyword_b, setup_stubs):
|
| |
+ # if we hit two keywords which are synonyms for each other,
|
| |
+ # move on
|
| |
+ if keyword_a.replace("fe", "freezeexception") == keyword_b.replace("fe", "freezeexception"):
|
| |
+ return None
|
| |
comments = [pagure_bot.Comment(c) for c in [
|
| |
{
|
| |
'id': 1,
|
| |
@@ -522,13 +640,13 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword_a].votes == {
|
| |
+ assert trackers[keyword_a.replace("freezeexception", "fe")].votes == {
|
| |
stub_admin_user1: {
|
| |
'vote': '+1',
|
| |
'comment_id': 1
|
| |
}
|
| |
}
|
| |
- assert trackers[keyword_b].votes == {
|
| |
+ assert trackers[keyword_b.replace("freezeexception", "fe")].votes == {
|
| |
stub_admin_user1: {
|
| |
'vote': '+1',
|
| |
'comment_id': 1
|
| |
@@ -541,13 +659,36 @@
|
| |
|
| |
|
| |
class TestPagureBotWhitespaces(object):
|
| |
- @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
+ @pytest.mark.parametrize("inversed", [False, True])
|
| |
+ @pytest.mark.parametrize("keyword", EXTENDED_TRACKERS)
|
| |
+ @pytest.mark.parametrize("vote", ['+1', '-1', '0'])
|
| |
+ def test_trailing_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.replace("freezeexception", "fe")].votes == {
|
| |
+ stub_admin_user1: {
|
| |
+ 'vote': '%s' % vote,
|
| |
+ 'comment_id': 1
|
| |
+ }
|
| |
+ }
|
| |
+
|
| |
+ @pytest.mark.parametrize("inversed", [False, True])
|
| |
+ @pytest.mark.parametrize("keyword", EXTENDED_TRACKERS)
|
| |
@pytest.mark.parametrize("vote", ['+1', '-1', '0'])
|
| |
- def test_trailing_whitespace(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
|
| |
}
|
| |
@@ -555,20 +696,21 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {
|
| |
+ assert trackers[keyword.replace("freezeexception", "fe")].votes == {
|
| |
stub_admin_user1: {
|
| |
'vote': '%s' % vote,
|
| |
'comment_id': 1
|
| |
}
|
| |
}
|
| |
|
| |
- @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
+ @pytest.mark.parametrize("inversed", [False, True])
|
| |
+ @pytest.mark.parametrize("keyword", EXTENDED_TRACKERS)
|
| |
@pytest.mark.parametrize("vote", ['+1', '-1', '0'])
|
| |
- def test_whitespaces_inside_vote(self, vote, keyword):
|
| |
+ def test_whitespaces_inside_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
|
| |
}
|
| |
@@ -576,20 +718,66 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {
|
| |
+ assert trackers[keyword.replace("freezeexception", "fe")].votes == {
|
| |
stub_admin_user1: {
|
| |
'vote': '%s' % vote,
|
| |
'comment_id': 1
|
| |
}
|
| |
}
|
| |
|
| |
- @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
+ @pytest.mark.parametrize("inversed", [False, True])
|
| |
+ @pytest.mark.parametrize("keyword", EXTENDED_TRACKERS)
|
| |
@pytest.mark.parametrize("vote", ['+1', '-1', '0'])
|
| |
- def test_newline_inside_vote_ignored(self, vote, keyword):
|
| |
+ def test_trailing_leading_inside_whitespace(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.replace("freezeexception", "fe")].votes == {
|
| |
+ stub_admin_user1: {
|
| |
+ 'vote': '%s' % vote,
|
| |
+ 'comment_id': 1
|
| |
+ }
|
| |
+ }
|
| |
+
|
| |
+ @pytest.mark.parametrize("inversed", [False, True])
|
| |
+ @pytest.mark.parametrize("keyword", EXTENDED_TRACKERS)
|
| |
+ @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
|
| |
+ }
|
| |
+ }
|
| |
+ ]]
|
| |
+
|
| |
+ trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
+ assert trackers[keyword.replace("freezeexception", "fe")].votes == {}
|
| |
+
|
| |
+ @pytest.mark.parametrize("keyword", EXTENDED_TRACKERS)
|
| |
+ @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
|
| |
}
|
| |
@@ -597,9 +785,9 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {}
|
| |
+ assert trackers[keyword.replace("freezeexception", "fe")].need_summary_post
|
| |
|
| |
- @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
+ @pytest.mark.parametrize("keyword", EXTENDED_TRACKERS)
|
| |
@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 [
|
| |
@@ -620,9 +808,9 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].need_summary_post
|
| |
+ assert trackers[keyword.replace("freezeexception", "fe")].need_summary_post
|
| |
|
| |
- @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
+ @pytest.mark.parametrize("keyword", EXTENDED_TRACKERS)
|
| |
@pytest.mark.parametrize("outcome", ['Accepted', 'Rejected'])
|
| |
def test_agreed_single_acceptedrejected_multi_wspace_inside_needs_summary(self, outcome, keyword, setup_stubs):
|
| |
comments = [pagure_bot.Comment(c) for c in [
|
| |
@@ -635,7 +823,7 @@
|
| |
},
|
| |
{
|
| |
'id': 2,
|
| |
- 'comment': "AGREED %s%s foo bar " % (outcome, keyword),
|
| |
+ 'comment': " AGREED %s%s foo bar " % (outcome, keyword),
|
| |
'user': {
|
| |
'name': stub_admin_user1
|
| |
}
|
| |
@@ -643,9 +831,9 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].need_summary_post
|
| |
+ assert trackers[keyword.replace("freezeexception", "fe")].need_summary_post
|
| |
|
| |
- @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)
|
| |
+ @pytest.mark.parametrize("keyword", EXTENDED_TRACKERS)
|
| |
@pytest.mark.parametrize("outcome", ['Accepted', 'Rejected'])
|
| |
def test_agreed_single_acceptedrejected_newline_inside(self, outcome, keyword, setup_stubs):
|
| |
comments = [pagure_bot.Comment(c) for c in [
|
| |
@@ -666,9 +854,9 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert not trackers[keyword].need_summary_post
|
| |
+ assert not trackers[keyword.replace("freezeexception", "fe")].need_summary_post
|
| |
|
| |
- @pytest.mark.parametrize("keywords", powerset(pagure_bot.TRACKER_KEYWORDS))
|
| |
+ @pytest.mark.parametrize("keywords", powerset(EXTENDED_TRACKERS))
|
| |
def test_agreed_multiple_accepts_multi_wspace_inside_need_summary(self, keywords, setup_stubs):
|
| |
outcomes = " ".join(["accepted%s" % keyword for keyword in keywords])
|
| |
comments = [pagure_bot.Comment(c) for c in [
|
| |
@@ -683,7 +871,7 @@
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
for keyword in keywords:
|
| |
- assert trackers[keyword].need_summary_post
|
| |
+ assert trackers[keyword.replace("freezeexception", "fe")].need_summary_post
|
| |
|
| |
|
| |
class TestPagureBotHaywire(object):
|
| |
I'm somewhat concerned about this. It only works because we don't have the "fe" substring anywhere else in our keywords. But if we did, or if we change it in the future, this will start causing troubles. I'd rather make this change more systematic and safer. I'll add a patch.