# -*- coding: utf-8 -*-
"""
    tests.unit.utils.extend_test
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Test the salt extend script, leave templates/test alone to keep this working!
"""

# Import python libs
from __future__ import absolute_import, print_function, unicode_literals

import os
import shutil
from datetime import date

# Import salt libs
import salt.utils.extend
import salt.utils.files
from tests.support.mock import MagicMock, patch
from tests.support.runtests import RUNTIME_VARS

# Import Salt Testing libs
from tests.support.unit import TestCase, skipIf


class ExtendTestCase(TestCase):
    def setUp(self):
        self.starting_dir = os.getcwd()
        os.chdir(RUNTIME_VARS.CODE_DIR)
        self.out = None

    def tearDown(self):
        if self.out is not None:
            if os.path.exists(self.out):
                shutil.rmtree(self.out, True)
        os.chdir(self.starting_dir)

    @skipIf(
        not os.path.exists(os.path.join(RUNTIME_VARS.CODE_DIR, "templates")),
        "Test template directory 'templates/' missing.",
    )
    def test_run(self):
        with patch("sys.exit", MagicMock):
            out = salt.utils.extend.run(
                "test", "test", "this description", RUNTIME_VARS.CODE_DIR, False
            )
            self.out = out
            year = date.today().strftime("%Y")
            self.assertTrue(os.path.exists(out))
            self.assertFalse(os.path.exists(os.path.join(out, "template.yml")))
            self.assertTrue(os.path.exists(os.path.join(out, "directory")))
            self.assertTrue(os.path.exists(os.path.join(out, "directory", "test.py")))
            with salt.utils.files.fopen(
                os.path.join(out, "directory", "test.py"), "r"
            ) as test_f:
                self.assertEqual(test_f.read(), year)
