#!/usr/bin/python

import datetime
import unittest

import common
from autotest_lib.site_utils.deployment import commandline


class ArgumentPairTestCase(unittest.TestCase):

    """Tests for parsing and adding argument pairs."""

    def test_missing_dest(self):
        """Test for error when missing dest argument."""
        parser = commandline._ArgumentParser()
        with self.assertRaisesRegexp(ValueError, r'\bdest\b'):
            parser.add_argument_pair('--yes', '--no', default=True)

    def test_missing_dest_and_default(self):
        """Test for error when missing dest and default arguments."""
        parser = commandline._ArgumentParser()
        with self.assertRaises(ValueError) as context:
            parser.add_argument_pair('--yes', '--no')
        message = str(context.exception)
        self.assertIn('dest', message)
        self.assertIn('default', message)

    def test_default_value(self):
        """Test the default value for an option pair."""
        parser = commandline._ArgumentParser()
        parser.add_argument_pair('--yes', '--no', dest='option',
                                 default=False)
        args = parser.parse_args([])
        self.assertIs(args.option, False)

    def test_parsing_flag(self):
        """Test parsing an option flag of an option pair."""
        parser = commandline._ArgumentParser()
        parser.add_argument_pair('--yes', '--no', dest='option',
                                 default=False)
        args = parser.parse_args(['--yes'])
        self.assertIs(args.option, True)

    def test_duplicate_flag_precedence(self):
        """Test precedence when passing multiple flags."""
        parser = commandline._ArgumentParser()
        parser.add_argument_pair('--yes', '--no', dest='option',
                                 default=False)
        args = parser.parse_args(['--no', '--yes'])
        self.assertIs(args.option, True)
        args = parser.parse_args(['--yes', '--no'])
        self.assertIs(args.option, False)


class _NamespaceStub:

    def __init__(self, **kwargs):
        for key, val in kwargs.iteritems():
            setattr(self, key, val)


class DefaultLogdirNameTestCase(unittest.TestCase):

    """Test getting default logdir name."""

    def test_happy_path(self):
        """Test everything working correctly."""
        arguments = _NamespaceStub(
            start_time=datetime.datetime(2016, 5, 4, 3),
            board='shana')
        got = commandline.get_default_logdir_name(arguments)
        self.assertEqual(got, '2016-05-04T03:00:00-shana')


if __name__ == '__main__':
    unittest.main()