class LogSetsTests(TestCase):
    """
    Tests for the LogSets class
    """
    def setUp(self):
        super(LogSetsTests, self).setUp()

        self.test_account_key = '4a161599-2634-428c-948f-044e13feac18'
        self.logsets = LogSets(self.test_account_key)

    @patch.object(requests, 'get')
    def test_list_ok(self, mock_get):
        """
        Test .list() is ok
        """
        mock_response = Mock(
            name='response',
            ok=True,
            status_code=200,
        )
        mock_response.json.return_value = {
            'list': [
                {
                    'c': 1438273935310,
                    'distname': 'Ubuntu',
                    'distver': '12.04',
                    'hostname': 'ip-10-10-10-10.ec2.internal',
                    'key': '22613f4d-36f5-489d-88bd-de881c3ec53c',
                    'logs': [{'key': 'fec0027c-7aaa-4dd5-a41c-a62164fa7b54'}],
                    'name': 'ip-10-10-10-10',
                    'object': 'host'
                }, {
                    'c': 1438196071310,
                    'distname': '',
                    'distver': '',
                    'hostname': 'nonlocation',
                    'key': '3e5c020c-82b2-4af3-9cb9-6ce96f4b27e9',
                    'logs': [{'key': '572dfcbf-ff2d-40db-a364-004cf1bb632a'}],
                    'name': 'OtherLogs',
                    'object': 'host'
                }
            ],
            'object': 'hostlist',
            'response': 'ok'
        }
        mock_get.return_value = mock_response

        response = self.logsets.list()

        mock_get.assert_called_once_with(
            self.logsets.base_url
        )
        self.assertEqual(
            response,
            {
                'ip-10-10-10-10': [
                    'fec0027c-7aaa-4dd5-a41c-a62164fa7b54'
                ],
                'OtherLogs': [
                    '572dfcbf-ff2d-40db-a364-004cf1bb632a'
                ]
            }
        )

    @patch.object(requests, 'get')
    def test_list_not_ok(self, mock_get):
        """
        Test .list() fails loudly
        """
        mock_response = Mock(
            name='response',
            ok=False,
            status_code=500,
            text='Server Error'
        )
        mock_get.return_value = mock_response

        with self.assertRaises(ServerException):
            self.logsets.list()

        mock_get.assert_called_once_with(
            self.logsets.base_url
        )

    @patch.object(requests, 'get')
    def test_get_ok(self, mock_get):
        """
        Test .get() is ok
        """

        api_response = {
            'created': 1438276333925,
            'filename': '',
            'follow': 'false',
            'key': '370ec2e9-cf92-491b-881b-0f87e6251901',
            'name': 'nginx',
            'object': 'log',
            'response': 'ok',
            'retention': -1,
            'token': 'f413f087-f860-4377-a78f-2c6877048a01',
            'type': 'token'
        }

        mock_response = Mock(
            name='response',
            ok=True,
            status_code=200,
        )
        mock_response.json.return_value = api_response
        mock_get.return_value = mock_response

        response = self.logsets.get('some_logs/nginx/')

        mock_get.assert_called_once_with(
            self.logsets.base_url + 'some_logs/nginx'
        )
        self.assertEqual(
            response,
            api_response
        )

    @patch.object(requests, 'get')
    def test_get_not_ok(self, mock_get):
        """
        Test .get() fails loudly
        """
        mock_response = Mock(
            name='response',
            ok=False,
            status_code=500,
            text='Server Error'
        )
        mock_get.return_value = mock_response

        with self.assertRaises(ServerException):
            self.logsets.get('some_logs/nginx/')

        mock_get.assert_called_once_with(
            self.logsets.base_url + 'some_logs/nginx'
        )
    def setUp(self):
        super(LogSetsTests, self).setUp()

        self.test_account_key = '4a161599-2634-428c-948f-044e13feac18'
        self.logsets = LogSets(self.test_account_key)