from awscli.testutils import mock
from awscli.testutils import unittest
from awscli import arguments
from botocore.model import StringShape, OperationModel, ServiceModel
class DemoArgument(arguments.CustomArgument):
pass
class TestArgumentClasses(unittest.TestCase):
def test_can_set_required(self):
arg = DemoArgument('test-arg')
self.assertFalse(arg.required)
arg.required = True
self.assertTrue(arg.required)
class TestCLIArgument(unittest.TestCase):
def setUp(self):
self.service_name = 'baz'
self.service_model = ServiceModel({
'metadata': {
'endpointPrefix': 'bad',
},
'operations': {
'SampleOperation': {
'name': 'SampleOperation',
'input': {'shape': 'Input'}
}
},
'shapes': {
'StringShape': {'type': 'string'},
'Input': {
'type': 'structure',
'members': {
'Foo': {'shape': 'StringShape'}
}
}
}
}, self.service_name)
self.operation_model = self.service_model.operation_model(
'SampleOperation')
self.argument_model = self.operation_model.input_shape.members['Foo']
self.event_emitter = mock.Mock()
def create_argument(self):
return arguments.CLIArgument(
self.argument_model.name, self.argument_model,
self.operation_model, self.event_emitter)
def test_unpack_uses_service_name_in_event(self):
self.event_emitter.emit.return_value = ['value']
argument = self.create_argument()
params = {}
argument.add_to_params(params, 'value')
expected_event_name = 'process-cli-arg.%s.%s' % (
self.service_name, 'sample-operation')
actual_event_name = self.event_emitter.emit.call_args[0][0]
self.assertEqual(actual_event_name, expected_event_name)