Ejemplo n.º 1
0
    def test_owner_pr_module_utils_and_modules_updated_submitter_maintainer_2(self):
        """
        PR updates 2 files (one below modules, the other below module_utils),
        submitter is a maintainer from both, check that owner_pr is set.
        Submitter is maintainer from module_utils file.
        """
        BOTMETA = u"""
        ---
        macros:
            modules: lib/ansible/modules
            module_utils: lib/ansible/module_utils
        files:
            $modules/foo/bar.py:
                maintainers: ElsA ZaZa
            $module_utils/baz/bar.py:
                maintainers: TiTi mscherer
        """

        modules = {u'lib/ansible/modules/foo/bar.py': None}
        module_indexer = create_indexer(textwrap.dedent(BOTMETA), modules)

        self.assertEqual(len(module_indexer.modules), 2)  # ensure only fake data are loaded
        self.assertEqual(sorted(module_indexer.botmeta[u'files'][u'lib/ansible/modules/foo/bar.py'][u'maintainers']), [u'ElsA', u'ZaZa'])
        self.assertEqual(sorted(module_indexer.botmeta[u'files'][u'lib/ansible/module_utils/baz/bar.py'][u'maintainers']), [u'TiTi', u'mscherer'])

        CM = ComponentMatcherMock()
        CM.expected_results = [
            {
                u'repo_filename': u'lib/ansible/module_utils/foo/bar.py',
                u'labels': [],
                u'support': None,
                u'maintainers': [u'ElsA', u'mscherer'],
                u'notify': [u'ElsA', u'mscherer'],
                u'ignore': [],
            },
            {
                u'repo_filename': u'lib/ansible/modules/baz/bar.py',
                u'labels': [],
                u'support': None,
                u'maintainers': [u'TiTi', u'ZaZa'],
                u'notify': [u'TiTi', u'ZaZa'],
                u'ignore': [],
            }
        ]

        meta = self.meta.copy()

        datafile = u'tests/fixtures/shipit/0_issue.yml'
        statusfile = u'tests/fixtures/shipit/0_prstatus.json'
        with get_issue(datafile, statusfile) as iw:
            iw.pr_files = [
                MockFile(u'lib/ansible/modules/foo/bar.py'),
                MockFile(u'lib/ansible/module_utils/baz/bar.py')
            ]
            iw.file_indexer = FileIndexerMock()
            meta.update(get_component_match_facts(iw, CM, []))
            facts = get_shipit_facts(iw, meta, module_indexer, core_team=[u'bcoca'], botnames=[u'ansibot'])

        self.assertEqual(iw.submitter, u'mscherer')
        self.assertFalse(facts[u'owner_pr'])
Ejemplo n.º 2
0
    def testshipit_with_noncore_rebuild_merge(self):
        # a !core rebuild_merge should not be a shipit?
        IW = IssueWrapperMock('ansible', 'ansible', 1)
        IW._is_pullrequest = True
        IW.add_file(u'foo', u'')
        IW.add_comment('jane', 'shipit')
        IW.add_comment('z', 'rebuild_merge')
        MI = ModuleIndexerMock([])
        meta = {
            u'is_module_util': False,
            u'is_new_module': False,
            u'is_needs_rebase': False,
            u'is_needs_revision': False,
            u'component_maintainers': [u'jane', u'doe'],
            u'component_matches': [
                {u'repo_filename': u'foo', u'maintainers': [u'jane', u'doe']}
            ]
        }
        core_team = ['x']
        sfacts = get_shipit_facts(IW, meta, MI, core_team=core_team)

        assert not sfacts[u'shipit']
        assert not sfacts[u'supershipit']
        assert not sfacts[u'supershipit_actors']
        assert sfacts[u'shipit_actors'] == [u'jane']
        assert sfacts[u'shipit_actors_other'] == [u'z']
        assert sfacts[u'shipit_count_ansible'] == 0
        assert sfacts[u'shipit_count_maintainer'] == 1
        assert sfacts[u'shipit_count_other'] == 1
        assert sfacts[u'shipit_count_vtotal'] == 2
Ejemplo n.º 3
0
    def test_owner_pr_submitter_is_not_maintainer_of_all_updated_files(self):
        """
        PR updates 2 files below module_utils, submitter is a maintainer from only one: ensure owner_pr isn't set
        """
        BOTMETA = u"""
        ---
        macros:
            modules: lib/ansible/modules
            module_utils: lib/ansible/module_utils
        files:
            $module_utils/foo/bar.py:
                maintainers: ElsA Oliver
            $module_utils/baz/bar.py:
                maintainers: TiTi ZaZa
        """

        module_indexer = create_indexer(textwrap.dedent(BOTMETA), {})

        self.assertEqual(len(module_indexer.modules), 1)  # ensure only fake data are loaded
        self.assertEqual(sorted(module_indexer.botmeta[u'files'][u'lib/ansible/module_utils/foo/bar.py'][u'maintainers']), [u'ElsA', u'Oliver'])
        self.assertEqual(sorted(module_indexer.botmeta[u'files'][u'lib/ansible/module_utils/baz/bar.py'][u'maintainers']), [u'TiTi', u'ZaZa'])

        CM = ComponentMatcherMock()
        CM.expected_results = [
            {
                u'repo_filename': u'lib/ansible/module_utils/foo/bar.py',
                u'labels': [],
                u'support': None,
                u'maintainers': [u'ElsA', u'Oliver'],
                u'notify': [u'ElsA', u'Oliver'],
                u'ignore': [],
            },
            {
                u'repo_filename': u'lib/ansible/modules/baz/bar.py',
                u'labels': [],
                u'support': None,
                u'maintainers': [u'TiTi', u'ZaZa'],
                u'notify': [u'TiTi', u'ZaZa'],
                u'ignore': [],
            }
        ]

        issue = IssueMock(u'/dev/null')
        issue.user.login = u'ElsA'
        issue.html_url = u'https://github.com/ansible/ansible/pull/123'
        iw = IssueWrapper(cachedir="", issue=issue)
        iw.pr_files = [
            MockFile(u'lib/ansible/module_utils/foo/bar.py'),
            MockFile(u'lib/ansible/module_utils/baz/bar.py')
        ]
        iw.file_indexer = FileIndexerMock()
        iw.repo = MockRepo(repo_path='ansible/ansible')

        meta = self.meta.copy()
        iw._commits = []
        meta.update(get_component_match_facts(iw, CM, []))
        facts = get_shipit_facts(iw, meta, module_indexer, core_team=[u'bcoca', u'mscherer'], botnames=[u'ansibot'])

        self.assertEqual(iw.submitter, u'ElsA')
        self.assertFalse(facts[u'owner_pr'])
Ejemplo n.º 4
0
    def test_supershipit_changelogs(self):
        # a supershipit should count from a supershipiteer
        # https://github.com/ansible/ansibullbot/issues/1147
        IW = IssueWrapperMock('ansible', 'ansible', 1)
        IW._is_pullrequest = True
        IW.add_comment('jane', 'shipit')
        MI = ModuleIndexerMock([])
        meta = {
            u'is_module_util': False,
            u'is_new_module': False,
            u'is_needs_rebase': False,
            u'is_needs_revision': False,
            u'component_matches': [
                {u'repo_filename': u'foo', u'supershipit': [u'jane', u'doe']},
                {u'repo_filename': u'changelogs/fragments/000-foo-change.yml'}
            ]
        }
        sfacts = get_shipit_facts(IW, meta, MI)

        # don't let the plugin modify the meta
        assert len(meta[u'component_matches']) == 2

        assert sfacts[u'shipit']
        assert sfacts[u'supershipit']
        assert sfacts[u'shipit_actors'] == []
        assert sfacts[u'shipit_actors_other'] == [u'jane']
Ejemplo n.º 5
0
    def test_review_facts_are_defined_module_utils(self):
        BOTMETA = u"""
        ---
        macros:
            modules: lib/ansible/modules
            module_utils: lib/ansible/module_utils
        files:
            $module_utils:
              support: community
            $modules/foo/bar.py:
                maintainers: ElsA ZaZa
            $module_utils/baz/bar.py:
                maintainers: TiTi mscherer
        """

        modules = {u'lib/ansible/modules/foo/bar.py': None}
        module_indexer = create_indexer(textwrap.dedent(BOTMETA), modules)

        self.assertEqual(len(module_indexer.modules), 2)  # ensure only fake data are loaded
        self.assertEqual(sorted(module_indexer.botmeta[u'files'][u'lib/ansible/modules/foo/bar.py'][u'maintainers']),[u'ElsA', u'ZaZa'])
        self.assertEqual(sorted(module_indexer.botmeta[u'files'][u'lib/ansible/module_utils/baz/bar.py'][u'maintainers']),[u'TiTi', u'mscherer'])

        datafile = u'tests/fixtures/shipit/2_issue.yml'
        statusfile = u'tests/fixtures/shipit/2_prstatus.json'
        with get_issue(datafile, statusfile) as iw:
            iw.pr_files = [MockFile(u'lib/ansible/module_utils/foo/bar.py')]
            # need to give the wrapper a list of known files to compare against
            iw.file_indexer = FileIndexerMock()
            iw.file_indexer.files.append(u'lib/ansible/modules/foo/bar.py')

            # predefine what the matcher is going to return
            CM = ComponentMatcherMock()
            CM.expected_results = [
                {
                    u'repo_filename': u'lib/ansible/module_utils/foo/bar.py',
                    u'labels': [],
                    u'support': None,
                    u'maintainers': [u'ElsA', u'Oliver'],
                    u'notify': [u'ElsA', u'Oliver'],
                    u'ignore': [],
                }
            ]

            meta = self.meta.copy()
            iw._commits = []
            meta.update(get_component_match_facts(iw, CM, []))
            meta.update(get_shipit_facts(iw, meta, module_indexer, core_team=[u'bcoca'], botnames=[u'ansibot']))
            facts = get_review_facts(iw, meta)

        self.assertTrue(facts[u'community_review'])
        self.assertFalse(facts[u'core_review'])
        self.assertFalse(facts[u'committer_review'])
Ejemplo n.º 6
0
    def needs_rebase_or_revision_prevent_shipit(self, meta):
        datafile = u'tests/fixtures/shipit/1_issue.yml'
        statusfile = u'tests/fixtures/shipit/1_prstatus.json'
        with get_issue(datafile, statusfile) as iw:
            namespace_maintainers = [u'LinusU']

            facts = get_shipit_facts(iw, meta, ModuleIndexerMock(namespace_maintainers), core_team=[u'bcoca', u'mscherer'], botnames=[u'ansibot'])

            self.assertEqual(iw.submitter, u'mscherer')
            self.assertFalse(facts[u'community_usernames'])
            self.assertFalse(facts[u'shipit_actors'])
            self.assertEqual(facts[u'shipit_count_ansible'], 0)
            self.assertEqual(facts[u'shipit_count_maintainer'], 0)
            self.assertEqual(facts[u'shipit_count_community'], 0)
            self.assertFalse(facts[u'shipit'])
Ejemplo n.º 7
0
    def test_owner_pr_submitter_is_maintainer_new_module(self):
        """
        Submitter is a maintainer: pull request adds a new module: ensure owner_pr is False
        """
        BOTMETA = u"""
        ---
        macros:
            modules: lib/ansible/modules
            module_utils: lib/ansible/module_utils
        files:
            $modules/foo/bar.py:
                maintainers: ElsA mscherer
        """

        modules = {}  # new module
        module_indexer = create_indexer(textwrap.dedent(BOTMETA), modules)

        self.assertEqual(len(module_indexer.modules), 1)  # ensure only fake data are loaded
        # Ensure that BOTMETA.yml updates doesn't interfere
        self.assertEqual(sorted(module_indexer.botmeta[u'files'][u'lib/ansible/modules/foo/bar.py'][u'maintainers']), [u'ElsA', u'mscherer'])

        CM = ComponentMatcherMock()
        CM.expected_results = [
            {
                u'repo_filename': u'lib/ansible/modules/foo/bar.py',
                u'labels': [],
                u'support': None,
                u'maintainers': [u'ElsA', u'mscherer'],
                u'notify': [u'ElsA', u'mscherer'],
                u'ignore': [],
            }
        ]

        meta = self.meta.copy()

        datafile = u'tests/fixtures/shipit/0_issue.yml'
        statusfile = u'tests/fixtures/shipit/0_prstatus.json'
        with get_issue(datafile, statusfile) as iw:
            iw.pr_files = [MockFile(u'lib/ansible/modules/foo/bar.py')]
            iw.file_indexer = FileIndexerMock()

            meta.update(get_component_match_facts(iw, CM, []))
            facts = get_shipit_facts(iw, meta, module_indexer, core_team=[u'bcoca'], botnames=[u'ansibot'])

        self.assertEqual(iw.submitter, u'mscherer')
        self.assertFalse(facts[u'owner_pr'])
Ejemplo n.º 8
0
 def test_supershipit_shipit_facts(self):
     # a supershipit should count from a supershipiteer
     IW = IssueWrapperMock('ansible', 'ansible', 1)
     IW._is_pullrequest = True
     IW.add_comment('jane', 'shipit')
     MI = ModuleIndexerMock([])
     meta = {
         u'is_module_util': False,
         u'is_new_module': False,
         u'is_needs_rebase': False,
         u'is_needs_revision': False,
         u'component_matches': [
             {u'repo_filename': u'foo', u'supershipit': [u'jane', u'doe']}
         ]
     }
     sfacts = get_shipit_facts(IW, meta, MI)
     assert sfacts[u'shipit']
     assert sfacts[u'supershipit']
     assert sfacts[u'shipit_actors'] == []
     assert sfacts[u'shipit_actors_other'] == [u'jane']
Ejemplo n.º 9
0
 def test_core_is_not_supershipit(self):
     # a core team member should not be auto-added as a shipiteer
     IW = IssueWrapperMock('ansible', 'ansible', 1)
     IW._is_pullrequest = True
     IW.add_comment('coreperson', 'shipit')
     MI = ModuleIndexerMock([])
     meta = {
         u'is_module_util': False,
         u'is_new_module': False,
         u'is_needs_rebase': False,
         u'is_needs_revision': False,
         u'component_matches': [
             {u'repo_filename': u'foo', u'supershipit': [u'jane', u'doe']}
         ]
     }
     sfacts = get_shipit_facts(IW, meta, MI, core_team=[u'coreperson'])
     assert not sfacts[u'supershipit']
     assert not sfacts[u'shipit']
     assert not sfacts[u'supershipit']
     assert not sfacts[u'shipit_actors_other']
     assert sfacts[u'shipit_actors'] == [u'coreperson']
Ejemplo n.º 10
0
 def test_supershipit_shipit_not_all_files(self):
     # make sure there is supershipit for all files
     IW = IssueWrapperMock('ansible', 'ansible', 1)
     IW._is_pullrequest = True
     IW.add_comment(u'jane', u'shipit')
     MI = ModuleIndexerMock([])
     meta = {
         u'is_module_util': False,
         u'is_new_module': False,
         u'is_needs_rebase': False,
         u'is_needs_revision': False,
         u'component_matches': [
             {u'repo_filename': u'foo', u'supershipit': [u'jane']},
             {u'repo_filename': u'bar', u'supershipit': [u'doe']}
         ]
     }
     sfacts = get_shipit_facts(IW, meta, MI)
     assert not sfacts[u'shipit']
     assert not sfacts[u'supershipit']
     assert sfacts[u'shipit_actors_other'] == [u'jane']
     assert not sfacts[u'shipit_actors']
Ejemplo n.º 11
0
    def test_submitter_is_maintainer(self):
        """
        Submitter is a namespace maintainer: approval must be automatically
        added
        """
        datafile = u'tests/fixtures/shipit/0_issue.yml'
        statusfile = u'tests/fixtures/shipit/0_prstatus.json'
        with get_issue(datafile, statusfile) as iw:
            namespace_maintainers = [u'LinusU', u'mscherer']

            _meta = self.meta.copy()
            _meta[u'component_maintainers'] = []
            _meta[u'component_namespace_maintainers'] = namespace_maintainers[:]

            facts = get_shipit_facts(iw, _meta, ModuleIndexerMock(namespace_maintainers), core_team=[u'bcoca'], botnames=[u'ansibot'])

            self.assertEqual(iw.submitter, u'mscherer')
            self.assertEqual([u'LinusU', u'mscherer'], facts[u'community_usernames'])
            self.assertEqual([u'mscherer'], facts[u'shipit_actors'])
            self.assertEqual(facts[u'shipit_count_ansible'], 0)     # bcoca
            self.assertEqual(facts[u'shipit_count_maintainer'], 0)  # abulimov
            self.assertEqual(facts[u'shipit_count_community'], 1)   # LinusU, mscherer
            self.assertFalse(facts[u'shipit'])
Ejemplo n.º 12
0
    def test_supershipit_changelogs(self):
        # a supershipit should count from a supershipiteer
        # https://github.com/ansible/ansibullbot/issues/1147
        IW = IssueWrapperMock('ansible', 'ansible', 1)
        IW.pr_files = [
            MockFile(u'foo'),
            MockFile(u'changelogs/fragments/000-foo-change.yml'),
        ]
        IW._is_pullrequest = True
        IW.add_comment('jane', 'shipit')
        meta = {
            u'is_module_util':
            False,
            u'is_new_module':
            False,
            u'is_needs_rebase':
            False,
            u'is_needs_revision':
            False,
            u'component_matches': [{
                u'repo_filename': u'foo',
                u'supershipit': [u'jane', u'doe']
            }, {
                u'repo_filename':
                u'changelogs/fragments/000-foo-change.yml'
            }]
        }
        sfacts = get_shipit_facts(IW, meta, {})

        # don't let the plugin modify the meta
        assert len(meta[u'component_matches']) == 2

        assert sfacts[u'shipit']
        assert sfacts[u'supershipit']
        assert sfacts[u'shipit_actors'] == []
        assert sfacts[u'shipit_actors_other'] == [u'jane']
Ejemplo n.º 13
0
    def test_owner_pr_module_utils_and_modules_updated_submitter_maintainer_2(
            self):
        """
        PR updates 2 files (one below modules, the other below module_utils),
        submitter is a maintainer from both, check that owner_pr is set.
        Submitter is maintainer from module_utils file.
        """
        BOTMETA = """
        ---
        macros:
            modules: lib/ansible/modules
            module_utils: lib/ansible/module_utils
        files:
            $modules/foo/bar.py:
                maintainers: ElsA ZaZa
            $module_utils/baz/bar.py:
                maintainers: TiTi mscherer
        """

        modules = {'lib/ansible/modules/foo/bar.py': None}
        module_indexer = create_indexer(textwrap.dedent(BOTMETA), modules)

        self.assertEqual(len(module_indexer.modules),
                         2)  # ensure only fake data are loaded
        self.assertEqual(
            sorted(module_indexer.botmeta['files']
                   ['lib/ansible/modules/foo/bar.py']['maintainers']),
            ['ElsA', 'ZaZa'])
        self.assertEqual(
            sorted(module_indexer.botmeta['files']
                   ['lib/ansible/module_utils/baz/bar.py']['maintainers']),
            ['TiTi', 'mscherer'])

        CM = ComponentMatcherMock()
        CM.expected_results = [{
            'repo_filename': 'lib/ansible/module_utils/foo/bar.py',
            'labels': [],
            'support': None,
            'maintainers': ['ElsA', 'mscherer'],
            'notify': ['ElsA', 'mscherer'],
            'ignore': [],
        }, {
            'repo_filename': 'lib/ansible/modules/baz/bar.py',
            'labels': [],
            'support': None,
            'maintainers': ['TiTi', 'ZaZa'],
            'notify': ['TiTi', 'ZaZa'],
            'ignore': [],
        }]

        meta = self.meta.copy()

        datafile = 'tests/fixtures/shipit/0_issue.yml'
        statusfile = 'tests/fixtures/shipit/0_prstatus.json'
        with get_issue(datafile, statusfile) as iw:
            iw.pr_files = [
                MockFile('lib/ansible/modules/foo/bar.py'),
                MockFile('lib/ansible/module_utils/baz/bar.py')
            ]
            iw.file_indexer = FileIndexerMock()
            meta.update(
                get_component_match_facts(iw, {}, CM, iw.file_indexer,
                                          module_indexer, []))
            facts = get_shipit_facts(iw,
                                     meta,
                                     module_indexer,
                                     core_team=['bcoca'],
                                     botnames=['ansibot'])

        self.assertEqual(iw.submitter, 'mscherer')
        self.assertFalse(facts['owner_pr'])
Ejemplo n.º 14
0
    def test_owner_pr_submitter_is_not_maintainer_of_all_updated_files(self):
        """
        PR updates 2 files below module_utils, submitter is a maintainer from only one: ensure owner_pr isn't set
        """
        BOTMETA = """
        ---
        macros:
            modules: lib/ansible/modules
            module_utils: lib/ansible/module_utils
        files:
            $module_utils/foo/bar.py:
                maintainers: ElsA Oliver
            $module_utils/baz/bar.py:
                maintainers: TiTi ZaZa
        """

        module_indexer = create_indexer(textwrap.dedent(BOTMETA), {})

        self.assertEqual(len(module_indexer.modules),
                         1)  # ensure only fake data are loaded
        self.assertEqual(
            sorted(module_indexer.botmeta['files']
                   ['lib/ansible/module_utils/foo/bar.py']['maintainers']),
            ['ElsA', 'Oliver'])
        self.assertEqual(
            sorted(module_indexer.botmeta['files']
                   ['lib/ansible/module_utils/baz/bar.py']['maintainers']),
            ['TiTi', 'ZaZa'])

        CM = ComponentMatcherMock()
        CM.expected_results = [{
            'repo_filename': 'lib/ansible/module_utils/foo/bar.py',
            'labels': [],
            'support': None,
            'maintainers': ['ElsA', 'Oliver'],
            'notify': ['ElsA', 'Oliver'],
            'ignore': [],
        }, {
            'repo_filename': 'lib/ansible/modules/baz/bar.py',
            'labels': [],
            'support': None,
            'maintainers': ['TiTi', 'ZaZa'],
            'notify': ['TiTi', 'ZaZa'],
            'ignore': [],
        }]

        issue = IssueMock('/dev/null')
        issue.user.login = '******'
        issue.html_url = 'https://github.com/ansible/ansible/pull/123'
        iw = IssueWrapper(cachedir="", issue=issue)
        iw.pr_files = [
            MockFile('lib/ansible/module_utils/foo/bar.py'),
            MockFile('lib/ansible/module_utils/baz/bar.py')
        ]
        iw.file_indexer = FileIndexerMock()
        iw.repo = MockRepo(repo_path='ansible/ansible')

        meta = self.meta.copy()
        meta.update(
            get_component_match_facts(iw, {}, CM, FileIndexerMock(),
                                      module_indexer, []))
        facts = get_shipit_facts(iw,
                                 meta,
                                 module_indexer,
                                 core_team=['bcoca', 'mscherer'],
                                 botnames=['ansibot'])

        self.assertEqual(iw.submitter, 'ElsA')
        self.assertFalse(facts['owner_pr'])
Ejemplo n.º 15
0
    def test_review_facts_are_defined_module_utils(self):
        BOTMETA = u"""
        ---
        macros:
            modules: lib/ansible/modules
            module_utils: lib/ansible/module_utils
        files:
            $module_utils:
              support: community
            $modules/foo/bar.py:
                maintainers: ElsA ZaZa
            $module_utils/baz/bar.py:
                maintainers: TiTi mscherer
        """

        modules = {u'lib/ansible/modules/foo/bar.py': None}
        module_indexer = create_indexer(textwrap.dedent(BOTMETA), modules)

        self.assertEqual(len(module_indexer.modules),
                         2)  # ensure only fake data are loaded
        self.assertEqual(
            sorted(module_indexer.botmeta[u'files']
                   [u'lib/ansible/modules/foo/bar.py'][u'maintainers']),
            [u'ElsA', u'ZaZa'])
        self.assertEqual(
            sorted(module_indexer.botmeta[u'files']
                   [u'lib/ansible/module_utils/baz/bar.py'][u'maintainers']),
            [u'TiTi', u'mscherer'])

        datafile = u'tests/fixtures/shipit/2_issue.yml'
        statusfile = u'tests/fixtures/shipit/2_prstatus.json'
        with get_issue(datafile, statusfile) as iw:
            iw.pr_files = [MockFile(u'lib/ansible/module_utils/foo/bar.py')]
            # need to give the wrapper a list of known files to compare against
            iw.file_indexer = FileIndexerMock()
            iw.file_indexer.files.append(u'lib/ansible/modules/foo/bar.py')

            # predefine what the matcher is going to return
            CM = ComponentMatcherMock()
            CM.expected_results = [{
                u'repo_filename': u'lib/ansible/module_utils/foo/bar.py',
                u'labels': [],
                u'support': None,
                u'maintainers': [u'ElsA', u'Oliver'],
                u'notify': [u'ElsA', u'Oliver'],
                u'ignore': [],
            }]

            meta = self.meta.copy()
            iw._commits = []
            meta.update(get_component_match_facts(iw, CM, []))
            meta.update(
                get_shipit_facts(iw,
                                 meta,
                                 module_indexer,
                                 core_team=[u'bcoca'],
                                 botnames=[u'ansibot']))
            facts = get_review_facts(iw, meta)

        self.assertTrue(facts[u'community_review'])
        self.assertFalse(facts[u'core_review'])
        self.assertFalse(facts[u'committer_review'])