def _test_get_breadth_first_task(self, user=None): self.del_task_runs() if user: short_name = 'xyzuser' else: short_name = 'xyznouser' category = db.session.query(Category).get(1) app = App(short_name=short_name, name=short_name, description=short_name, category=category) owner = db.session.query(User).get(1) app.owner = owner task = Task(app=app, state='0', info={}) task2 = Task(app=app, state='0', info={}) task.app = app task2.app = app db.session.add(app) db.session.add(task) db.session.add(task2) db.session.commit() taskid = task.id appid = app.id # give task2 a bunch of runs for idx in range(2): self._add_task_run(app, task2) # now check we get task without task runs as anonymous user out = pybossa.sched.get_breadth_first_task(appid) assert out.id == taskid, out # now check we get task without task runs as a user owner = db.session.query(User).get(1) out = pybossa.sched.get_breadth_first_task(appid, owner.id) assert out.id == taskid, out # now check that offset works out1 = pybossa.sched.get_breadth_first_task(appid) out2 = pybossa.sched.get_breadth_first_task(appid, offset=1) assert out1.id != out2.id, out # asking for a bigger offset (max 10) out2 = pybossa.sched.get_breadth_first_task(appid, offset=11) assert out2 is None, out self._add_task_run(app, task) out = pybossa.sched.get_breadth_first_task(appid) assert out.id == taskid, out # now add 2 more taskruns. We now have 3 and 2 task runs per task self._add_task_run(app, task) self._add_task_run(app, task) out = pybossa.sched.get_breadth_first_task(appid) assert out.id == task2.id, out
def test_anonymous_user_create_repeated_taskrun(self): """Test anonymous user cannot create a taskrun for a task to which he has previously posted a taskrun""" with self.flask_app.test_request_context('/'): self.configure_fixtures() taskrun1 = TaskRun(app_id=self.app.id, task_id=self.task.id, user_ip='127.0.0.0', info="some taskrun info") db.session.add(taskrun1) db.session.commit() taskrun2 = TaskRun(app_id=self.app.id, task_id=self.task.id, user_ip='127.0.0.0', info="a different taskrun info") assert_raises(Forbidden, getattr(require, 'taskrun').create, taskrun2) # But the user can still create taskruns for different tasks task2 = Task(app_id=self.app.id, state='0', n_answers=10) task2.app = self.app db.session.add(task2) db.session.commit() taskrun3 = TaskRun(app_id=self.app.id, task_id=task2.id, user_ip='127.0.0.0', info="some taskrun info") assert_not_raises(Exception, getattr(require, 'taskrun').create, taskrun3)
def test_all(self): """Test MODEL works""" username = u'test-user-1' user = User(name=username, fullname=username, email_addr=username) info = { 'total': 150, 'long_description': 'hello world'} app = App( name=u'My New Project', short_name=u'my-new-app', description=u'description', info=info) category = Category(name=u'cat', short_name=u'cat', description=u'cat') app.category = category app.owner = user task_info = { 'question': 'My random question', 'url': 'my url'} task = Task(info=task_info) task_run_info = {'answer': u'annakarenina'} task_run = TaskRun(info=task_run_info) task.app = app task_run.task = task task_run.app = app task_run.user = user db.session.add_all([user, app, task, task_run]) db.session.commit() app_id = app.id db.session.remove() app = db.session.query(App).get(app_id) assert app.name == u'My New Project', app # year would start with 201... assert app.created.startswith('201'), app.created assert app.long_tasks == 0, app.long_tasks assert app.hidden == 0, app.hidden assert app.time_estimate == 0, app assert app.time_limit == 0, app assert app.calibration_frac == 0, app assert app.bolt_course_id == 0 assert len(app.tasks) == 1, app assert app.owner.name == username, app out_task = app.tasks[0] assert out_task.info['question'] == task_info['question'], out_task assert out_task.quorum == 0, out_task assert out_task.state == "ongoing", out_task assert out_task.calibration == 0, out_task assert out_task.priority_0 == 0, out_task assert len(out_task.task_runs) == 1, out_task outrun = out_task.task_runs[0] assert outrun.info['answer'] == task_run_info['answer'], outrun assert outrun.user.name == username, outrun user = User.by_name(username) assert user.apps[0].id == app_id, user
def test_all(self): """Test MODEL works""" username = u'test-user-1' user = User(name=username, fullname=username, email_addr=username) info = {'total': 150, 'long_description': 'hello world'} app = App(name=u'My New Project', short_name=u'my-new-app', description=u'description', info=info) category = Category(name=u'cat', short_name=u'cat', description=u'cat') app.category = category app.owner = user task_info = {'question': 'My random question', 'url': 'my url'} task = Task(info=task_info) task_run_info = {'answer': u'annakarenina'} task_run = TaskRun(info=task_run_info) task.app = app task_run.task = task task_run.app = app task_run.user = user db.session.add_all([user, app, task, task_run]) db.session.commit() app_id = app.id db.session.remove() app = db.session.query(App).get(app_id) assert app.name == u'My New Project', app # year would start with 201... assert app.created.startswith('201'), app.created assert app.long_tasks == 0, app.long_tasks assert app.hidden == 0, app.hidden assert app.time_estimate == 0, app assert app.time_limit == 0, app assert app.calibration_frac == 0, app assert app.bolt_course_id == 0 assert len(app.tasks) == 1, app assert app.owner.name == username, app out_task = app.tasks[0] assert out_task.info['question'] == task_info['question'], out_task assert out_task.quorum == 0, out_task assert out_task.state == "ongoing", out_task assert out_task.calibration == 0, out_task assert out_task.priority_0 == 0, out_task assert len(out_task.task_runs) == 1, out_task outrun = out_task.task_runs[0] assert outrun.info['answer'] == task_run_info['answer'], outrun assert outrun.user.name == username, outrun user = User.by_name(username) assert user.apps[0].id == app_id, user
def create_task_and_run(cls, task_info, task_run_info, app, user, order): task = Task(app_id=1, state='0', info=task_info, n_answers=10) task.app = app # Taskruns will be assigned randomly to a signed user or an anonymous one if random.randint(0, 1) == 1: task_run = TaskRun(app_id=1, task_id=1, user_id=1, info=task_run_info) task_run.user = user else: task_run = TaskRun(app_id=1, task_id=1, user_ip='127.0.0.%s' % order, info=task_run_info) task_run.task = task return task, task_run
def create_task_and_run(cls,task_info, task_run_info, app, user, order): task = Task(app_id = 1, state = '0', info = task_info, n_answers=10) task.app = app # Taskruns will be assigned randomly to a signed user or an anonymous one if random.randint(0,1) == 1: task_run = TaskRun( app_id = 1, task_id = 1, user_id = 1, info = task_run_info) task_run.user = user else: task_run = TaskRun( app_id = 1, task_id = 1, user_ip = '127.0.0.%s' % order, info = task_run_info) task_run.task = task return task, task_run