def setUp(self):
     self.transform = VoteTransform()
class VoteTransformTest(unittest.TestCase):
    """ Test suite for vote_transform.py."""

    def setUp(self):
        self.transform = VoteTransform()

    def test_custom_class_transform(self):
        """ Verifies that custom classes can be properly encoded and decoded."""
        for each_class in db_constants.DB_CUSTOM_CLASSES:
            class_object = each_class()
            encoding = self.transform.transform_incoming(class_object)
            output = self.transform.transform_outgoing(encoding)
            self.assertTrue(type(output) is type(class_object))
            self.assertEqual(output.__dict__, class_object.__dict__)

    def test_custom_class_in_json_transform(self):
        """ Verifies custom classes within json are encoded and decoded."""
        for each_class in db_constants.DB_CUSTOM_CLASSES:
            class_object = each_class()
            json = {"test": class_object}

            encoding = self.transform.transform_incoming(json)
            output = self.transform.transform_outgoing(encoding)

            self.assertTrue(type(output) is dict)
            self.assertEqual(output["test"].__dict__, class_object.__dict__)

    def test_custom_class_in_custom_class_transform(self):
        """ Verifies a custom classes within another is handled properly."""
        for each_class in db_constants.DB_CUSTOM_CLASSES:
            class_object = each_class()
            class_object2 = each_class()
            class_object.test = class_object2

            encoding = self.transform.transform_incoming(class_object)
            output = self.transform.transform_outgoing(encoding)

            self.assertTrue(type(output) is type(class_object))
            self.assertEqual(output.test.__dict__, class_object2.__dict__)


    def test_list_transform(self):
        """ Verifies custom classes within lists are encoded and decoded."""
        for each_class in db_constants.DB_CUSTOM_CLASSES:
            class_object_list = [each_class(), each_class()]
            class_object_list[1].extra = "something different"
            json = {"test": class_object_list}

            encoding = self.transform.transform_incoming(json)
            output = self.transform.transform_outgoing(encoding)

            self.assertTrue(type(output) is dict)
            self.assertEqual(len(class_object_list), len(output["test"]))

            for input_class, output_class in zip(class_object_list, output["test"]):
                self.assertEqual(input_class.__dict__, output_class.__dict__)

    def test_dict_transform(self):
        """ Verifies custom classes in dictionaries are encoded and decoded."""
        for each_class in db_constants.DB_CUSTOM_CLASSES:
            class_object = each_class()
            json = {"test": {"test2" : class_object }}

            encoding = self.transform.transform_incoming(json)
            output = self.transform.transform_outgoing(encoding)

            output_class = output["test"]["test2"]
            self.assertTrue(type(output) is dict)
            self.assertEqual(output_class.__dict__, class_object.__dict__)