from unittest.case import TestCase
from unittest.mock import patch

from click import ClickException
from samcli.lib.utils import configuration


class TestConfiguration(TestCase):
    def test_config_is_read(self):
        self.assertIsInstance(configuration.config, dict)
        self.assertIn("app_template_repo_commit", configuration.config)

    @patch("samcli.lib.utils.configuration.config")
    def test_get_app_template_repo_commit_return_correct_value(self, config_mock):
        config_mock.get.return_value = "some_commit_hash"
        commit_hash = configuration.get_app_template_repo_commit()
        config_mock.get.assert_called_once_with("app_template_repo_commit", None)
        self.assertEqual(commit_hash, "some_commit_hash")

    @patch("samcli.lib.utils.configuration.config")
    def test_get_app_template_repo_commit_error(self, config_mock):
        config_mock.get.return_value = None
        with self.assertRaises(ClickException):
            configuration.get_app_template_repo_commit()
            config_mock.get.assert_called_once_with("app_template_repo_commit", None)