def test_add_service_setting(self, mock_add_permitted_arns):

        interface = {
            'InterfaceId': 'gem_test-interface_1_0_0',
            'InterfaceUrl': 'test-interface-url',
            'InterfaceSwagger': 'test-interface-swagger'
        }

        stack = mock.MagicMock(name='stack')
        service_directory = mock.MagicMock(name='ServiceDirectory')
        service_directory.get_interface_services.return_value = [interface]

        props = properties.load(
            self.event, LambdaConfigurationResourceHandler.PROPERTIES_SCHEMA)
        services = props.Services
        service = services[0]

        service_settings = {}

        permitted_arns = []

        LambdaConfigurationResourceHandler._add_service_settings(
            stack, service_directory, service, service_settings,
            permitted_arns)

        service_directory.get_interface_services.assert_called_once_with(
            stack.deployment.deployment_name, service.InterfaceId)

        self.assertEquals(service_settings[service.InterfaceId], interface)

        mock_add_permitted_arns.assert_called_once_with(
            stack, interface, permitted_arns)
    def test_add_service_setting(self, mock_add_permitted_arns):

        interface = {
            'InterfaceId': 'gem_test-interface_1_0_0',
            'InterfaceUrl': 'test-interface-url',
            'InterfaceSwagger': 'test-interface-swagger'
        }

        stack = mock.MagicMock(name='stack')
        service_directory = mock.MagicMock(name='ServiceDirectory')
        service_directory.get_interface_services.return_value = [interface]

        props = properties.load(
            self.event, LambdaConfigurationResourceHandler.PROPERTIES_SCHEMA)
        services = props.Services
        service = services[0]

        service_settings = {}

        permitted_arns = []

        LambdaConfigurationResourceHandler._add_service_settings(
            stack, service_directory, service, service_settings,
            permitted_arns)

        service_directory.get_interface_services.assert_not_called()

        # If the interface is not from CloudGemFramework it should not be added here
        # Non-project interface references live in the lambda environment variables
        self.assertEquals(service_settings, {})
    def test_add_cgf_service_setting(self, mock_add_permitted_arns):
        interface = {
            'InterfaceId': 'CloudGemFramework_test_1_0_0',
            'InterfaceUrl': 'test-interface-url',
            'InterfaceSwagger': 'test-interface-swagger'
        }

        event = {
            'ResourceProperties': {
                'ConfigurationBucket':
                'TestBucket',
                'ConfigurationKey':
                'TestInputKey',
                'FunctionName':
                'TestFunction',
                'Runtime':
                'TestRuntime',
                'Settings': {
                    'TestSettingKey1': 'TestSettingValue1',
                    'TestSettingKey2': 'TestSettingValue2'
                },
                'Services': [{
                    "InterfaceId": "CloudGemFramework_test_1_0_0",
                    "Optional": True
                }, {
                    "InterfaceId": "Gem_TestInterface2_1_0_0",
                    "Optional": True
                }]
            },
            'StackId':
            'arn:aws:cloudformation:TestRegion:TestAccount:stack/TestStack/TestUUID',
            'LogicalResourceId': 'TestLogicalResourceId'
        }

        stack = mock.MagicMock(name='stack')
        service_directory = mock.MagicMock(name='ServiceDirectory')
        service_directory.get_interface_services.return_value = [interface]

        props = properties.load(
            event, LambdaConfigurationResourceHandler.PROPERTIES_SCHEMA)
        services = props.Services
        service = services[0]

        service_settings = {}

        permitted_arns = []

        LambdaConfigurationResourceHandler._add_service_settings(
            stack, service_directory, service, service_settings,
            permitted_arns)

        # For CloudGemFramework_* interfaces this should be called and service_settings should be populated
        service_directory.get_interface_services.assert_called_once()
        self.assertEquals(service_settings[service.InterfaceId], interface)