def test_unique_put(self): # Ensure empty starting DB result = Unique().query().fetch(limit=None) self.assertFalse(result) # Test basic functionality with blocking DB calls kind1 = "foo" str1 = "bar" kind2 = "baz" str2 = "qux" result = Unique.get_next(kind1, str1) self.assertEqual(str1 + "1", result) result = Unique.get_next(kind1, str1) self.assertEqual(str1 + "2", result) result = Unique.get_next(kind1, str2) self.assertEqual(str2 + "1", result) result = Unique.get_next(kind2, str1) self.assertEqual(str1 + "1", result) # Test raw entity manipulation (no shard) ent = Unique.get_raw_entity(kind1, str1) ent_moot = ent.get_and_increment() self.assertEqual(3, ent_moot) ent_moot = ent.get_and_increment() self.assertEqual(4, ent_moot) # ...and again, with manual sharding. shard = UniqueShard.get_or_create(kind1, str1) ent = Unique.get_raw_entity(kind1, str1, shard=shard) ent_moot = ent.get_and_increment() self.assertEqual(5, ent_moot) ent_moot = ent.get_and_increment() self.assertEqual(6, ent_moot)