def test_transform_taupage_user_data_accepts_int_key_value(self):
        input = {'ports': {8080: 9000}}

        key, value = CloudFormationTemplateTransformer.transform_taupage_user_data_key('@taupageUserData@', input)
        expected = {
            "Fn::Base64": {
                "Fn::Join":
                    [
                        "\n",
                        [
                            "#taupage-ami-config",
                            "ports:",
                            {"Fn::Join": [": ", ["  8080", 9000]]}
                        ]
                    ]
            }
        }

        self.assertDictEqual(expected, value)
    def test_transform_taupage_user_data_accepts_joins(self):
        input = {
            "source": {"Fn::Join": [":", ["my-registry/my-app", {"Ref": "appVersion"}]]}
        }

        expected = {
            "Fn::Base64": {
                "Fn::Join": [
                    "\n",
                    [
                        "#taupage-ami-config",
                        {
                            "Fn::Join": [
                                ": ",
                                [
                                    "source",
                                    {
                                        "Fn::Join": [
                                            ":",
                                            [
                                                "my-registry/my-app",
                                                {
                                                    "Ref": "appVersion"
                                                }
                                            ]
                                        ]
                                    }
                                ]
                            ]
                        }
                    ]
                ]
            }
        }

        key, value = CloudFormationTemplateTransformer.transform_taupage_user_data_key('@taupageUserData@', input)
        # import json
        # print value
        self.assertDictEqual(expected, value)
    def test_render_taupage_user_data_accepts_multiple_sub_dicts(self):
        input = {
            "foo": {
                'baa': {'key': 'value'}
            }
        }
        expected = {'Fn::Base64':
            {
                'Fn::Join':
                    [
                        '\n',
                        [
                            '#taupage-ami-config',
                            'foo:',
                            '  baa:',
                            {'Fn::Join': [': ', ['    key', 'value']]}
                        ]
                    ]
            }
        }

        key, value = CloudFormationTemplateTransformer.transform_taupage_user_data_key('@taupageUserData@', input)
        self.assertDictEqual(expected, value)
    def test_render_taupage_user_data(self):
        input = {
            "application_id": "stackName",
            "application_version": "imageVersion",
            "environment": {
                "SSO_KEY": "mySsoKey",
                "QUEUE_URL": {"ref": "myQueueUrl"}
            }
        }
        expected = {
            "Fn::Base64": {
                "Fn::Join": [
                    "\n",
                    [
                        "#taupage-ami-config",
                        {
                            "Fn::Join": [
                                ": ",
                                [
                                    "application_id",
                                    "stackName"
                                ]
                            ]
                        },
                        {
                            "Fn::Join": [
                                ": ",
                                [
                                    "application_version",
                                    "imageVersion"
                                ]
                            ]
                        },
                        "environment:",
                        {
                            "Fn::Join": [
                                ": ",
                                [
                                    "  SSO_KEY",
                                    "mySsoKey"
                                ]
                            ]
                        },
                        {
                            "Fn::Join": [
                                ": ",
                                [
                                    "  QUEUE_URL",
                                    {
                                        "ref": "myQueueUrl"
                                    }
                                ]
                            ]
                        }
                    ]
                ]
            }
        }

        key, value = CloudFormationTemplateTransformer.transform_taupage_user_data_key('@taupageUserData@', input)

        self.assertDictEqual(expected, value)