# -*- coding: utf-8 -*-
'''
Tests for salt.utils.dateutils
'''

# Import Python libs
from __future__ import absolute_import, print_function, unicode_literals
import datetime

# Import Salt Testing libs
from tests.support.unit import TestCase, skipIf
from tests.support.mock import (
    patch,
    NO_MOCK,
    NO_MOCK_REASON
)

# Import Salt libs
import salt.utils.dateutils

# Import 3rd-party libs
try:
    import timelib  # pylint: disable=import-error,unused-import
    HAS_TIMELIB = True
except ImportError:
    HAS_TIMELIB = False


class DateutilsTestCase(TestCase):

    @skipIf(NO_MOCK, NO_MOCK_REASON)
    def test_date_cast(self):
        now = datetime.datetime.now()
        with patch('datetime.datetime'):
            datetime.datetime.now.return_value = now
            self.assertEqual(now, salt.utils.dateutils.date_cast(None))
        self.assertEqual(now, salt.utils.dateutils.date_cast(now))
        try:
            ret = salt.utils.dateutils.date_cast('Mon Dec 23 10:19:15 MST 2013')
            expected_ret = datetime.datetime(2013, 12, 23, 10, 19, 15)
            self.assertEqual(ret, expected_ret)
        except RuntimeError:
            if not HAS_TIMELIB:
                # Unparseable without timelib installed
                self.skipTest('\'timelib\' is not installed')
            else:
                raise

    @skipIf(not HAS_TIMELIB, '\'timelib\' is not installed')
    def test_strftime(self):

        # Taken from doctests

        expected_ret = '2002-12-25'

        src = datetime.datetime(2002, 12, 25, 12, 00, 00, 00)
        ret = salt.utils.dateutils.strftime(src)
        self.assertEqual(ret, expected_ret)

        src = '2002/12/25'
        ret = salt.utils.dateutils.strftime(src)
        self.assertEqual(ret, expected_ret)

        src = 1040814000
        ret = salt.utils.dateutils.strftime(src)
        self.assertEqual(ret, expected_ret)

        src = '1040814000'
        ret = salt.utils.dateutils.strftime(src)
        self.assertEqual(ret, expected_ret)
