예제 #1
0
def test_update_form_input_entry_normal_user_fail_no_permission(
        client: TestClient, db: Session) -> None:
    """Fail if the normal user doesn't have update permissions"""
    setup = form_input_permission_setup(
        db,
        permission_type=PermissionTypeEnum.update,
        permission_enabled=False)
    form_input = setup["form_input"]
    user = setup["user"]
    form_input_entry = create_random_form_input_table_entry(db)
    data = {"name": random_lower_string()}
    user_token_headers = authentication_token_from_email(client=client,
                                                         email=user.email,
                                                         db=db)

    response = client.put(
        (f"{settings.API_V1_STR}/interfaces/form-inputs/"
         f"{form_input.id}/entries/{form_input_entry.id}"),
        headers=user_token_headers,
        json=data,
    )
    content = response.json()
    assert response.status_code == 403
    assert content["detail"] == (
        f"User ID {user.id} does not have update permissions for "
        f"interface ID {form_input.id}")
예제 #2
0
def test_delete_form_input_entry_normal_user(client: TestClient,
                                             db: Session) -> None:
    """Successful form input delete by a normal user"""
    setup = form_input_permission_setup(
        db, permission_type=PermissionTypeEnum.delete)
    form_input = setup["form_input"]
    user = setup["user"]
    form_input_entry = create_random_form_input_table_entry(db)
    user_token_headers = authentication_token_from_email(client=client,
                                                         email=user.email,
                                                         db=db)

    response = client.delete(
        (f"{settings.API_V1_STR}/interfaces/form-inputs/"
         f"{form_input.id}/entries/{form_input_entry.id}"),
        headers=user_token_headers,
    )
    form_input_crud = crud.form_input.get_table_crud(db, id=form_input.id)
    stored_form_input_entry = form_input_crud.get(db, id=form_input_entry.id)
    content = response.json()
    assert response.status_code == 200
    assert content["id"] == form_input_entry.id
    assert content["name"] == form_input_entry.name
    assert content["date_created"] == str(form_input_entry.date_created)
    assert content["an_integer"] == form_input_entry.an_integer
    assert content["node_id"] == form_input_entry.node_id
    assert stored_form_input_entry is None
예제 #3
0
def test_update_form_input_entry_normal_user(client: TestClient,
                                             db: Session) -> None:
    """Successful form input update by a normal user"""
    setup = form_input_permission_setup(
        db, permission_type=PermissionTypeEnum.update)
    form_input = setup["form_input"]
    user = setup["user"]
    form_input_entry = create_random_form_input_table_entry(db)
    data = {"name": random_lower_string()}
    user_token_headers = authentication_token_from_email(client=client,
                                                         email=user.email,
                                                         db=db)

    response = client.put(
        (f"{settings.API_V1_STR}/interfaces/form-inputs/"
         f"{form_input.id}/entries/{form_input_entry.id}"),
        headers=user_token_headers,
        json=data,
    )
    content = response.json()
    assert response.status_code == 200
    assert content["id"] == form_input_entry.id
    assert content["name"] == data["name"]
    assert content["date_created"] == str(form_input_entry.date_created)
    assert content["an_integer"] == form_input_entry.an_integer
    assert content["node_id"] == form_input_entry.node_id
예제 #4
0
def test_delete_form_input_entry_fail_interface_not_exist(
        client: TestClient, superuser_token_headers: dict,
        db: Session) -> None:
    """Fail if the specified interface doesn't exist"""
    form_input_entry = create_random_form_input_table_entry(db)
    response = client.delete(
        (f"{settings.API_V1_STR}/interfaces/form-inputs/"
         f"{-1}/entries/{form_input_entry.id}"),
        headers=superuser_token_headers,
    )
    content = response.json()
    assert response.status_code == 404
    assert content["detail"] == "Cannot find interface."
예제 #5
0
def test_delete_form_input_entry_fail_interface_table_not_created(
        client: TestClient, superuser_token_headers: dict,
        db: Session) -> None:
    """Fail if the specified interface doesn't have a backing table"""
    form_input = create_random_form_input_interface(
        db, table_name="fail_table_not_created5")
    form_input_entry = create_random_form_input_table_entry(db)
    response = client.delete(
        (f"{settings.API_V1_STR}/interfaces/form-inputs/"
         f"{form_input.id}/entries/{form_input_entry.id}"),
        headers=superuser_token_headers,
    )
    content = response.json()
    assert response.status_code == 403
    assert content["detail"] == (
        "The backing table for this interface has not been created.")
예제 #6
0
def test_read_form_input_entries(client: TestClient,
                                 superuser_token_headers: dict,
                                 db: Session) -> None:
    """Successful form input entry read multi"""
    form_input = crud.form_input.get_by_template_table_name(
        db, table_name="form_input_test_table")
    form_input_entries = [
        create_random_form_input_table_entry(db) for i in range(10)
    ]
    response = client.get(
        f"{settings.API_V1_STR}/interfaces/form-inputs/{form_input.id}/entries/",
        headers=superuser_token_headers,
    )
    content = response.json()
    assert response.status_code == 200
    stored_ids = [c["id"] for c in content["records"]]
    for form_input_entry in form_input_entries:
        assert form_input_entry.id in stored_ids
예제 #7
0
def test_read_form_input_entries_normal_user_fail_no_permission(
        client: TestClient, db: Session) -> None:
    """Fail if the user doesn't have read permission on the interface"""
    form_input = crud.form_input.get_by_template_table_name(
        db, table_name="form_input_test_table")
    user = create_random_user(db)
    [create_random_form_input_table_entry(db) for i in range(10)]
    user_token_headers = authentication_token_from_email(client=client,
                                                         email=user.email,
                                                         db=db)

    response = client.get(
        f"{settings.API_V1_STR}/interfaces/form-inputs/{form_input.id}/entries/",
        headers=user_token_headers,
    )
    content = response.json()
    assert response.status_code == 403
    assert content["detail"] == (
        f"User ID {user.id} does not have read permissions for "
        f"interface ID {form_input.id}")
예제 #8
0
def test_read_form_input_entry(client: TestClient,
                               superuser_token_headers: dict,
                               db: Session) -> None:
    """Successful form input entry read one"""
    form_input = crud.form_input.get_by_template_table_name(
        db, table_name="form_input_test_table")
    form_input_entry = create_random_form_input_table_entry(db)
    response = client.get(
        (f"{settings.API_V1_STR}/interfaces/form-inputs/"
         f"{form_input.id}/entries/{form_input_entry.id}"),
        headers=superuser_token_headers,
    )
    content = response.json()
    assert response.status_code == 200
    assert content["id"] == form_input_entry.id
    assert content["name"] == form_input_entry.name
    assert content["date_created"] == str(form_input_entry.date_created)
    assert content["an_integer"] == form_input_entry.an_integer
    assert content["node_id"] == form_input_entry.node_id
    assert content["interface_id"] == form_input.id
예제 #9
0
def test_read_form_input_entries_normal_user(client: TestClient,
                                             db: Session) -> None:
    """Successful form input read multi normal user"""
    setup = form_input_permission_setup(
        db, permission_type=PermissionTypeEnum.read)
    form_input = setup["form_input"]
    user = setup["user"]
    form_input_entries = [
        create_random_form_input_table_entry(db) for i in range(10)
    ]
    user_token_headers = authentication_token_from_email(client=client,
                                                         email=user.email,
                                                         db=db)

    response = client.get(
        f"{settings.API_V1_STR}/interfaces/form-inputs/{form_input.id}/entries/",
        headers=user_token_headers,
    )
    content = response.json()
    assert response.status_code == 200
    stored_ids = [c["id"] for c in content["records"]]
    for form_input_entry in form_input_entries:
        assert form_input_entry.id in stored_ids