from unittest.mock import patch

from django.db import connections
from django.test import TestCase

from bookmarks.views.settings import app_version


class HealthViewTestCase(TestCase):

    def test_health_healthy(self):
        response = self.client.get("/health")

        self.assertEqual(response.status_code, 200)

        response_body = response.json()
        expected_body = {
            'version': app_version,
            'status': 'healthy'
        }
        self.assertDictEqual(response_body, expected_body)

    def test_health_unhealhty(self):
        with patch.object(connections['default'], 'ensure_connection') as mock_ensure_connection:
            mock_ensure_connection.side_effect = Exception('Connection error')

            response = self.client.get("/health")

            self.assertEqual(response.status_code, 500)

            response_body = response.json()
            expected_body = {
                'version': app_version,
                'status': 'unhealthy'
            }
            self.assertDictEqual(response_body, expected_body)
