Exemplo n.º 1
0
    def test_register_form_with_upref_mdata_with_invalid_preferences(self):
        import pybossa.core
        pybossa.core.upref_mdata_choices = self.upref_mdata_valid_choices

        form_data = dict(languages="somelang",
                         locations="someloc",
                         user_type="someutype",
                         timezone="ZZZ")
        form = UserPrefMetadataForm(MultiDict(form_data))
        form.set_upref_mdata_choices()
        assert not form.validate()
        expected_form_errors = {
            'work_hours_to': [
                'Work Hours From, Work Hours To, and Timezone must be filled out for submission'
            ],
            'locations': [u"'someloc' is not a valid choice for this field"],
            'user_type': [u'Not a valid choice'],
            'languages': [u"'somelang' is not a valid choice for this field"],
            'work_hours_from': [
                'Work Hours From, Work Hours To, and Timezone must be filled out for submission'
            ],
            'timezone': [
                u'Not a valid choice',
                'Work Hours From, Work Hours To, and Timezone must be filled out for submission'
            ]
        }
        assert form.errors == expected_form_errors
Exemplo n.º 2
0
    def test_register_form_with_upref_mdata_with_invalid_language(self):
        import pybossa.core
        pybossa.core.upref_mdata_choices = self.upref_mdata_valid_choices

        form_data = dict(languages="somelang", locations="uk",
                        user_type="Researcher", timezone="")
        form = UserPrefMetadataForm(MultiDict(form_data))
        form.set_upref_mdata_choices()
        assert not form.validate()
Exemplo n.º 3
0
def add_metadata(name):
    """
    Admin can save metadata for selected user.
    Regular user can save their own metadata.

    Redirects to public profile page for selected user.

    """
    user = user_repo.get_by_name(name=name)
    (can_update, disabled_fields) = can_update_user_info(current_user, user)
    if not can_update:
        abort(403)
    form_data = get_form_data(request, user, disabled_fields)
    form = UserPrefMetadataForm(form_data,
                                can_update=(can_update, disabled_fields))
    form.set_upref_mdata_choices()

    if not form.validate():
        if current_user.id == user.id:
            user_dict = cached_users.get_user_summary(user.name)
        else:
            user_dict = cached_users.public_get_user_summary(user.name)
        projects_contributed = cached_users.projects_contributed_cached(
            user.id)
        projects_created = cached_users.published_projects_cached(user.id)
        total_projects_contributed = '{} / {}'.format(
            cached_users.n_projects_contributed(user.id), n_published())
        percentage_tasks_completed = user_dict['n_answers'] * 100 / (
            n_total_tasks() or 1)
        if current_user.is_authenticated and current_user.admin:
            draft_projects = cached_users.draft_projects(user.id)
            projects_created.extend(draft_projects)
        title = "%s · User Profile" % user.name
        flash("Please fix the errors", 'message')
        return render_template(
            '/account/public_profile.html',
            title=title,
            user=user,
            projects=projects_contributed,
            projects_created=projects_created,
            total_projects_contributed=total_projects_contributed,
            percentage_tasks_completed=percentage_tasks_completed,
            form=form,
            input_form=True,
            can_update=can_update,
            upref_mdata_enabled=bool(app_settings.upref_mdata))

    user_pref, metadata = get_user_pref_and_metadata(name, form)
    user.info['metadata'] = metadata
    ensure_data_access_assignment_from_form(user.info, form)
    user.user_pref = user_pref
    user_repo.update(user)
    cached_users.delete_user_pref_metadata(user.name)
    cached_users.delete_user_access_levels_by_id(user.id)
    delete_memoized(get_user_preferences, user.id)
    flash("Input saved successfully", "info")
    return redirect(url_for('account.profile', name=name))
Exemplo n.º 4
0
 def test_register_form_with_upref_mdata_with_invalid_language(
         self, upref_mdata, get_upref_mdata_choices):
     get_upref_mdata_choices.return_value = self.upref_mdata_valid_choices
     form_data = dict(languages="somelang",
                      locations="uk",
                      user_type="Researcher",
                      timezone="")
     form = UserPrefMetadataForm(MultiDict(form_data))
     form.set_upref_mdata_choices()
     assert not form.validate()
Exemplo n.º 5
0
    def test_register_form_with_upref_mdata_validates_with_valid_fields(self):
        import pybossa.core
        pybossa.core.upref_mdata_choices = self.upref_mdata_valid_choices

        form_data = dict(languages="en",
                         locations="uk",
                         user_type="Researcher",
                         timezone="")
        form = UserPrefMetadataForm(MultiDict(form_data))
        form.set_upref_mdata_choices()
        assert form.validate()
Exemplo n.º 6
0
def add_metadata(name):
    """
    Admin can save metadata for selected user
    Redirects to public profile page for selected user.
    """
    user = user_repo.get_by_name(name=name)
    form = UserPrefMetadataForm(request.form)
    form.set_upref_mdata_choices()
    if not form.validate():
        if current_user.id == user.id:
            user_dict = cached_users.get_user_summary(user.name)
        else:
            user_dict = cached_users.public_get_user_summary(user.name)
        projects_contributed = cached_users.projects_contributed_cached(
            user.id)
        projects_created = cached_users.published_projects_cached(user.id)
        if current_user.is_authenticated() and current_user.admin:
            draft_projects = cached_users.draft_projects(user.id)
            projects_created.extend(draft_projects)
        title = "%s · User Profile" % user.name
        flash("Please fix the errors", 'message')
        can_update = current_user.admin
        return render_template('/account/public_profile.html',
                               title=title,
                               user=user_dict,
                               projects=projects_contributed,
                               projects_created=projects_created,
                               form=form,
                               can_update=can_update,
                               input_form=True)

    user_pref, metadata = get_user_pref_and_metadata(name, form)
    user.info['metadata'] = metadata
    user.user_pref = user_pref
    user_repo.update(user)
    cached_users.delete_user_pref_metadata(user.name)
    flash("Input saved successfully", "info")
    return redirect(url_for('account.profile', name=name))
Exemplo n.º 7
0
def add_metadata(name):
    """
    Admin can save metadata for selected user
    Redirects to public profile page for selected user.
    """
    user = user_repo.get_by_name(name=name)
    form = UserPrefMetadataForm(request.form)
    form.set_upref_mdata_choices()
    if not form.validate():
        if current_user.id == user.id:
            user_dict = cached_users.get_user_summary(user.name)
        else:
            user_dict = cached_users.public_get_user_summary(user.name)
        projects_contributed = cached_users.projects_contributed_cached(user.id)
        projects_created = cached_users.published_projects_cached(user.id)
        if current_user.is_authenticated() and current_user.admin:
            draft_projects = cached_users.draft_projects(user.id)
            projects_created.extend(draft_projects)
        title = "%s · User Profile" % user.name
        flash("Please fix the errors", 'message')
        can_update = current_user.admin
        return render_template('/account/public_profile.html',
                               title=title,
                               user=user_dict,
                               projects=projects_contributed,
                               projects_created=projects_created,
                               form=form,
                               can_update=can_update,
                               input_form=True)

    user_pref, metadata = get_user_pref_and_metadata(name, form)
    user.info['metadata'] = metadata
    user.user_pref = user_pref
    user_repo.update(user)
    cached_users.delete_user_pref_metadata(user.name)
    flash("Input saved successfully", "info")
    return redirect(url_for('account.profile', name=name))
Exemplo n.º 8
0
    def test_register_form_with_upref_mdata_with_invalid_preferences(self):
        import pybossa.core
        pybossa.core.upref_mdata_choices = self.upref_mdata_valid_choices

        form_data = dict(languages="somelang", locations="someloc",
                        user_type="someutype", timezone="ZZZ")
        form = UserPrefMetadataForm(MultiDict(form_data))
        form.set_upref_mdata_choices()
        assert not form.validate()
        expected_form_errors = {
                        'work_hours_to':
                            ['Work Hours From, Work Hours To, and Timezone must be filled out for submission'],
                        'locations':
                            [u"'someloc' is not a valid choice for this field"],
                        'user_type':
                            [u'Not a valid choice'],
                        'languages':
                            [u"'somelang' is not a valid choice for this field"],
                        'work_hours_from':
                            ['Work Hours From, Work Hours To, and Timezone must be filled out for submission'],
                        'timezone':
                            [u'Not a valid choice', 'Work Hours From, Work Hours To, and Timezone must be filled out for submission']
                        }
        assert form.errors == expected_form_errors