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)
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