def test_ref_list(historian: mincepy.Historian): """Test references list""" list1 = mincepy.RefList() list2 = mincepy.RefList() car = Car() list1.append(car) list2.append(car) # Test iteration for entry in list1: assert entry is car # Reference condition satisfied assert list1[0] is list2[0] # Now delete everything, reload, and make sure the condition is still satisfied list1_id, list2_id = historian.save(list1, list2) assert car.is_saved( ), "The container should automatically save all it's entries saved" del list1, list2, car list1_loaded = historian.load(list1_id) list2_loaded = historian.load(list2_id) assert len(list1_loaded) == 1 assert len(list2_loaded) == 1 assert isinstance(list1_loaded[0], Car) assert list1_loaded[0] is list2_loaded[0]
def populate(historian=None): historian = historian or mincepy.get_historian() colours = ('red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet') makes = ('honda', 'ferrari', 'zonda', 'fiat') cars = [] for make in makes: for colour in colours: # Make some cars car = Car(make, colour) historian.save(car) cars.append(car) # Now randomly change some of them for _ in range(int(len(cars) / 4)): car = random.choice(cars) car.colour = random.choice(colours) car.save() # Now change one a number of times car = random.choice(cars) for colour in colours: car.colour = colour car.save() people = mincepy.RefList() for name in ('martin', 'sonia', 'gavin', 'upul', 'martin', 'sebastiaan', 'irene'): person = Person(name, random.randint(20, 40)) historian.save(person) people.append(person) historian.save(people)
def test_ref_list_none(historian: mincepy.Historian): """Test that we can store None in a ref list.""" lrlist = mincepy.RefList() lrlist.append(None) assert lrlist[-1] is None lrdict_id = lrlist.save() del lrlist loaded = historian.load(lrdict_id) # type: mincepy.RefList assert loaded[-1] is None
def test_meta_sticky_children(historian: mincepy.Historian): """Catch bug where metadata was not being set on being references by other objects""" garage = mincepy.RefList() garage.append(Car()) garage.append(Car()) historian.meta.sticky['owner'] = 'martin' garage_id = garage.save() car0_id = garage[0].save(meta={'for_sale': True}) car1_id = garage[1].save(meta={'owner': 'james'}) del garage assert historian.meta.get(garage_id) == {'owner': 'martin'} assert historian.meta.get(car0_id) == {'owner': 'martin', 'for_sale': True} assert historian.meta.get(car1_id) == {'owner': 'james'}