Ejemplo n.º 1
0
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'
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
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)
Ejemplo n.º 6
0
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)
Ejemplo n.º 7
0
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)
Ejemplo n.º 8
0
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 == ''
Ejemplo n.º 10
0
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
Ejemplo n.º 11
0
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'
Ejemplo n.º 12
0
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))
Ejemplo n.º 13
0
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')]
Ejemplo n.º 14
0
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
Ejemplo n.º 15
0
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)
Ejemplo n.º 16
0
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('^.*$')
Ejemplo n.º 17
0
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')
Ejemplo n.º 18
0
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))
Ejemplo n.º 19
0
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)
Ejemplo n.º 20
0
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)
Ejemplo n.º 21
0
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
Ejemplo n.º 22
0
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
Ejemplo n.º 24
0
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
Ejemplo n.º 25
0
    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)
Ejemplo n.º 26
0
    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
Ejemplo n.º 27
0
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"
Ejemplo n.º 28
0
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)
Ejemplo n.º 29
0
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)
Ejemplo n.º 30
0
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"})