Esempio n. 1
0
    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
Esempio n. 2
0
    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()
Esempio n. 3
0
    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
Esempio n. 4
0
    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
Esempio n. 5
0
    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)'
Esempio n. 6
0
    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')
Esempio n. 7
0
    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
Esempio n. 8
0
    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()
Esempio n. 9
0
    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
Esempio n. 10
0
    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