def test_decrypt_validate_and_encrypt(self):
        """This test takes encrypted data, validates and then encrypt"""
        test_input = {
            'name': 'LcyInWDZsUv22ocRHM3+yg7QO9ArjlhP2R9v5CSZIRc=',
            'address': 'LcyInWDZsUv22ocRHM3+yryn2OYg2jesvpgClxA/sdQ=',
        }

        counter_dict = {
            'name': {
                'validator': 'str',
                'regex': 'John Doe',
                'pre_transform': 'decode',
                'transform': 'encode'
            },
            'address': {
                'validator': 'str',
                'regex': 'John Doe Street',
                'pre_transform': 'decode',
                'transform': 'encode'
            },
        }
        validated_items = maat.scale(test_input, counter_dict)
        difference = ddiff(validated_items, self.expected_encoded)

        # if the differ finds no difference a empty dictionary is returned
        self.assertEqual(difference, {})
    def test_decrypt_validate_and_encrypt_fail_on_name(self):
        """This test takes encrypted data, validates and before
        encypting fails because the value of name is not valid"""
        test_input = {
            'name': 'LcyInWDZsUv22ocRHM3+yg7QO9ArjlhP2R9v5CSZIRc=',
            'address': 'LcyInWDZsUv22ocRHM3+yryn2OYg2jesvpgClxA/sdQ=',
        }

        counter_dict = {
            'name': {
                'validator': 'str',
                'regex': 'Jane',
                'pre_transform': 'decode',
                'transform': 'encode'
            },
            'address': {
                'validator': 'str',
                'regex': 'John Doe Street',
                'pre_transform': 'decode',
                'transform': 'encode'
            },
        }

        err_msg = 'key: "name" contains invalid item "John Doe": does not adhere to regex rules Jane'
        with self.assertRaisesRegex(maat.Invalid, err_msg):
            validated_items = maat.scale(test_input, counter_dict)
    def test_validate_and_transform_incoming_data(self):
        """This test takes data, validates and then encrypt"""
        test_input = {
            'name': 'John Doe',
            'address': 'John Doe Street',
        }
        counter_dict = {
            'name': {
                'validator': 'str',
                'regex': 'John Doe',
                'transform': 'encode'
            },
            'address': {
                'validator': 'str',
                'regex': 'John Doe Street',
                'transform': 'encode'
            },
        }
        validated_items = maat.scale(test_input, counter_dict)
        difference = ddiff(validated_items, self.expected_encoded)

        # if the differ finds no difference a empty dictionary is returned
        self.assertEqual(difference, {})