async def test_bulk_create_in_transaction_fail(self): with self.assertRaises(IntegrityError): async with in_transaction(): await UniqueName.bulk_create( [UniqueName(name=str(i)) for i in range(10)] + [UniqueName(name=str(i)) for i in range(10)] )
async def test_bulk_create_ignore_conflicts(self): name1 = UniqueName(name="name1") name2 = UniqueName(name="name2") await UniqueName.bulk_create([name1, name2]) await UniqueName.bulk_create([name1, name2], ignore_conflicts=True) with self.assertRaises(IntegrityError): await UniqueName.bulk_create([name1, name2])
async def test_bulk_create_update_fields(self): await UniqueName.bulk_create([UniqueName(name="name")]) await UniqueName.bulk_create( [UniqueName(name="name", optional="optional")], update_fields=["optional"], on_conflict=["name"], ) all_ = await UniqueName.all().values("name", "optional") self.assertListSortEqual(all_, [{"name": "name", "optional": "optional"}])
async def test_bulk_create_mix_specified(self): await UniqueName.bulk_create( [UniqueName(id=id_) for id_ in range(10000, 11000)] + [UniqueName() for _ in range(1000)] ) all_ = await UniqueName.all().values("id", "name") self.assertEqual(len(all_), 2000) self.assertListSortEqual( all_[:1000], [{"id": id_, "name": None} for id_ in range(10000, 11000)] ) inc = all_[1000]["id"] self.assertListSortEqual( all_[1000:], [{"id": val + inc, "name": None} for val in range(1000)] )
async def test_concurrent_get_or_create(self): unas = await asyncio.gather( *[UniqueName.get_or_create(name="b") for _ in range(10)]) una_created = [una[1] for una in unas if una[1] is True] self.assertEqual(len(una_created), 1) for una in unas: self.assertEqual(una[0], unas[0][0])
async def test_bulk_create(self): await UniqueName.bulk_create([UniqueName() for _ in range(1000)]) all_ = await UniqueName.all().values("id", "name") inc = all_[0]["id"] self.assertEqual(all_, [{ "id": val + inc, "name": None } for val in range(1000)])
async def test_bulk_create_with_specified(self): await UniqueName.bulk_create( [UniqueName(id=id_) for id_ in range(1000, 2000)]) all_ = await UniqueName.all().values("id", "name") self.assertEqual(all_, [{ "id": id_, "name": None } for id_ in range(1000, 2000)])
async def test_bulk_create_with_batch_size(self): await UniqueName.bulk_create( [UniqueName(id=id_ + 1) for id_ in range(1000)], batch_size=100) all_ = await UniqueName.all().values("id", "name") self.assertListSortEqual(all_, [{ "id": val + 1, "name": None } for val in range(1000)], sorted_key="id")