#120 test_pagure_bot should not use network for tests
Closed 3 years ago by tflink. Opened 3 years ago by tflink.
fedora-qa/ tflink/blockerbugs feature/remove_network_from_pagure_bot_tests  into  develop

file modified
+89 -98
@@ -11,31 +11,49 @@ 

      s = list(iterable)

      return itertools.chain.from_iterable(itertools.combinations(s, r) for r in range(len(s) + 1))

  

+ stub_admin_user1 = "fakey"

+ stub_admin_user2 = "fakey2"

+ stub_group_data = {

+     "creator": {

+         "fullname": "Fakey McFakerson",

+         "name": stub_admin_user1,

+         "url_path": "user/{}".format(stub_admin_user1)

+     },

+     "date_created": "1470302104",

+     "description": "",

+     "display_name": "fake-group",

+     "group_type": "user",

+     "members": [

+         stub_admin_user1,

+         stub_admin_user2,

+         "fakey3",

+     ],

+     "name": "fake-group"

+ }

  

  @pytest.fixture

- def setup(monkeypatch):

-     monkeypatch.setattr(pagure_interface, 'post_comment', mock.MagicMock())

-     monkeypatch.setattr(pagure_interface, 'update_issue', mock.MagicMock())

+ def setup_stubs(monkeypatch):

+     stub_pagure_group_call = mock.MagicMock(return_value=stub_group_data)

+     monkeypatch.setattr(pagure_interface, 'get_group', stub_pagure_group_call)

  

  

  class TestPagureBotBasics(object):

      @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)

      @pytest.mark.parametrize("vote", ['+1', '-1', '0'])

      def test_basic_vote(self, vote, keyword):

-         user = 'lbrabec'

          comments = [pagure_bot.Comment(c) for c in [

              {

                  'id': 1,

                  'comment': "%s %s" % (keyword, vote),

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              }

          ]]

  

          trackers = pagure_bot.parse_comments_to_trackers(comments)

          assert trackers[keyword].votes == {

-             user: {

+             stub_admin_user1: {

                  'vote': '%s' % vote,

                  'comment_id': 1

              }
@@ -43,27 +61,26 @@ 

  

      @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)

      def test_basic_vote_repeated(self, keyword):

-         user = 'lbrabec'

          comments = [pagure_bot.Comment(c) for c in [

              {

                  'id': 1,

                  'comment': "%s +1" % keyword,

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              },

              {

                  'id': 2,

                  'comment': "%s -1" % keyword,

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              }

          ]]

  

          trackers = pagure_bot.parse_comments_to_trackers(comments)

          assert trackers[keyword].votes == {

-             user: {

+             stub_admin_user1: {

                  'vote': '-1',

                  'comment_id': 2

              }
@@ -74,7 +91,6 @@ 

      @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)

      @pytest.mark.parametrize("sign", ['+', '-'])

      def test_typo(self, sign, keyword):

-         user = 'lbrabec'

          keyword_typo = list(keyword)

          keyword_typo[1] = 'x'

          keyword_typo = "".join(keyword_typo)
@@ -83,7 +99,7 @@ 

                  'id': 1,

                  'comment': "%s %s1" % (keyword_typo, sign),

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              }

          ]]
@@ -96,13 +112,12 @@ 

      @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)

      @pytest.mark.parametrize("sign", ['+', '–'])  # these chars are not + or -

      def test_unicode_plus(self, sign, keyword):

-         user = 'lbrabec'

          comments = [pagure_bot.Comment(c) for c in [

              {

                  'id': 1,

                  'comment': "%s %s1" % (keyword, sign),

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              }

          ]]
@@ -118,7 +133,7 @@ 

                  'id': 1,

                  'comment': "%s %s11" % (keyword, sign),

                  'user': {

-                     'name': 'lbrabec'

+                     'name': stub_admin_user1

                  }

              }

          ]]
@@ -129,13 +144,12 @@ 

      @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)

      @pytest.mark.parametrize("sign", ['+', '-'])

      def test_plusminus_two(self, sign, keyword):

-         user = 'lbrabec'

          comments = [pagure_bot.Comment(c) for c in [

              {

                  'id': 1,

                  'comment': "%s %s2" % (keyword, sign),

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              }

          ]]
@@ -146,13 +160,12 @@ 

      @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)

      @pytest.mark.parametrize("sign", ['+', '-'])

      def test_plusminus_typo(self, sign, keyword):

-         user = 'lbrabec'

          comments = [pagure_bot.Comment(c) for c in [

              {

                  'id': 1,

                  'comment': "%s %s!" % (keyword, sign),

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              }

          ]]
@@ -163,13 +176,12 @@ 

      @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)

      @pytest.mark.parametrize("sign", ['+', '-'])

      def test_plusminus_float(self, sign, keyword):

-         user = 'lbrabec'

          comments = [pagure_bot.Comment(c) for c in [

              {

                  'id': 1,

                  'comment': "%s %s0.5" % (keyword, sign),

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              }

          ]]
@@ -180,13 +192,12 @@ 

      @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)

      @pytest.mark.parametrize("sign", ['+', '-'])

      def test_plusminus_emoji(self, sign, keyword):

-         user = 'lbrabec'

          comments = [pagure_bot.Comment(c) for c in [

              {

                  'id': 1,

                  'comment': "%s %s👎" % (keyword, sign),

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              }

          ]]
@@ -197,13 +208,12 @@ 

      @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)

      @pytest.mark.parametrize("sign", ['+', '-'])

      def test_plusminus_backtick(self, sign, keyword):

-         user = 'lbrabec'

          comments = [pagure_bot.Comment(c) for c in [

              {

                  'id': 1,

                  'comment': "`%s %s1`" % (keyword, sign),

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              }

          ]]
@@ -216,20 +226,19 @@ 

      @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)

      @pytest.mark.parametrize("sign", ['+', '-'])

      def test_multiline_singlevote(self, sign, keyword):

-         user = 'lbrabec'

          comments = [pagure_bot.Comment(c) for c in [

              {

                  'id': 1,

                  'comment': "foobar\n%s %s1\nbarbaz" % (keyword, sign),

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              }

          ]]

  

          trackers = pagure_bot.parse_comments_to_trackers(comments)

          assert trackers[keyword].votes == {

-             user: {

+             stub_admin_user1: {

                  'vote': '%s1' % sign,

                  'comment_id': 1

              }
@@ -239,7 +248,6 @@ 

      @pytest.mark.parametrize("vote", [('+1', '-1'), ('-1', '+1'), ('+1', '0'),

                                        ('-1', '0'), ('0', '-1'), ('0', '+1')])

      def test_multiline_multivote_same(self, vote, keyword):

-         user = 'lbrabec'

          vote_first = vote[0]

          vote_second = vote[1]

          comments = [pagure_bot.Comment(c) for c in [
@@ -248,14 +256,14 @@ 

                  'comment': "foobar\n%s %s\nbarbaz\n%s %s" % (keyword, vote_first,

                                                               keyword, vote_second),

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              }

          ]]

  

          trackers = pagure_bot.parse_comments_to_trackers(comments)

          assert trackers[keyword].votes == {

-             user: {

+             stub_admin_user1: {

                  'vote': '%s' % vote_second,

                  'comment_id': 1

              }
@@ -266,7 +274,6 @@ 

                                        ('-1', '0'), ('0', '-1'), ('0', '+1'),

                                        ('0', '0'), ('-1', '-1'), ('+1', '+1')])

      def test_multiline_multivote_different(self, vote, keyword):

-         user = 'lbrabec'

          keyword_first = keyword[0]

          keyword_second = keyword[1]

          vote_first = vote[0]
@@ -277,20 +284,20 @@ 

                  'comment': "foobar\n%s %s\nbarbaz\n%s %s" % (keyword_first, vote_first,

                                                               keyword_second, vote_second),

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              }

          ]]

  

          trackers = pagure_bot.parse_comments_to_trackers(comments)

          assert trackers[keyword_first].votes == {

-             user: {

+             stub_admin_user1: {

                  'vote': '%s' % vote_first,

                  'comment_id': 1

              }

          }

          assert trackers[keyword_second].votes == {

-             user: {

+             stub_admin_user1: {

                  'vote': '%s' % vote_second,

                  'comment_id': 1

              }
@@ -300,28 +307,27 @@ 

  class TestPagureBotAgreedRevote(object):

      @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)

      @pytest.mark.parametrize("outcome", ['Accepted', 'Rejected'])

-     def test_agreed_single_acceptedrejected_needs_summary(self, outcome, keyword):

-         user = 'lbrabec'

+     def test_agreed_single_acceptedrejected_needs_summary(self, outcome, keyword, setup_stubs):

          comments = [pagure_bot.Comment(c) for c in [

              {

                  'id': 1,

                  'comment': "%s +1" % keyword,

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              },

              {

                  'id': 2,

                  'comment': "AGREED %s%s foo bar" % (outcome, keyword),

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              }

          ]]

  

          trackers = pagure_bot.parse_comments_to_trackers(comments)

          assert trackers[keyword].votes == {

-             user: {

+             stub_admin_user1: {

                  'vote': '+1',

                  'comment_id': 1

              }
@@ -330,28 +336,27 @@ 

  

      @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)

      @pytest.mark.parametrize("outcome", ['Accepted', 'Rejected'])

-     def test_agreed_single_acceptedrejected_no_justification_needs_summary(self, outcome, keyword):

-         user = 'lbrabec'

+     def test_agreed_single_acceptedrejected_no_justification_needs_summary(self, outcome, keyword, setup_stubs):

          comments = [pagure_bot.Comment(c) for c in [

              {

                  'id': 1,

                  'comment': "%s +1" % keyword,

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              },

              {

                  'id': 2,

                  'comment': "AGREED %s%s" % (outcome, keyword),

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              }

          ]]

  

          trackers = pagure_bot.parse_comments_to_trackers(comments)

          assert trackers[keyword].votes == {

-             user: {

+             stub_admin_user1: {

                  'vote': '+1',

                  'comment_id': 1

              }
@@ -360,21 +365,20 @@ 

  

      @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)

      @pytest.mark.parametrize("outcome", ['Accepted', 'Rejected'])

-     def test_agreed_single_acceptedrejected_by_impostor_need_summary(self, outcome, keyword):

-         user = 'lbrabec'

+     def test_agreed_single_acceptedrejected_by_impostor_need_summary(self, outcome, keyword, setup_stubs):

          comments = [pagure_bot.Comment(c) for c in [

              {

                  'id': 1,

                  'comment': "%s +1" % keyword,

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              },

              {

                  'id': 2,

                  'comment': "AGREED %s%s foo bar" % (outcome, keyword),

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              },

              {
@@ -388,7 +392,7 @@ 

  

          trackers = pagure_bot.parse_comments_to_trackers(comments)

          assert trackers[keyword].votes == {

-             user: {

+             stub_admin_user1: {

                  'vote': '+1',

                  'comment_id': 1

              }
@@ -396,15 +400,14 @@ 

          assert trackers[keyword].need_summary_post

  

      @pytest.mark.parametrize("keywords", powerset(pagure_bot.TRACKER_KEYWORDS))

-     def test_agreed_multiple_accepts_need_summary(self, keywords):

-         user = 'lbrabec'

+     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 [

              {

                  'id': 1,

                  'comment': "AGREED %s foo bar" % outcomes,

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              },

          ]]
@@ -414,15 +417,14 @@ 

              assert trackers[keyword].need_summary_post

  

      @pytest.mark.parametrize("keywords", powerset(pagure_bot.TRACKER_KEYWORDS))

-     def test_agreed_multiple_accepts_no_justification_need_summary(self, keywords):

-         user = 'lbrabec'

+     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 [

              {

                  'id': 1,

                  'comment': "AGREED %s" % outcomes,

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              },

          ]]
@@ -432,15 +434,14 @@ 

              assert trackers[keyword].need_summary_post

  

      @pytest.mark.parametrize("keywords", powerset(pagure_bot.TRACKER_KEYWORDS))

-     def test_agreed_multiple_accepts_has_summary(self, keywords):

-         user = 'lbrabec'

+     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 [

              {

                  'id': 1,

                  'comment': "AGREED %s foo bar" % outcomes,

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              },

              {
@@ -457,21 +458,20 @@ 

              assert not trackers[keyword].need_summary_post

  

      @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)

-     def test_revote_single(self, keyword):

-         user = 'lbrabec'

+     def test_revote_single(self, keyword, setup_stubs):

          comments = [pagure_bot.Comment(c) for c in [

              {

                  'id': 1,

                  'comment': "%s +1" % keyword,

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              },

              {

                  'id': 2,

                  'comment': "AGREED Accepted%s foo bar" % keyword,

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              },

              {
@@ -485,7 +485,7 @@ 

                  'id': 3,

                  'comment': "REVOTE %s" % keyword,

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              }

          ]]
@@ -496,46 +496,44 @@ 

  

      @pytest.mark.parametrize("keyword_a, keyword_b",

                               itertools.permutations(pagure_bot.TRACKER_KEYWORDS, 2))

-     def test_agreed_stops_counting_counts_other(self, keyword_a, keyword_b):

-         user1 = 'lbrabec'

-         user2 = 'jskladan'

+     def test_agreed_stops_counting_counts_other(self, keyword_a, keyword_b, setup_stubs):

          comments = [pagure_bot.Comment(c) for c in [

              {

                  'id': 1,

                  'comment': "%s +1\n%s +1" % (keyword_a, keyword_b),

                  'user': {

-                     'name': user1

+                     'name': stub_admin_user1

                  }

              },

              {

                  'id': 2,

                  'comment': "AGREED Accepted%s foo bar" % keyword_a,

                  'user': {

-                     'name': user1

+                     'name': stub_admin_user1

                  }

              },

              {

                  'id': 3,

                  'comment': "%s +1\n%s +1" % (keyword_a, keyword_b),

                  'user': {

-                     'name': user2

+                     'name': stub_admin_user2

                  }

              },

          ]]

  

          trackers = pagure_bot.parse_comments_to_trackers(comments)

          assert trackers[keyword_a].votes == {

-             user1: {

+             stub_admin_user1: {

                  'vote': '+1',

                  'comment_id': 1

              }

          }

          assert trackers[keyword_b].votes == {

-             user1: {

+             stub_admin_user1: {

                  'vote': '+1',

                  'comment_id': 1

              },

-             user2: {

+             stub_admin_user2: {

                  'vote': '+1',

                  'comment_id': 3

              }
@@ -546,20 +544,19 @@ 

      @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)

      @pytest.mark.parametrize("vote", ['+1', '-1', '0'])

      def test_trailing_whitespace(self, vote, keyword):

-         user = 'lbrabec'

          comments = [pagure_bot.Comment(c) for c in [

              {

                  'id': 1,

                  'comment': "%s %s " % (keyword, vote),

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              }

          ]]

  

          trackers = pagure_bot.parse_comments_to_trackers(comments)

          assert trackers[keyword].votes == {

-             user: {

+             stub_admin_user1: {

                  'vote': '%s' % vote,

                  'comment_id': 1

              }
@@ -568,20 +565,19 @@ 

      @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)

      @pytest.mark.parametrize("vote", ['+1', '-1', '0'])

      def test_whitespaces_inside_vote(self, vote, keyword):

-         user = 'lbrabec'

          comments = [pagure_bot.Comment(c) for c in [

              {

                  'id': 1,

                  'comment': "%s    %s" % (keyword, vote),

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              }

          ]]

  

          trackers = pagure_bot.parse_comments_to_trackers(comments)

          assert trackers[keyword].votes == {

-             user: {

+             stub_admin_user1: {

                  'vote': '%s' % vote,

                  'comment_id': 1

              }
@@ -590,13 +586,12 @@ 

      @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)

      @pytest.mark.parametrize("vote", ['+1', '-1', '0'])

      def test_newline_inside_vote_ignored(self, vote, keyword):

-         user = 'lbrabec'

          comments = [pagure_bot.Comment(c) for c in [

              {

                  'id': 1,

                  'comment': "%s\n%s" % (keyword, vote),

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              }

          ]]
@@ -606,21 +601,20 @@ 

  

      @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):

-         user = 'lbrabec'

+     def test_agreed_single_acceptedrejected_trailing_wspace_needs_summary(self, outcome, keyword, setup_stubs):

          comments = [pagure_bot.Comment(c) for c in [

              {

                  'id': 1,

                  'comment': "%s +1" % keyword,

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              },

              {

                  'id': 2,

                  'comment': "AGREED %s%s foo bar   " % (outcome, keyword),

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              }

          ]]
@@ -630,21 +624,20 @@ 

  

      @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)

      @pytest.mark.parametrize("outcome", ['Accepted', 'Rejected'])

-     def test_agreed_single_acceptedrejected_multi_wspace_inside_needs_summary(self, outcome, keyword):

-         user = 'lbrabec'

+     def test_agreed_single_acceptedrejected_multi_wspace_inside_needs_summary(self, outcome, keyword, setup_stubs):

          comments = [pagure_bot.Comment(c) for c in [

              {

                  'id': 1,

                  'comment': "%s +1" % keyword,

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              },

              {

                  'id': 2,

                  'comment': "AGREED     %s%s foo bar   " % (outcome, keyword),

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              }

          ]]
@@ -654,21 +647,20 @@ 

  

      @pytest.mark.parametrize("keyword", pagure_bot.TRACKER_KEYWORDS)

      @pytest.mark.parametrize("outcome", ['Accepted', 'Rejected'])

-     def test_agreed_single_acceptedrejected_newline_inside(self, outcome, keyword):

-         user = 'lbrabec'

+     def test_agreed_single_acceptedrejected_newline_inside(self, outcome, keyword, setup_stubs):

          comments = [pagure_bot.Comment(c) for c in [

              {

                  'id': 1,

                  'comment': "%s +1" % keyword,

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              },

              {

                  'id': 2,

                  'comment': "AGREED\n%s%s foo bar" % (outcome, keyword),

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              }

          ]]
@@ -677,15 +669,14 @@ 

          assert not trackers[keyword].need_summary_post

  

      @pytest.mark.parametrize("keywords", powerset(pagure_bot.TRACKER_KEYWORDS))

-     def test_agreed_multiple_accepts_multi_wspace_inside_need_summary(self, keywords):

-         user = 'lbrabec'

+     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 [

              {

                  'id': 1,

                  'comment': "AGREED %s foo bar" % outcomes,

                  'user': {

-                     'name': user

+                     'name': stub_admin_user1

                  }

              },

          ]]
@@ -776,7 +767,7 @@ 

                  'id': app.config['PAGURE_BOT_LOOP_THRESHOLD'] + 1,

                  'comment': "Pls stop!",

                  'user': {

-                     'name': 'lbrabec'

+                     'name': stub_admin_user1

                  }

              }

          ]
@@ -896,7 +887,7 @@ 

  ]

  

  class TestPagureBotRealWorld(object):

-     def test_realworld(self):

+     def test_realworld(self, setup_stubs):

          comments = [pagure_bot.Comment(c) for c in realworld_comments]

          trackers = pagure_bot.parse_comments_to_trackers(comments)

          non_voting_users, last_comment_id = pagure_bot.voting_info(comments, trackers)

This is a relatively straight-forward change to do the following:

  • rework the setup fixture to do what is needed and no more
  • rename setup fixture function to be more descriptive
  • when appropriate, use stub data defined once that doesn't match real-world data
  • add setup fixture to all of the tests that were failing due to lack of network access

With these changes, the tests are no longer reaching out to any pagure instances. They should run much faster and have no issues with external resources.

Pull-Request has been closed by tflink

3 years ago
Metadata