Пример #1
0
    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)