class TestRepoGroupMemberSection(unittest.TestCase):
    def setUp(self):
        self.section = RepoGroupMemberSection(mock.MagicMock())

    def test_command_presence(self):
        COMMAND_NAMES = ('add', 'remove', 'list')
        for name in COMMAND_NAMES:
            # Command instance has been added
            self.assertTrue(name in self.section.commands)
            # method exists to process the command
            self.assertTrue(hasattr(self.section, name))
            self.assertTrue(callable(getattr(self.section, name)))

    def test_add(self):
        params = {'group-id' :'rg1', 'filters' : {'id':'repo2'}}
        self.section.add(**params)
        self.section.context.server.repo_group_actions.associate.assert_called_once_with(
            'rg1', filters={'id':'repo2'})

    def test_remove(self):
        params = {'group-id' :'rg1', 'filters' : {'id':'repo2'}}
        self.section.remove(**params)
        self.section.context.server.repo_group_actions.unassociate.assert_called_once_with(
            'rg1', filters={'id':'repo2'})

    def test_list_not_found(self):
        # test behavior when the repo group is not found
        # setup
        self.section.context.server.repo_group_search.search.return_value = []
        params = {'group-id' :'rg1'}

        # call
        self.section.list(**params)

        # verify
        self.assertEqual(self.section.prompt.write.call_count, 1)
        output = self.section.prompt.write.call_args[0][0]
        self.assertTrue('does not exist' in output)

    def test_list(self):
        # setup
        self.section.context.server.repo_group_search.search.return_value =\
            [{'repo_ids':['repo1']}]
        self.section.context.server.repo_search.search.return_value = [{'id':'repo1'}]
        params = {'group-id' :'rg1'}

        # call
        self.section.list(**params)

        # verify
        self.assertEqual(self.section.context.server.repo_search.search.call_count, 1)
        self.assertEqual(self.section.prompt.render_document_list.call_count, 1)
 def setUp(self):
     self.section = RepoGroupMemberSection(mock.MagicMock())