def test_snapshot_list(self): a = TestLinkedList('A') b = TestLinkedList('B') c = TestLinkedList('C') a.next = b b.next = c snapshot = JsonSnapshot() self.assertIsNone(snapshot.find_entity_for_object(b)) self.assertIsNone(snapshot.find_entity_for_object(b)) # Still none snapshot.add_object(a) json_object = snapshot.to_json_object() have_b = snapshot.find_entity_for_object(b) self.assertEquals(2, have_b.id) entity_b = snapshot.make_entity_for_object(b) self.assertEquals(id(have_b), id(entity_b)) have_c = snapshot.find_entity_for_object(c) entity_c = snapshot.make_entity_for_object(c) self.assertEquals(id(have_c), id(entity_c)) self.assertEquals(3, entity_c.id) expect = { '_subject_id': 1, '_type': 'JsonSnapshot', '_entities': [ {'_id': 1, 'name': 'A', '_edges': [{'_to': 2}]}, {'_id': 2, 'name': 'B', '_edges': [{'_to': 3}]}, {'_id': 3, 'name': 'C'}]} self.assertItemsEqual(expect, json_object)
def test_to_json_snapshot_value(self): """Test conversion of values.""" snapshot = JsonSnapshot() # Primitive types dont affect snapshot. self.assertEquals(2, JsonSnapshotHelper.ToJsonSnapshotValue(2, snapshot)) self.assertEquals( 2.0, JsonSnapshotHelper.ToJsonSnapshotValue(2.0, snapshot)) self.assertEquals( '2', JsonSnapshotHelper.ToJsonSnapshotValue('2', snapshot)) self.assertEquals( [1, 2, 3], JsonSnapshotHelper.ToJsonSnapshotValue([1, 2, 3], snapshot)) d = {'a': 'A', 'b': 2, 'c': [1, 2, 3]} self.assertEquals( d, JsonSnapshotHelper.ToJsonSnapshotValue(d, snapshot)) self.assertEquals({'_type': 'JsonSnapshot'}, snapshot.to_json_object()) # Wrapped values dont affect snapshot self.assertEquals( d, JsonSnapshotHelper.ToJsonSnapshotValue(TestWrappedValue(d), snapshot)) self.assertEquals({'_type': 'JsonSnapshot'}, snapshot.to_json_object()) # types dont affect snapshot self.assertEquals( 'type dict', JsonSnapshotHelper.ToJsonSnapshotValue(dict, snapshot)) self.assertEquals({'_type': 'JsonSnapshot'}, snapshot.to_json_object()) # methods dont affect snapshot self.assertEquals( 'Method "test_to_json_snapshot_value"', JsonSnapshotHelper.ToJsonSnapshotValue( self.test_to_json_snapshot_value, snapshot)) self.assertEquals({'_type': 'JsonSnapshot'}, snapshot.to_json_object()) # exceptions dont affect snapshot self.assertEquals( 'KeyError: \'Hello, World\'', JsonSnapshotHelper.ToJsonSnapshotValue(KeyError('Hello, World'), snapshot)) self.assertEquals({'_type': 'JsonSnapshot'}, snapshot.to_json_object()) # JsonSnapshotableEntity definition written into snapshot ll = TestLinkedList('X') ref = JsonSnapshotHelper.ToJsonSnapshotValue(ll, snapshot) self.assertEquals({'_type': 'EntityReference', '_id': 1}, ref) expect = {'_type': 'JsonSnapshot', '_subject_id': 1, '_entities': {1: {'_id': 1, 'class': 'type TestLinkedList', 'name': 'X'}} } self.assertEquals(expect, snapshot.to_json_object()) self.assertEquals(1, snapshot.find_entity_for_object(ll).id)
def test_snapshot_make_entity(self): """Test snapshotting JsonSnapshotableEntity objects into entities.""" elem = TestLinkedList('Hello') snapshot = JsonSnapshot() entity = snapshot.make_entity_for_object(elem) found = snapshot.find_entity_for_object(elem) self.assertEquals(found, entity) self.assertEquals(id(found), id(entity)) self.assertItemsEqual({'_subject_id': 1, '_type': 'JsonSnapshot', '_entities': [{'_id': 1, 'name': 'Hello'}]}, snapshot.to_json_object())
def test_snapshot_make_transitive_entity(self): """Test snapshotting compound entities.""" elem = TestLinkedList('First', next_elem=TestLinkedList('Second')) snapshot = JsonSnapshot() snapshot.make_entity_for_object(elem) entity = snapshot.make_entity_for_object(elem.next) found = snapshot.find_entity_for_object(elem.next) self.assertEquals(found, entity) self.assertEquals(id(found), id(entity)) self.assertItemsEqual({'_subject_id': 1, '_type': 'JsonSnapshot', '_entities': [{'_id': 1, 'name': 'First', '_edges':[{'_to': 2}]}, {'_id': 2, 'name': 'Second'}]}, snapshot.to_json_object())
def test_snapshot_make_entity(self): """Test snapshotting JsonSnapshotableEntity objects into entities.""" elem = TestLinkedList('Hello') snapshot = JsonSnapshot() entity = snapshot.make_entity_for_object(elem) found = snapshot.find_entity_for_object(elem) self.assertEquals(found, entity) self.assertEquals(id(found), id(entity)) self.assertItemsEqual( { '_subject_id': 1, '_type': 'JsonSnapshot', '_entities': [{ '_id': 1, 'name': 'Hello' }] }, snapshot.to_json_object())
def test_to_json_snapshot_value(self): """Test conversion of values.""" snapshot = JsonSnapshot() # Primitive types dont affect snapshot. self.assertEquals(2, JsonSnapshotHelper.ToJsonSnapshotValue(2, snapshot)) self.assertEquals( 2.0, JsonSnapshotHelper.ToJsonSnapshotValue(2.0, snapshot)) self.assertEquals( '2', JsonSnapshotHelper.ToJsonSnapshotValue('2', snapshot)) self.assertEquals([1, 2, 3], JsonSnapshotHelper.ToJsonSnapshotValue([1, 2, 3], snapshot)) d = {'a': 'A', 'b': 2, 'c': [1, 2, 3]} self.assertEquals(d, JsonSnapshotHelper.ToJsonSnapshotValue(d, snapshot)) self.assertEquals({'_type': 'JsonSnapshot'}, snapshot.to_json_object()) # Wrapped values dont affect snapshot self.assertEquals( d, JsonSnapshotHelper.ToJsonSnapshotValue(TestWrappedValue(d), snapshot)) self.assertEquals({'_type': 'JsonSnapshot'}, snapshot.to_json_object()) # types dont affect snapshot self.assertEquals( 'type dict', JsonSnapshotHelper.ToJsonSnapshotValue(dict, snapshot)) self.assertEquals({'_type': 'JsonSnapshot'}, snapshot.to_json_object()) # methods dont affect snapshot self.assertEquals( 'Method "test_to_json_snapshot_value"', JsonSnapshotHelper.ToJsonSnapshotValue( self.test_to_json_snapshot_value, snapshot)) self.assertEquals({'_type': 'JsonSnapshot'}, snapshot.to_json_object()) # exceptions dont affect snapshot self.assertEquals( 'KeyError: \'Hello, World\'', JsonSnapshotHelper.ToJsonSnapshotValue(KeyError('Hello, World'), snapshot)) self.assertEquals({'_type': 'JsonSnapshot'}, snapshot.to_json_object()) # JsonSnapshotableEntity definition written into snapshot ll = TestLinkedList('X') ref = JsonSnapshotHelper.ToJsonSnapshotValue(ll, snapshot) self.assertEquals({'_type': 'EntityReference', '_id': 1}, ref) expect = { '_type': 'JsonSnapshot', '_subject_id': 1, '_entities': { 1: { '_id': 1, 'class': 'type TestLinkedList', 'name': 'X' } } } self.assertEquals(expect, snapshot.to_json_object()) self.assertEquals(1, snapshot.find_entity_for_object(ll).id)