class SerializationTestCase(GraphTestCase):
    def setUp(self):
        self._registry = GraphModelRegistry()
        self._registry.register(Node, NodeSerializer)
        self._registry.register(Relationship, RelationshipSerializer)

        super(SerializationTestCase, self).setUp()

    def test_node_serialization(self):
        start_node = Node.objects.create()
        start_node_serialized = self._registry.serialize_obj(start_node)
        start_node_keys = list(start_node_serialized.keys())
        expected_node_keys = ['id', 'created', 'modified']

        self.assertListEqual(start_node_keys, expected_node_keys)

    def test_relationship_serialization(self):
        start_node = Node.objects.create()
        end_node = Node.objects.create()
        relationship = Relationship.objects.create(
            start_node=start_node.pk,
            end_node=end_node.pk
        )
        relationship_serialized = self._registry.serialize_obj(relationship)
        expected_keys = ['id', 'created', 'modified', 'start_node', 'end_node', 'label']

        self.assertEqual(list(relationship_serialized.keys()), expected_keys)
        self.assertEqual(relationship_serialized.get('id'), str(relationship.id))
        self.assertEqual(relationship_serialized.get('start_node'), str(relationship.start_node))
        self.assertEqual(relationship_serialized.get('end_node'), str(relationship.end_node))

    def test_relationship_deserialization(self):
        relationship = {
            'id': '0f87ffac-d532-43e6-ad2e-4c5dfda86e83',
            'end_node': '3acfeb1e-f0d8-43b3-a9f1-32d2f632f499',
            'created': u'2015-06-26T22:07:20.089414Z',
            'modified': u'2015-06-26T22:07:20.090105Z',
            'label': u'Relationship',
            'start_node': '7f7f0f81-5833-4502-9e4c-7db484164b5d'
        }

        relationship_deserialized = self._registry.deserialize_obj(relationship, Relationship)
        self.assertEqual(relationship_deserialized.get('start_node'), uuid.UUID(relationship.get('start_node')))