def test_08_package_update(self, Mock): """Test CKAN package_update works""" html_request = FakeRequest(json.dumps(self.pkg_json_found), 200, {'content-type': 'application/json'}) Mock.return_value = html_request with self.app.test_request_context('/'): # Resource that exists app = model.App(short_name='urbanpark', name='Urban Parks') user = model.User(fullname='Daniel Lombrana Gonzalez') out = self.ckan.package_update(app=app, user=user, url="http://something.com") err_msg = "The package ID should be the same" assert out['id'] == self.package_id, err_msg # Check the exception Mock.return_value = self.server_error try: self.ckan.package_update(app=app, user=user, url="http://something.com") except Exception as out: type, msg, status_code = out.args assert "Server Error" in msg, msg assert 500 == status_code, status_code assert "CKAN: package_update failed" == type, type
def test_task_run_errors(self): """Test TASK_RUN model errors.""" user = model.User(email_addr="*****@*****.**", name="johndoe", fullname="John Doe", locale="en") db.session.add(user) db.session.commit() user = db.session.query(model.User).first() app = model.App(name='Application', short_name='app', description='desc', owner_id=user.id) db.session.add(app) db.session.commit() task = model.Task(app_id=app.id) db.session.add(task) db.session.commit() task_run = model.TaskRun(app_id=None, task_id=task.id) db.session.add(task_run) assert_raises(IntegrityError, db.session.commit) db.session.rollback() task_run = model.TaskRun(app_id=app.id, task_id=None) db.session.add(task_run) assert_raises(IntegrityError, db.session.commit) db.session.rollback()
def test_05_resource_create(self, Mock): """Test CKAN resource_create works""" pkg_request = FakeRequest(json.dumps(self.pkg_json_found), 200, {'content-type': 'application/json'}) rsrc_request = FakeRequest( json.dumps(self.pkg_json_found['result']['resources'][0]), 200, {'content-type': 'text/html'}) Mock.return_value = pkg_request with self.app.test_request_context('/'): # Resource that exists app = model.App(short_name='urbanpark', name='Urban Parks') user = model.User(fullname='Daniel Lombrana Gonzalez') self.ckan.package_create(app=app, user=user, url="http://something.com") Mock.return_value = rsrc_request out = self.ckan.resource_create(name='task') err_msg = "It should create the task resource" assert out["id"] == self.task_resource_id, err_msg Mock.return_value = self.server_error try: self.ckan.resource_create(name='something-goes-wrong') except Exception as out: type, msg, status_code = out.args assert "Server Error" in msg, msg assert 500 == status_code, status_code assert "CKAN: resource_create failed" == type, type
def test_all(self): """Test MODEL works""" username = u'test-user-1' user = model.User(name=username) info = { 'total': 150, 'long_description': 'hello world' } app = model.App( name=u'My New App', short_name=u'my-new-app', info=info ) app.owner = user task_info = { 'question': 'My random question', 'url': 'my url' } task = model.Task(info=task_info) task_run_info = { 'answer': u'annakarenina' } task_run = model.TaskRun(info=task_run_info) task.app = app task_run.task = task task_run.user = user db.session.add_all([user, app, task, task_run]) db.session.commit() app_id = app.id user_id = user.id db.session.remove() app = db.session.query(model.App).get(app_id) assert app.name == u'My New App', 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 = model.User.by_name(username) assert user.apps[0].id == app_id, user
def test_app_repr(self): """Test APP model repr works.""" app = model.App(id=1, name='Application', short_name='app', description='desc', owner_id=None) assert app.__repr__() == 'App(1)'
def test_03_app_put(self): """Test API.app PUT rate limit.""" for i in range(300): app = model.App(name=str(i), short_name=str(i), description=str(i), owner_id=1) db.session.add(app) db.session.commit() url = '?api_key=%s' % (Fixtures.api_key) self.check_limit(url, 'put', 'app')
def test_all(self): """Test MODEL works""" username = u'test-user-1' user = model.User(name=username) info = { 'total': 150, 'long_description': 'hello world' } app = model.App( name=u'My New App', short_name=u'my-new-app', info=info ) app.owner = user task_info = { 'question': 'My random question', 'url': 'my url' } task = model.Task(info=task_info) task_run_info = { 'answer': u'annakarenina' } task_run = model.TaskRun(info=task_run_info) task.app = app task_run.task = task task_run.user = user model.Session.add_all([user, app, task, task_run]) model.Session.commit() app_id = app.id user_id = user.id model.Session.remove() app = model.Session.query(model.App).get(app_id) assert app.name == u'My New App', app # year would start with 201... assert app.created.startswith('201'), app.created 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 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 = model.User.by_name(username) assert user.apps[0].id == app_id, user # TODO: better testing where we actually get a random task task = model.new_task(app_id, user_id) assert task is None, 'There should be no tasks for this user' task = model.new_task(app_id) assert task, task
def test_app_errors(self): """Test APP model errors.""" app = model.App(name='Application', short_name='app', description='desc', owner_id=None) # App.owner_id shoult not be nullable db.session.add(app) assert_raises(IntegrityError, db.session.commit) db.session.rollback() # App.name shoult not be nullable user = model.User(email_addr="*****@*****.**", name="johndoe", fullname="John Doe", locale="en") db.session.add(user) db.session.commit() user = db.session.query(model.User).first() app.owner_id = user.id app.name = None db.session.add(app) assert_raises(IntegrityError, db.session.commit) db.session.rollback() app.name = '' db.session.add(app) assert_raises(IntegrityError, db.session.commit) db.session.rollback() # App.short_name shoult not be nullable app.name = "Application" app.short_name = None db.session.add(app) assert_raises(IntegrityError, db.session.commit) db.session.rollback() app.short_name = '' db.session.add(app) assert_raises(IntegrityError, db.session.commit) db.session.rollback() # App.description shoult not be nullable db.session.add(app) app.short_name = "app" app.description = None assert_raises(IntegrityError, db.session.commit) db.session.rollback() app.description = '' db.session.add(app) assert_raises(IntegrityError, db.session.commit) db.session.rollback()
def test_00_limits_query(self): """Test API GET limits works""" for i in range(30): app = model.App(name="name%s" % i, short_name="short_name%s" % i, description="desc", owner_id=1) info = dict(a=0) task = model.Task(app_id=1, info=info) taskrun = model.TaskRun(app_id=1, task_id=1) db.session.add(app) db.session.add(task) db.session.add(taskrun) db.session.commit() res = self.app.get('/api/app') data = json.loads(res.data) assert len(data) == 20, len(data) res = self.app.get('/api/app?limit=10') data = json.loads(res.data) assert len(data) == 10, len(data) res = self.app.get('/api/app?limit=10&offset=10') data = json.loads(res.data) assert len(data) == 10, len(data) assert data[0].get('name') == 'name9' res = self.app.get('/api/task') data = json.loads(res.data) assert len(data) == 20, len(data) res = self.app.get('/api/taskrun') data = json.loads(res.data) assert len(data) == 20, len(data) # Register 30 new users to test limit on users too for i in range(30): self.register(fullname="User%s" %i, username="******" %i) res = self.app.get('/api/user') data = json.loads(res.data) assert len(data) == 20, len(data) res = self.app.get('/api/user?limit=10') data = json.loads(res.data) print data assert len(data) == 10, len(data) res = self.app.get('/api/user?limit=10&offset=10') data = json.loads(res.data) assert len(data) == 10, len(data) assert data[0].get('name') == 'user7', data
def _test_get_breadth_first_task(self, user=None): self.del_task_runs() if user: short_name = 'xyzuser' else: short_name = 'xyznouser' app = model.App(short_name=short_name, name=short_name, description=short_name) owner = db.session.query(model.User).get(1) app.owner = owner task = model.Task(app=app, state='0', info={}) task2 = model.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 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