Exemplo n.º 1
0
    def test_story(self):
        from avalon import story
        from avalon.core import Story

        @story
        def get_one():
            return 1

        self.assertTrue(isinstance(get_one, Story))
        self.assertEqual(get_one.weight, 100)
        self.assertEqual(get_one.timeout, 10)
        self.assertEqual(get_one(), 1)

        @story(chance=50, weight=50, timeout=0.2)
        def maybe_two(data=None):
            return 2

        self.assertTrue(isinstance(maybe_two, Story))
        self.assertEqual(maybe_two.timeout, 0.2)
        results = list(maybe_two() for _ in range(30))
        self.assertTrue(2 in results)
        self.assertTrue(None in results)

        st = get_one & maybe_two
        self.assertEqual(len(st.queue), 2)
        results = list(st() for _ in range(60))
        self.assertTrue(1 in results)
        self.assertTrue(2 in results)
        self.assertFalse(None in results)

        st = get_one | maybe_two
        self.assertEqual(len(st.queue), 2)
        results = list(st() for _ in range(60))
        self.assertTrue(1 in results)
        self.assertTrue(2 in results)
        self.assertTrue(None in results)

        @story
        def get_three(param=None):
            return 3

        st = get_one & (maybe_two | get_three)
        results = list(st() for _ in range(60))
        self.assertTrue(1 in results)
        self.assertTrue(2 in results)
        self.assertTrue(3 in results)
        self.assertFalse(None in results)

        g = iter(st)
        actions = list(g)
        self.assertEqual(len(actions), 2)

        @story(cycle=3)
        def get_twice(pipe=1):
            pipe += 1
            return pipe

        self.assertEqual(get_twice.cycle, 3)
        self.assertEqual(get_twice(), 4)

        st = story(get_twice, cycle=2)
        self.assertEqual(st.cycle, 2)
        self.assertEqual(st(1), 3)
Exemplo n.º 2
0
        post = Post.objects.order_by('?')[0]

    mixer.blend(
        Comment, post=post, user=mixer.select(is_active=True))

    return post


@story
def make_rating(post=None):
    if not post:
        post = Post.objects.order_by('?')[0]

    post.rating += 1
    post.save()
    return post


avalon.register(create_user & approve_user)
avalon.register(make_rating, timeout=10)
avalon.register(write_post, timeout=20)
avalon.register(write_post & (
    story(write_comment, chance=30, cycle=5) | make_rating
))

if __name__ == 'main':
    avalon.run()


# lint_ignore=C0110