from __future__ import absolute_import
import mock
import unittest
from six.moves import StringIO

import koji

from koji_cli.commands import anon_handle_list_channels

class TestListChannels(unittest.TestCase):
    def setUp(self):
        self.options = mock.MagicMock()
        self.options.quiet = True
        self.session = mock.MagicMock()
        self.session.getAPIVersion.return_value = koji.API_VERSION
        self.args = []

    @mock.patch('sys.stdout', new_callable=StringIO)
    @mock.patch('koji_cli.commands.ensure_connection')
    def test_list_channels(self, ensure_connection_mock, stdout):
        self.session.listChannels.return_value = [
            {'id': 1, 'name': 'default'},
            {'id': 2, 'name': 'test'},
        ]
        self.session.multiCall.return_value = [
            [[
                {'enabled': True, 'ready': True, 'capacity': 2.0, 'task_load': 1.34},
                {'enabled': True, 'ready': False, 'capacity': 2.0, 'task_load': 0.0},
                {'enabled': True, 'ready': False, 'capacity': 2.0, 'task_load': 0.0},
            ]],
            [[
                {'enabled': True, 'ready': True, 'capacity': 2.0, 'task_load': 1.34},
                {'enabled': False, 'ready': True, 'capacity': 2.0, 'task_load': 0.34},
                {'enabled': True, 'ready': False, 'capacity': 2.0, 'task_load': 0.0},
            ]],
        ]

        anon_handle_list_channels(self.options, self.session, self.args)

        actual = stdout.getvalue()
        print(actual)
        expected = """\
default              3      1      0      1      6     22%
test                 2      2      1      1      6     28%
"""
        self.assertMultiLineEqual(actual, expected)
        ensure_connection_mock.assert_called_once_with(self.session)
