def test_parse_list_in_dictionary(self):
        given_data = {
            "List": {
                "L": [{
                    "S": "Hello World!"
                }, {
                    "N": "1337"
                }, {
                    "N": "13.37"
                }, {
                    "B": "dGhpcyB0ZXh0IGlzIGJhc2U2NC1lbmNvZGVk"
                }, {
                    "SS": ["Hello", "World", "!"]
                }, {
                    "NS": ["1337", "13.37"]
                }, {
                    "BS": ["U3Vubnk=", "UmFpbnk="]
                }]
            }
        }
        expected_data = {
            "List": [
                "Hello World!", 1337, 13.37, b"this text is base64-encoded",
                ["Hello", "World", "!"], [1337, 13.37], [b"Sunny", b"Rainy"]
            ]
        }

        self.assertEqual(expected_data, parse(given_data))
def handler(event, context):
    try:
        dynamodb = boto3.resource("dynamodb").Table(COOKIES_DYNAMO_TABLE)

        for record in event['Records']:
            entry = parse(record["dynamodb"]["NewImage"])
            cookie_item = dynamodb.get_item(Key={"id": entry['cookie_id']})["Item"]

            print(cookie_item)
            cookie_item['quantity'] = cookie_item['quantity'] - entry['quantity']

            dynamodb.put_item(Item=cookie_item)

    except Exception as e:
        print("There was a problem: {}".format(e))
    def test_parse_map_in_dictionary(self):
        given_data = {
            "Map": {
                "M": {
                    "String": {
                        "S": "Hello World!"
                    },
                    "Integer": {
                        "N": "1337"
                    },
                    "Float": {
                        "N": "13.37"
                    },
                    "Bytes": {
                        "B": "dGhpcyB0ZXh0IGlzIGJhc2U2NC1lbmNvZGVk"
                    },
                    "StringSet": {
                        "SS": ["Hello", "World", "!"]
                    },
                    "NumberSet": {
                        "NS": ["1337", "13.37"]
                    },
                    "ByteSet": {
                        "BS": ["U3Vubnk=", "UmFpbnk="]
                    }
                }
            }
        }
        expected_data = {
            "Map": {
                "String": "Hello World!",
                "Integer": 1337,
                "Float": 13.37,
                "Bytes": b"this text is base64-encoded",
                "StringSet": ["Hello", "World", "!"],
                "NumberSet": [1337, 13.37],
                "ByteSet": [b"Sunny", b"Rainy"]
            }
        }

        self.assertEqual(expected_data, parse(given_data))
    def test_parse_string_type_in_dictionary(self):
        given_data = {"String": {"S": "Hello World!"}}
        expected_data = {"String": "Hello World!"}

        self.assertEqual(expected_data, parse(given_data))
    def test_parse_byte_set_in_dictionary(self):
        given_data = {"ByteSet": {"BS": ["U3Vubnk=", "UmFpbnk="]}}
        expected_data = {"ByteSet": [b"Sunny", b"Rainy"]}

        self.assertEqual(expected_data, parse(given_data))
    def test_parse_number_set_in_dictionary(self):
        given_data = {"NumberSet": {"NS": ["1337", "13.37"]}}
        expected_data = {"NumberSet": [1337, 13.37]}

        self.assertEqual(expected_data, parse(given_data))
    def test_parse_string_set_in_dictionary(self):
        given_data = {"StringSet": {"SS": ["Hello", "World", "!"]}}
        expected_data = {"StringSet": ["Hello", "World", "!"]}

        self.assertEqual(expected_data, parse(given_data))
    def test_parse_bytes_type_in_dictionary(self):
        given_data = {"Bytes": {"B": "dGhpcyB0ZXh0IGlzIGJhc2U2NC1lbmNvZGVk"}}
        expected_data = {"Bytes": b"this text is base64-encoded"}

        self.assertEqual(expected_data, parse(given_data))
    def test_parse_float_type_in_dictionary(self):
        given_data = {"Number": {"N": "13.37"}}
        expected_data = {"Number": 13.37}

        self.assertEqual(expected_data, parse(given_data))
    def test_parse_does_not_modify_input_object(self):
        given_data = {"String": {"S": "Hello World!"}}
        expected_data = {"String": "Hello World!"}

        self.assertEqual(expected_data, parse(given_data))
        self.assertNotEqual(expected_data, given_data)
    def test_parse_multiple_types_in_dictionary(self):
        given_data = {
            "String": {
                "S": "Hello World!"
            },
            "Integer": {
                "N": "1337"
            },
            "Float": {
                "N": "13.37"
            },
            "Bytes": {
                "B": "dGhpcyB0ZXh0IGlzIGJhc2U2NC1lbmNvZGVk"
            },
            "StringSet": {
                "SS": ["Hello", "World", "!"]
            },
            "NumberSet": {
                "NS": ["1337", "13.37"]
            },
            "ByteSet": {
                "BS": ["U3Vubnk=", "UmFpbnk="]
            },
            "Map": {
                "M": {
                    "String": {
                        "S": "Hello World!"
                    },
                    "Integer": {
                        "N": "1337"
                    },
                    "Float": {
                        "N": "13.37"
                    },
                    "Bytes": {
                        "B": "dGhpcyB0ZXh0IGlzIGJhc2U2NC1lbmNvZGVk"
                    },
                    "StringSet": {
                        "SS": ["Hello", "World", "!"]
                    },
                    "NumberSet": {
                        "NS": ["1337", "13.37"]
                    },
                    "ByteSet": {
                        "BS": ["U3Vubnk=", "UmFpbnk="]
                    }
                }
            },
            "List": {
                "L": [{
                    "S": "Hello World!"
                }, {
                    "N": "1337"
                }, {
                    "N": "13.37"
                }, {
                    "B": "dGhpcyB0ZXh0IGlzIGJhc2U2NC1lbmNvZGVk"
                }, {
                    "SS": ["Hello", "World", "!"]
                }, {
                    "NS": ["1337", "13.37"]
                }, {
                    "BS": ["U3Vubnk=", "UmFpbnk="]
                }]
            },
            "DoesntExist": {
                "NULL": True
            },
            "BoolTrue": {
                "BOOL": True
            },
            "BoolFalse": {
                "BOOL": False
            }
        }
        expected_data = {
            "String":
            "Hello World!",
            "Integer":
            1337,
            "Float":
            13.37,
            "Bytes":
            b"this text is base64-encoded",
            "StringSet": ["Hello", "World", "!"],
            "NumberSet": [1337, 13.37],
            "ByteSet": [b"Sunny", b"Rainy"],
            "Map": {
                "String": "Hello World!",
                "Integer": 1337,
                "Float": 13.37,
                "Bytes": b"this text is base64-encoded",
                "StringSet": ["Hello", "World", "!"],
                "NumberSet": [1337, 13.37],
                "ByteSet": [b"Sunny", b"Rainy"]
            },
            "List": [
                "Hello World!", 1337, 13.37, b"this text is base64-encoded",
                ["Hello", "World", "!"], [1337, 13.37], [b"Sunny", b"Rainy"]
            ],
            "DoesntExist":
            None,
            "BoolTrue":
            True,
            "BoolFalse":
            False
        }

        self.assertEqual(expected_data, parse(given_data))
    def test_parse_bool_type_in_dictionary(self):
        given_data = {"BoolTrue": {"BOOL": True}, "BoolFalse": {"BOOL": False}}
        expected_data = {"BoolTrue": True, "BoolFalse": False}

        self.assertEqual(expected_data, parse(given_data))
    def test_parse_null_type_in_dictionary(self):
        given_data = {"DoesntExist": {"NULL": True}}
        expected_data = {"DoesntExist": None}

        self.assertEqual(expected_data, parse(given_data))
    def test_parse_list_of_string_types(self):
        given_data = [{"first": {"S": "Hello"}}, {"second": {"S": "World"}}]
        expected_data = [{"first": "Hello"}, {"second": "World"}]

        self.assertEqual(expected_data, parse(given_data))