| |
@@ -6,6 +6,7 @@
|
| |
from blockerbugs.util import pagure_interface
|
| |
from blockerbugs.util import pagure_bot
|
| |
|
| |
+ EXTENDED_TRACKERS = pagure_bot.TRACKER_KEYWORDS + ["betafe", "finalfe"]
|
| |
|
| |
def powerset(iterable):
|
| |
s = list(iterable)
|
| |
@@ -31,6 +32,14 @@
|
| |
"name": "fake-group"
|
| |
}
|
| |
|
| |
+ def expand_fe(tracker):
|
| |
+ if tracker == 'betafe':
|
| |
+ return 'betafreezeexception'
|
| |
+ elif tracker == 'finalfe':
|
| |
+ return 'finalfreezeexception'
|
| |
+ else:
|
| |
+ return tracker
|
| |
+
|
| |
@pytest.fixture
|
| |
def setup_stubs(monkeypatch):
|
| |
stub_pagure_group_call = mock.MagicMock(return_value=stub_group_data)
|
| |
@@ -38,13 +47,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 +62,14 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {
|
| |
+ assert trackers[expand_fe(keyword)].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 +89,7 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {
|
| |
+ assert trackers[expand_fe(keyword)].votes == {
|
| |
stub_admin_user1: {
|
| |
'vote': '-1',
|
| |
'comment_id': 2
|
| |
@@ -88,7 +98,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 +115,48 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {}
|
| |
+ assert trackers[expand_fe(keyword)].votes == {}
|
| |
+
|
| |
+ def test_multivote_extra_comma(self):
|
| |
+ comments = [pagure_bot.Comment(c) for c in [
|
| |
+ {
|
| |
+ 'id': 1,
|
| |
+ 'comment': "BetaBlocker -1 BetaFE +1, FinalBocker -1",
|
| |
+ 'user': {
|
| |
+ 'name': stub_admin_user1
|
| |
+ }
|
| |
+ }
|
| |
+ ]]
|
| |
+
|
| |
+ trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
+ for tracker in trackers.values():
|
| |
+ assert tracker.votes == {}
|
| |
+
|
| |
+ def test_multivote_extra_vote(self):
|
| |
+ comments = [pagure_bot.Comment(c) for c in [
|
| |
+ {
|
| |
+ 'id': 1,
|
| |
+ 'comment': "BetaBlocker -1 +1 FinalBlocker -1 BetaFE -1",
|
| |
+ 'user': {
|
| |
+ 'name': stub_admin_user1
|
| |
+ }
|
| |
+ }
|
| |
+ ]]
|
| |
+
|
| |
+ trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
+ for tracker in trackers.values():
|
| |
+ assert tracker.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 +164,16 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {}
|
| |
+ assert trackers[expand_fe(keyword)].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 +181,16 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {}
|
| |
+ assert trackers[expand_fe(keyword)].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 +198,16 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {}
|
| |
+ assert trackers[expand_fe(keyword)].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 +215,16 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {}
|
| |
+ assert trackers[expand_fe(keyword)].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 +232,16 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {}
|
| |
+ assert trackers[expand_fe(keyword)].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 +249,16 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {}
|
| |
+ assert trackers[expand_fe(keyword)].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 +266,18 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {}
|
| |
+ assert trackers[expand_fe(keyword)].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 +285,96 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {
|
| |
+ assert trackers[expand_fe(keyword)].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, 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" % (first + second),
|
| |
+ 'user': {
|
| |
+ 'name': stub_admin_user1
|
| |
+ }
|
| |
+ }
|
| |
+ ]]
|
| |
+
|
| |
+ trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
+ assert trackers[expand_fe(keyword)].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_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" % (first + second),
|
| |
+ 'user': {
|
| |
+ 'name': stub_admin_user1
|
| |
+ }
|
| |
+ }
|
| |
+ ]]
|
| |
+
|
| |
+ trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
+ assert trackers[expand_fe(keyword_first)].votes == {
|
| |
+ stub_admin_user1: {
|
| |
+ 'vote': '%s' % vote_first,
|
| |
+ 'comment_id': 1
|
| |
+ }
|
| |
+ }
|
| |
+ assert trackers[expand_fe(keyword_second)].votes == {
|
| |
+ stub_admin_user1: {
|
| |
+ 'vote': '%s' % vote_second,
|
| |
+ 'comment_id': 1
|
| |
+ }
|
| |
+ }
|
| |
+
|
| |
+
|
| |
+ 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_multiline_multivote_same(self, vote, keyword):
|
| |
+ 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,
|
| |
- 'comment': "foobar\n%s %s\nbarbaz\n%s %s" % (keyword, vote_first,
|
| |
- keyword, vote_second),
|
| |
+ # Votes should be accepted with second taking precedence
|
| |
+ 'comment': "%s %s %s %s" % (first + second),
|
| |
'user': {
|
| |
'name': stub_admin_user1
|
| |
}
|
| |
@@ -262,27 +382,34 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {
|
| |
+ assert trackers[expand_fe(keyword)].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_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,
|
| |
- 'comment': "foobar\n%s %s\nbarbaz\n%s %s" % (keyword_first, vote_first,
|
| |
- keyword_second, vote_second),
|
| |
+ # Both votes should be accepted
|
| |
+ 'comment': "%s %s %s %s" % (first + second),
|
| |
'user': {
|
| |
'name': stub_admin_user1
|
| |
}
|
| |
@@ -290,22 +417,78 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword_first].votes == {
|
| |
+ assert trackers[expand_fe(keyword_first)].votes == {
|
| |
stub_admin_user1: {
|
| |
'vote': '%s' % vote_first,
|
| |
'comment_id': 1
|
| |
}
|
| |
}
|
| |
- assert trackers[keyword_second].votes == {
|
| |
+ assert trackers[expand_fe(keyword_second)].votes == {
|
| |
stub_admin_user1: {
|
| |
'vote': '%s' % vote_second,
|
| |
'comment_id': 1
|
| |
}
|
| |
}
|
| |
|
| |
+ def test_singleline_multivote_three_votes_two_inversed(self):
|
| |
+ comments = [pagure_bot.Comment(c) for c in [
|
| |
+ {
|
| |
+ 'id': 1,
|
| |
+ 'comment': "BetaBlocker -1 +1 FinalBlocker +1 BetaFE",
|
| |
+ 'user': {
|
| |
+ 'name': stub_admin_user1
|
| |
+ }
|
| |
+ }
|
| |
+ ]]
|
| |
+
|
| |
+ trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
+ assert trackers['betablocker'].votes == {
|
| |
+ stub_admin_user1: {
|
| |
+ 'vote': '-1',
|
| |
+ 'comment_id': 1
|
| |
+ }
|
| |
+ }
|
| |
+ assert trackers['finalblocker'].votes == {
|
| |
+ stub_admin_user1: {
|
| |
+ 'vote': '+1',
|
| |
+ 'comment_id': 1
|
| |
+ }
|
| |
+ }
|
| |
+ assert trackers['betafreezeexception'].votes == {
|
| |
+ stub_admin_user1: {
|
| |
+ 'vote': '+1',
|
| |
+ '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 +509,15 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {
|
| |
+ assert trackers[expand_fe(keyword)].votes == {
|
| |
stub_admin_user1: {
|
| |
'vote': '+1',
|
| |
'comment_id': 1
|
| |
}
|
| |
}
|
| |
- assert trackers[keyword].need_summary_post
|
| |
+ assert trackers[expand_fe(keyword)].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 +538,15 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {
|
| |
+ assert trackers[expand_fe(keyword)].votes == {
|
| |
stub_admin_user1: {
|
| |
'vote': '+1',
|
| |
'comment_id': 1
|
| |
}
|
| |
}
|
| |
- assert trackers[keyword].need_summary_post
|
| |
+ assert trackers[expand_fe(keyword)].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 [
|
| |
@@ -383,7 +566,7 @@
|
| |
},
|
| |
{
|
| |
'id': 3,
|
| |
- 'comment': "%s\n%s" % (pagure_bot.CLOSED_VOTES_HEADER, keyword),
|
| |
+ 'comment': "%s\n%s" % (pagure_bot.CLOSED_VOTES_HEADER, expand_fe(keyword)),
|
| |
'user': {
|
| |
'name': 'impostor'
|
| |
}
|
| |
@@ -391,15 +574,15 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {
|
| |
+ assert trackers[expand_fe(keyword)].votes == {
|
| |
stub_admin_user1: {
|
| |
'vote': '+1',
|
| |
'comment_id': 1
|
| |
}
|
| |
}
|
| |
- assert trackers[keyword].need_summary_post
|
| |
+ assert trackers[expand_fe(keyword)].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 +597,9 @@
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
for keyword in keywords:
|
| |
- assert trackers[keyword].need_summary_post
|
| |
+ assert trackers[expand_fe(keyword)].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 +614,9 @@
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
for keyword in keywords:
|
| |
- assert trackers[keyword].need_summary_post
|
| |
+ assert trackers[expand_fe(keyword)].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 [
|
| |
@@ -446,7 +629,8 @@
|
| |
},
|
| |
{
|
| |
'id': 2,
|
| |
- 'comment': "%s\n%s" % (pagure_bot.CLOSED_VOTES_HEADER, "\n".join(keywords)),
|
| |
+ 'comment': "%s\n%s" % (pagure_bot.CLOSED_VOTES_HEADER,
|
| |
+ "\n".join([expand_fe(keyword) for keyword in keywords])),
|
| |
'user': {
|
| |
'name': app.config['PAGURE_BOT_USERNAME']
|
| |
}
|
| |
@@ -455,9 +639,9 @@
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
for keyword in keywords:
|
| |
- assert not trackers[keyword].need_summary_post
|
| |
+ assert not trackers[expand_fe(keyword)].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 [
|
| |
{
|
| |
@@ -475,13 +659,46 @@
|
| |
}
|
| |
},
|
| |
{
|
| |
- 'id': 2,
|
| |
- 'comment': "%s\n%s" % (pagure_bot.CLOSED_VOTES_HEADER, keyword),
|
| |
+ 'id': 3,
|
| |
+ 'comment': "%s\n%s" % (pagure_bot.CLOSED_VOTES_HEADER, expand_fe(keyword)),
|
| |
'user': {
|
| |
'name': app.config['PAGURE_BOT_USERNAME']
|
| |
}
|
| |
},
|
| |
{
|
| |
+ 'id': 4,
|
| |
+ 'comment': "REVOTE %s" % keyword,
|
| |
+ 'user': {
|
| |
+ 'name': stub_admin_user1
|
| |
+ }
|
| |
+ }
|
| |
+ ]]
|
| |
+
|
| |
+ trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
+ assert trackers[expand_fe(keyword)].votes == {}
|
| |
+ assert not trackers[expand_fe(keyword)].need_summary_post
|
| |
+
|
| |
+ @pytest.mark.parametrize("keyword", EXTENDED_TRACKERS)
|
| |
+ def test_revote_without_previous_summary(self, keyword, setup_stubs):
|
| |
+ '''If the summary didn't arrive in time and the tracker got revoted in
|
| |
+ the meantime, no need to supply summary anymore.
|
| |
+ '''
|
| |
+ comments = [pagure_bot.Comment(c) for c in [
|
| |
+ {
|
| |
+ 'id': 1,
|
| |
+ 'comment': "%s +1" % keyword,
|
| |
+ 'user': {
|
| |
+ 'name': stub_admin_user1
|
| |
+ }
|
| |
+ },
|
| |
+ {
|
| |
+ 'id': 2,
|
| |
+ 'comment': "AGREED Accepted%s foo bar" % keyword,
|
| |
+ 'user': {
|
| |
+ 'name': stub_admin_user1
|
| |
+ }
|
| |
+ },
|
| |
+ {
|
| |
'id': 3,
|
| |
'comment': "REVOTE %s" % keyword,
|
| |
'user': {
|
| |
@@ -491,12 +708,16 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {}
|
| |
- assert not trackers[keyword].need_summary_post
|
| |
+ assert trackers[expand_fe(keyword)].votes == {}
|
| |
+ assert not trackers[expand_fe(keyword)].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 +743,13 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword_a].votes == {
|
| |
+ assert trackers[expand_fe(keyword_a)].votes == {
|
| |
stub_admin_user1: {
|
| |
'vote': '+1',
|
| |
'comment_id': 1
|
| |
}
|
| |
}
|
| |
- assert trackers[keyword_b].votes == {
|
| |
+ assert trackers[expand_fe(keyword_b)].votes == {
|
| |
stub_admin_user1: {
|
| |
'vote': '+1',
|
| |
'comment_id': 1
|
| |
@@ -541,13 +762,58 @@
|
| |
|
| |
|
| |
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[expand_fe(keyword)].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_leading_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[expand_fe(keyword)].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_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
|
| |
}
|
| |
@@ -555,20 +821,21 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {
|
| |
+ assert trackers[expand_fe(keyword)].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_trailing_leading_inside_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
|
| |
}
|
| |
@@ -576,20 +843,44 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {
|
| |
+ assert trackers[expand_fe(keyword)].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_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[expand_fe(keyword)].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\n%s" % (keyword, vote),
|
| |
+ '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 +888,9 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].votes == {}
|
| |
+ assert trackers[expand_fe(keyword)].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 +911,9 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].need_summary_post
|
| |
+ assert trackers[expand_fe(keyword)].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 +926,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 +934,9 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert trackers[keyword].need_summary_post
|
| |
+ assert trackers[expand_fe(keyword)].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 +957,9 @@
|
| |
]]
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
- assert not trackers[keyword].need_summary_post
|
| |
+ assert not trackers[expand_fe(keyword)].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 +974,7 @@
|
| |
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
for keyword in keywords:
|
| |
- assert trackers[keyword].need_summary_post
|
| |
+ assert trackers[expand_fe(keyword)].need_summary_post
|
| |
|
| |
|
| |
class TestPagureBotHaywire(object):
|
| |
@@ -776,119 +1067,81 @@
|
| |
assert not pagure_bot.bot_loop_detected(comments)
|
| |
|
| |
|
| |
- realworld_comments = [
|
| |
- {
|
| |
- "comment": "bork bork\r\nFinalBlocker +1\r\nBetaBlocker -1",
|
| |
- "id": 1,
|
| |
- "user": {
|
| |
- "name": "lbrabec"
|
| |
- }
|
| |
- },
|
| |
- {
|
| |
- "comment": "Obvious\r\nFinalBlocker +1\r\nBetaFE +1\r\n\r\nBut I don't like that much:\r\n"
|
| |
+ class TestPagureBotRealWorld(object):
|
| |
+
|
| |
+ realworld_comments = [
|
| |
+ {"comment": "bork bork\r\nFinalBlocker +1\r\nBetaBlocker -1",
|
| |
+ "id": 1,
|
| |
+ "user": {"name": "lbrabec"}
|
| |
+ },
|
| |
+ {"comment": "Obvious\r\nFinalBlocker +1\r\nBetaFE +1\r\n\r\nBut I don't like that much:\r\n"
|
| |
"BetaBlocker -1\r\n\r\nFor FinalFE, gee, I don't know:\r\nFinalFE 0",
|
| |
- "id": 2,
|
| |
- "user": {
|
| |
- "name": "kparal"
|
| |
- }
|
| |
- },
|
| |
- {
|
| |
- "comment": "Y'all are insane. Foo is working great for me and I'm ashamed that this"
|
| |
+ "id": 2,
|
| |
+ "user": {"name": "kparal"}
|
| |
+ },
|
| |
+ {"comment": "Y'all are insane. Foo is working great for me and I'm ashamed that this"
|
| |
"was ever considered to be a blocker.\r\n\r\nFinalBlocker -1\r\n"
|
| |
"BetaBlocker -1\r\nBetaFE -1\r\nOP -1",
|
| |
- "id": 3,
|
| |
- "user": {
|
| |
- "name": "tflink"
|
| |
- }
|
| |
- },
|
| |
- {
|
| |
- "comment": "On the off chance that my vote could be counted twice ...\r\n\r\n"
|
| |
+ "id": 3,
|
| |
+ "user": {"name": "tflink"}
|
| |
+ },
|
| |
+ {"comment": "On the off chance that my vote could be counted twice ...\r\n\r\n"
|
| |
"FinalBlocker -1\r\nAlphaBlocker -2",
|
| |
- "id": 4,
|
| |
- "user": {
|
| |
- "name": "tflink"
|
| |
- }
|
| |
- },
|
| |
- {
|
| |
- "comment": "or maybe I'm wrong .... but that's never happened before in all "
|
| |
+ "id": 4,
|
| |
+ "user": {"name": "tflink"}
|
| |
+ },
|
| |
+ {"comment": "or maybe I'm wrong .... but that's never happened before in all "
|
| |
"of recorded history\r\n\r\nBetaFE +1\r\nBetaBlocker +!",
|
| |
- "id": 5,
|
| |
- "user": {
|
| |
- "name": "tflink"
|
| |
- }
|
| |
- },
|
| |
- {
|
| |
- "comment": "Yeah, those who vote against it do not deserve to use Fedora, "
|
| |
+ "id": 5,
|
| |
+ "user": {"name": "tflink"}
|
| |
+ },
|
| |
+ {"comment": "Yeah, those who vote against it do not deserve to use Fedora, "
|
| |
"go to Windows.\r\n\r\nBetaBlocker +1\r\nFinalBlocker +1\r\n"
|
| |
"BetaFE +1\r\nFinalFE +1",
|
| |
- "id": 6,
|
| |
- "user": {
|
| |
- "name": "lruzicka"
|
| |
- }
|
| |
- },
|
| |
- {
|
| |
- "comment": "Let's be sneaky\r\n`PreviousRelease +1`\r\n\r\n"
|
| |
+ "id": 6,
|
| |
+ "user": {"name": "lruzicka"}
|
| |
+ },
|
| |
+ {"comment": "Let's be sneaky\r\n`PreviousRelease +1`\r\n\r\n"
|
| |
"And\r\n```\r\n0Day 0\r\n```",
|
| |
- "id": 7,
|
| |
- "user": {
|
| |
- "name": "kparal"
|
| |
- }
|
| |
- },
|
| |
- {
|
| |
- "comment": "日本語で書いたら壊しますか\r\n\r\nBetaFE 👎\r\nFinalBlocker: +1\r\n\r\nBetaBlocker: +1",
|
| |
- "id": 8,
|
| |
- "user": {
|
| |
- "name": "tflink"
|
| |
- }
|
| |
- },
|
| |
- {
|
| |
- "comment": "Nejkulatoulinkatejsi kulicka",
|
| |
- "id": 9,
|
| |
- "user": {
|
| |
- "name": "jskladan"
|
| |
- }
|
| |
- },
|
| |
- {
|
| |
- "comment": "AGREED AcceptedFinalBlocker Lorem ipsum dolor sit amet",
|
| |
- "id": 11,
|
| |
- "user": {
|
| |
- "name": "lbrabec"
|
| |
- }
|
| |
- },
|
| |
- {
|
| |
- "comment": "The following votes have been closed:\n\n"
|
| |
+ "id": 7,
|
| |
+ "user": {"name": "kparal"}
|
| |
+ },
|
| |
+ {"comment": "日本語で書いたら壊しますか\r\n\r\nBetaFE 👎\r\nFinalBlocker: +1\r\n\r\nBetaBlocker: +1",
|
| |
+ "id": 8,
|
| |
+ "user": {"name": "tflink"}
|
| |
+ },
|
| |
+ {"comment": "Nejkulatoulinkatejsi kulicka",
|
| |
+ "id": 9,
|
| |
+ "user": {"name": "jskladan"}
|
| |
+ },
|
| |
+ {"comment": "AGREED AcceptedFinalBlocker Lorem ipsum dolor sit amet",
|
| |
+ "id": 11,
|
| |
+ "user": {"name": "lbrabec"}
|
| |
+ },
|
| |
+ {"comment": "The following votes have been closed:\n\n"
|
| |
"* **Accepted** FinalBlocker (**+3**, 0, **-1**)\n"
|
| |
" * +1 by [lbrabec](#comment-1), [kparal](#comment-2), "
|
| |
"[lruzicka](#comment-6)\n"
|
| |
" * -1 by [tflink](#comment-4)\n",
|
| |
- "id": 12,
|
| |
- "user": {
|
| |
- "name": "blockerbot"
|
| |
- }
|
| |
- },
|
| |
- {
|
| |
- "comment": "AGREED RejectedBetaBlocker Lorem ipsum dolor sit amet",
|
| |
- "id": 13,
|
| |
- "user": {
|
| |
- "name": "lbrabec"
|
| |
- }
|
| |
- },
|
| |
- {
|
| |
- "comment": "The following votes have been closed:\n\n"
|
| |
+ "id": 12,
|
| |
+ "user": {"name": "blockerbot"}
|
| |
+ },
|
| |
+ {"comment": "AGREED RejectedBetaBlocker Lorem ipsum dolor sit amet",
|
| |
+ "id": 13,
|
| |
+ "user": {"name": "lbrabec"}
|
| |
+ },
|
| |
+ {"comment": "The following votes have been closed:\n\n"
|
| |
"* **Rejected** BetaBlocker (**+1**, 0, **-3**)\n"
|
| |
" * +1 by [lruzicka](#comment-6)\n"
|
| |
" * -1 by [lbrabec](#comment-1), [kparal](#comment-2), "
|
| |
"[tflink](#comment-3)\n",
|
| |
- "id": 14,
|
| |
- "user": {
|
| |
- "name": "blockerbot"
|
| |
- }
|
| |
- }
|
| |
- ]
|
| |
+ "id": 14,
|
| |
+ "user": {"name": "blockerbot"}
|
| |
+ }
|
| |
+ ]
|
| |
|
| |
- class TestPagureBotRealWorld(object):
|
| |
def test_realworld(self, setup_stubs):
|
| |
- comments = [pagure_bot.Comment(c) for c in realworld_comments]
|
| |
+ comments = [pagure_bot.Comment(c) for c in self.realworld_comments]
|
| |
trackers = pagure_bot.parse_comments_to_trackers(comments)
|
| |
non_voting_users, last_comment_id = pagure_bot.voting_info(comments, trackers)
|
| |
|
| |
@@ -930,7 +1183,7 @@
|
| |
'comment_id': 3
|
| |
}
|
| |
}
|
| |
- assert trackers['betafe'].votes == {
|
| |
+ assert trackers['betafreezeexception'].votes == {
|
| |
'kparal': {
|
| |
'vote': '+1',
|
| |
'comment_id': 2
|
| |
@@ -944,7 +1197,7 @@
|