def test__upload__form_dynamic_multiple(client, faker): user = login(client, faker) study = faker.get_test_study(collaborator=user) field1 = faker.get_test_field( field_type=FieldType.get_textarea(), field_group=study.field_group, order=1, ) field2 = faker.get_test_field( field_type=FieldType.get_string(), field_group=study.field_group, order=2, ) resp = _get(client, _url(study_id=study.id), user, study) f1 = resp.soup.find(id=field1.field_name) assert f1 assert f1.name == "textarea" f2 = f1.find_next(id=field2.field_name) assert f2 assert f2.name == "input" assert f2["type"] == "text"
def test__add_field__label_set(client, faker): field = faker.get_test_field(field_type=FieldType.get_integer()) field.label = 'Fred' field_actual = build_form(field) assert field_actual.label.text == 'Fred'
def field_details(self, field_group=None, field_type=None, order=None, name=None, choices=None, required=None): if field_group is None: field_group = self.field_group_details() if field_type is None: field_type = FieldType.get_boolean() if order is None: order = 1 if name is None: name = self.generator.pystr(min_chars=5, max_chars=10) result = Field( field_group=field_group, order=order, field_type=field_type, field_name=name, choices=choices, ) if required is not None: result.required = required return result
def test__upload__upload_StringField(client, faker, required, max_length, value, should_be_loaded): user = login(client, faker) study = faker.get_test_study(collaborator=user) field = faker.get_test_field(field_group=study.field_group, field_type=FieldType.get_string(), max_length=max_length, required=required) _do_upload_field(client, faker, study, should_be_loaded, field, value)
def test__upload__upload_RadioField(client, faker, required, value, should_be_loaded): user = login(client, faker) study = faker.get_test_study(collaborator=user) field = faker.get_test_field(field_group=study.field_group, field_type=FieldType.get_radio(), choices="xy|z", required=required) _do_upload_field(client, faker, study, should_be_loaded, field, value)
def test__upload__upload_FileField(client, faker, required, allowed_file_extensions, file_sent, extension, should_be_loaded): user = login(client, faker) study = faker.get_test_study(collaborator=user) field = faker.get_test_field(field_group=study.field_group, field_type=FieldType.get_file(), allowed_file_extensions=allowed_file_extensions, required=required) content = faker.text() filename = faker.file_name(extension=extension) resp = _do_upload( client, faker, study.id, field_name=field.field_name, field_value=( BytesIO(content.encode('utf-8')), filename ), ) if should_be_loaded: assert__redirect(resp, endpoint='ui.index') _assert_uploaded_file(study, field, filename=filename, content=content) else: assert resp.status_code == status.HTTP_200_OK assert__error__message(resp.soup, field.field_name) _assert_upload_not_saved(study)
def test__upload__upload_IntegerField(client, faker, required, value, should_be_loaded): user = login(client, faker) study = faker.get_test_study(collaborator=user) field = faker.get_test_field(field_group=study.field_group, field_type=FieldType.get_integer(), required=required) _do_upload_field(client, faker, study, should_be_loaded, field, value)
def test__update_task__upload_MultiFileField__no_file(client, faker, loggedin_user, mock_email): s, f = faker.get_test_field_of_type(FieldType.get_multifile()) files = [] task = faker.get_test_task(service=s, requestor=loggedin_user) orig1 = faker.fake_file() faker.get_test_task_file(task=task, field=f, fake_file=orig1, filename=orig1.filename) files.append({'field': f, 'file': orig1}) orig2 = faker.fake_file() faker.get_test_task_file(task=task, field=f, fake_file=orig1, filename=orig1.filename) files.append({'field': f, 'file': orig1}) resp = _edit_task_post(client, task) assert_emails_sent(mock_email, context='updated', user=loggedin_user) assert__redirect(resp, endpoint='ui.index') assert__task(task, loggedin_user, files=files)
def test__add_field__description_is_None(client, faker): field = faker.get_test_field(field_type=FieldType.get_description()) field.description = None field_actual = build_form(field) field_actual.description == ''
def test__add_field__default_set(client, faker): field = faker.get_test_field(field_type=FieldType.get_integer()) field.default = 3 field_actual = build_form(field) assert field_actual.default == 3
def test__add_field__description_set(client, faker): field = faker.get_test_field(field_type=FieldType.get_description()) field.description = 'Hello' field_actual = build_form(field) field_actual.description == 'Hello'
def test__add_field__allowed_file_extensions_not_set(client, faker): field = faker.get_test_field(field_type=FieldType.get_multifile()) field_actual = build_form(field) assert all(False for v in field_actual.validators if isinstance(v, FileAllowed))
def test__add_field__choices_set(client, faker): field = faker.get_test_field(field_type=FieldType.get_radio()) field.choices = 'a|b|c' field_actual = build_form(field) assert field_actual.choices == [('a', 'a'), ('b', 'b'), ('c', 'c')]
def test__add_field__correct_field_type_added(client, faker, field_type_name): field = faker.get_test_field( field_type=FieldType._get_field_type(field_type_name)) field_actual = build_form(field) assert field_actual.type == field_type_name
def test__upload__upload_MultiFileField(client, faker, n, loggedin_user, mock_email): s, f = faker.get_test_field_of_type(FieldType.get_multifile()) field_data = { f.field_name: [], } files = [] for _ in range(n): fake_file = faker.fake_file() field_data[f.field_name].append(fake_file.file_tuple()) files.append({ 'field': f, 'file': fake_file, }) expected = faker.task_details(service=s) resp = _create_task_post(client, expected, field_data) assert_emails_sent(mock_email, context='created', user=loggedin_user) assert__redirect(resp, endpoint='ui.index') assert__task(expected, loggedin_user, files=files)
def test__add_field__validation_regex_set(client, faker): field = faker.get_test_field(field_type=FieldType.get_textarea()) field.validation_regex = '^.*$' field_actual = build_form(field) validators = [v for v in field_actual.validators if isinstance(v, Regexp)] assert len(validators) == 1 assert validators[0].regex == re.compile('^.*$')
def test__dynamic_form__rendering__no_error(client, faker): user = login(client, faker) fg = faker.get_test_field_group(name='Hello') ft = FieldType.get_string() f = faker.get_test_field(field_group=fg, field_type=ft) resp = client.post(url_for('form', field_group_id=fg.id)) assert__redirect(resp, 'ui.index')
def test__add_field__required_set(client, faker): field = faker.get_test_field(field_type=FieldType.get_integer()) field.required = True field_actual = build_form(field) assert any(True for v in field_actual.validators if isinstance(v, DataRequired)) assert all(False for v in field_actual.validators if isinstance(v, Optional))
def test__upload__upload_MultiFileField__no_file(client, faker, loggedin_user, mock_email): s, f = faker.get_test_field_of_type(FieldType.get_multifile()) expected = faker.task_details(service=s) resp = _create_task_post(client, expected) assert_emails_sent(mock_email, context='created', user=loggedin_user) assert__redirect(resp, endpoint='ui.index') assert__task(expected, loggedin_user)
def test__dynamic_form__rendering__error(client, faker): user = login(client, faker) fg = faker.get_test_field_group(name='Hello') ft = FieldType.get_string() f = faker.get_test_field(field_group=fg, field_type=ft, required=True) resp = client.post(url_for('form', field_group_id=fg.id)) assert resp.status_code == status.HTTP_200_OK assert__error__required_field(resp.soup, f.field_name)
def test__add_field__maxlength_set(client, faker): field = faker.get_test_field(field_type=FieldType.get_string()) field.max_length = 30 field_actual = build_form(field) length_validators = [ v for v in field_actual.validators if isinstance(v, Length) ] assert len(length_validators) == 1 assert length_validators[0].max == 30
def test__add_field__allowed_file_extensions_set(client, faker): field = faker.get_test_field(field_type=FieldType.get_file()) field.allowed_file_extensions = 'pdf|txt' field_actual = build_form(field) validators = [ v for v in field_actual.validators if isinstance(v, FileAllowed) ] assert len(validators) == 1 assert validators[0].upload_set == ['pdf', 'txt']
def test__dynamic_form__rendering(client, faker, field_type_name): user = login(client, faker) fg = faker.get_test_field_group() ft = FieldType._get_field_type(field_type_name) f = faker.get_test_field(field_group=fg, field_type=ft) resp = client.get(url_for('form', field_group_id=fg.id)) assert resp.status_code == status.HTTP_200_OK assert resp.soup.find(ft.html_tag, type=ft.html_input_type, id=f.field_name) is not None
def test__create_task__input_fields(client, faker, field_type_name, loggedin_user): ft = FieldType._get_field_type(field_type_name) s, f = faker.get_test_field_of_type(ft) resp = lbrc_services_get(client, _url(service_id=s.id), loggedin_user) assert resp.status_code == status.HTTP_200_OK assert resp.soup.find(ft.html_tag, type=ft.html_input_type, id=f.field_name) is not None
def __init__(self, study): super().__init__() study_number = Field( field_type=FieldType.get_string(), order=0, field_name='study_number', label=study.get_study_number_name(), required=not study.allow_empty_study_number, max_length=50, validation_regex=study.study_number_format, ) self.add_field(study_number) self.add_field_group(study.field_group)
def get_test_upload_file(self, **kwargs): upload = self.get_test_upload(**kwargs) file_field = self.generator.field_details(FieldType.get_file()) file_field.study = upload.study file_field.order = 1 upload_file = self.upload_file_details() upload_file.upload = upload upload_file.field = file_field db.session.add(file_field) db.session.add(upload_file) db.session.commit() return upload_file
def test__upload__form_dynamic_textarea(client, faker): user = login(client, faker) study = faker.get_test_study(collaborator=user) field = faker.get_test_field( field_type=FieldType.get_textarea(), field_group=study.field_group, order=1, ) resp = _get(client, _url(study_id=study.id), user, study) sn = resp.soup.find(id=field.field_name) assert sn assert sn.name == "textarea"
def test__upload__upload_BooleanField(client, faker, required, value, should_be_loaded, saved_value): user = login(client, faker) study = faker.get_test_study(collaborator=user) field = faker.get_test_field(field_group=study.field_group, field_type=FieldType.get_boolean(), required=required) resp = _do_upload(client, faker, study.id, field_name=field.field_name, field_value=value) if should_be_loaded: assert__redirect(resp, endpoint='ui.index') _assert_uploaded(study, field, value=saved_value) else: assert resp.status_code == status.HTTP_200_OK assert__error__message(resp.soup, field.field_name) _assert_upload_not_saved(study)
def test__upload__upload_FileField(client, faker, loggedin_user, mock_email): s, f = faker.get_test_field_of_type(FieldType.get_file()) field_data = {} fake_file = faker.fake_file() field_data[f.field_name] = fake_file.file_tuple() files = [{ 'field': f, 'file': fake_file, }] expected = faker.task_details(service=s) resp = _create_task_post(client, expected, field_data) assert_emails_sent(mock_email, context='created', user=loggedin_user) assert__redirect(resp, endpoint='ui.index') assert__task(expected, loggedin_user, files=files)
def test__upload__form_dynamic_radio(client, faker): user = login(client, faker) study = faker.get_test_study(collaborator=user) field = faker.get_test_field( field_type=FieldType.get_radio(), field_group=study.field_group, order=1, choices="xy|z", ) resp = _get(client, _url(study_id=study.id), user, study) sn = resp.soup.find(id=field.field_name) assert sn assert sn.name == "ul" assert sn.find("input", attrs={"type": "radio", "value": "xy"}) assert sn.find("input", attrs={"type": "radio", "value": "z"})