def test_others(self): """ GetAtt should be replaced by ${Thing.Property} """ source = { "Fn::Join": [ " ", ["The", { "Fn::Base64": "Notreallybase64" }, "is", "a", "lie"], ], } expected = { "Fn::Sub": [ "The ${Param1} is a lie", { "Param1": { "Fn::Base64": "Notreallybase64", }, }, ], } actual = cfn_flip.clean(source) self.assertEqual(expected, actual)
def test_basic_case(self): """ As simple as it gets """ source = { "Fn::Join": [ " ", ["The", "cake", "is", "a", "lie"], ], } expected = "The cake is a lie" actual = cfn_flip.clean(source) self.assertEqual(expected, actual)
def test_in_array(self): """ Converting Join to Sub should still work when the join is part of a larger array """ source = { "things": [ "Just a string", { "Fn::Join": [ " ", [ "The", { "Fn::Base64": "Notreallybase64" }, "is", "a", "lie" ], ], }, { "Another": "thing", }, ], } expected = { "things": [ "Just a string", { "Fn::Sub": [ "The ${Param1} is a lie", { "Param1": { "Fn::Base64": "Notreallybase64", }, }, ], }, { "Another": "thing", }, ], } actual = cfn_flip.clean(source) self.assertEqual(expected, actual)
def test_get_att(self): """ Base64 etc should be replaced by parameters to Sub """ source = { "Fn::Join": [ " ", ["The", { "Fn::GetAtt": ["Cake", "Hole"] }, "is", "a", "lie"], ], } expected = { "Fn::Sub": "The ${Cake.Hole} is a lie", } actual = cfn_flip.clean(source) self.assertEqual(expected, actual)
def test_ref(self): """ Refs should be replaced by ${value} """ source = { "Fn::Join": [ " ", ["The", { "Ref": "Cake" }, "is", "a", "lie"], ], } expected = { "Fn::Sub": "The ${Cake} is a lie", } actual = cfn_flip.clean(source) self.assertEqual(expected, actual)
def test_multi_level_get_att(self): """ Base64 etc should be replaced by parameters to Sub """ source = { "Fn::Join": [ " ", [ "The", { "Fn::GetAtt": ["First", "Second", "Third"] }, "is", "a", "lie" ], ], } expected = { "Fn::Sub": "The ${First.Second.Third} is a lie", } actual = cfn_flip.clean(source) self.assertEqual(expected, actual)