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