Ejemplo n.º 1
0
def test_clinvar_submissions(app, institute_obj, clinvar_variant,
                             clinvar_casedata):
    """"Test the web page containing the clinvar submissions for an institute"""

    # GIVEN an institute with a clinvar submission
    store.create_submission(institute_obj["_id"])
    open_submission = store.get_open_clinvar_submission(institute_obj["_id"])
    submission_with_data = store.add_to_submission(
        open_submission["_id"], ([clinvar_variant], [clinvar_casedata]))
    assert submission_with_data

    # GIVEN an initialized app and a valid user and institute
    with app.test_client() as client:
        # GIVEN that the user could be logged in
        resp = client.get(url_for("auto_login"))
        assert resp.status_code == 200

        # When visiting the clinvar submission page (get request)
        resp = client.get(
            url_for(
                "overview.clinvar_submissions",
                institute_id=institute_obj["internal_id"],
            ))

        # a successful response should be returned
        assert resp.status_code == 200
        assert str(submission_with_data["_id"]) in str(resp.data)
Ejemplo n.º 2
0
def clinvar(institute_id, case_name, variant_id):
    """Build a clinVar submission form for a variant."""
    data = clinvar_export(store, institute_id, case_name, variant_id)
    if request.method == "GET":
        return data
    # POST
    form_dict = {}
    # flatten up HPO and OMIM terms lists into string of keys separated by semicolon
    for key, value in request.form.items():
        if key.startswith("conditions@") or key.startswith("clin_features@"):
            conditions = request.form.getlist(
                key)  # can be HPO or OMIM conditions
            if conditions:
                variant_id = key.split("@")[1]
                cond_types = []
                cond_values = []

                for condition in conditions:
                    cond_types.append(
                        condition.split("_")[0])  # 'HPO' or 'OMIM'
                    cond_values.append(
                        condition.split("_")[1])  # HPO id or OMIM ID

                if key.startswith(
                        "conditions@"
                ):  # Filling in 'condition_id_type' and 'condition_id_value' in variant data
                    form_dict["@".join(["condition_id_type",
                                        variant_id])] = ";".join(
                                            cond_types)  # Flattened list
                    form_dict["@".join(["condition_id_value",
                                        variant_id])] = ";".join(
                                            cond_values)  # Flattened list
                elif key.startswith(
                        "clin_features@"
                ):  # Filling in 'clin_features' in casedata
                    form_dict["@".join(["clin_features",
                                        variant_id])] = ";".join(
                                            cond_values)  # Flattened list

        else:
            form_dict[key] = value

    # A tuple of submission objects (variants and casedata objects):
    submission_objects = set_submission_objects(form_dict)

    # Add submission data to an open clinvar submission object,
    # or create a new if no open submission is found in database
    open_submission = store.get_open_clinvar_submission(institute_id)
    updated_submission = store.add_to_submission(open_submission["_id"],
                                                 submission_objects)

    # Redirect to clinvar submissions handling page, and pass it the updated_submission_object
    return redirect(
        url_for("cases.clinvar_submissions", institute_id=institute_id))
Ejemplo n.º 3
0
def clinvar(institute_id, case_name, variant_id):
    """Build a clinVar submission form for a variant."""
    data = controllers.clinvar_export(store, institute_id, case_name, variant_id)
    if request.method == 'GET':
        return data
    else: #POST
        form_dict = request.form.to_dict()
        submission_objects = set_submission_objects(form_dict) # A tuple of submission objects (variants and casedata objects)

        # Add submission data to an open clinvar submission object,
        # or create a new if no open submission is found in database
        open_submission = store.get_open_clinvar_submission(current_user.email, institute_id)
        updated_submission = store.add_to_submission(open_submission['_id'], submission_objects)

        # Redirect to clinvar submissions handling page, and pass it the updated_submission_object
        return redirect(url_for('cases.clinvar_submissions', institute_id=institute_id))
Ejemplo n.º 4
0
def clinvar(institute_id, case_name, variant_id):
    """Build a clinVar submission form for a variant."""
    data = controllers.clinvar_export(store, institute_id, case_name, variant_id)
    if request.method == 'GET':
        return data
    else: #POST
        form_dict = request.form.to_dict()
        submission_objects = set_submission_objects(form_dict) # A tuple of submission objects (variants and casedata objects)

        # Add submission data to an open clinvar submission object,
        # or create a new if no open submission is found in database
        open_submission = store.get_open_clinvar_submission(current_user.email, institute_id)
        updated_submission = store.add_to_submission(open_submission['_id'], submission_objects)

        # Redirect to clinvar submissions handling page, and pass it the updated_submission_object
        return redirect(url_for('cases.clinvar_submissions', institute_id=institute_id))
Ejemplo n.º 5
0
def test_rename_clinvar_samples(app, institute_obj, clinvar_variant,
                                clinvar_casedata):
    """Test the form button triggering the renaming of samples for a clinvar submission"""

    # GIVEN an institute with a clinvar submission
    store.create_submission(institute_obj["_id"])
    open_submission = store.get_open_clinvar_submission(institute_obj["_id"])
    submission_with_data = store.add_to_submission(
        open_submission["_id"], ([clinvar_variant], [clinvar_casedata]))
    assert submission_with_data["_id"]

    # GIVEN an initialized app and a valid user
    with app.test_client() as client:
        # GIVEN that the user could be logged in
        resp = client.get(url_for("auto_login"))

        case_id = clinvar_casedata["case_id"]
        old_name = clinvar_casedata["individual_id"]

        form_data = dict(new_name="new_sample_name", )

        referer = url_for("overview.clinvar_submissions",
                          institute_id=institute_obj["internal_id"])

        # WHEN the sample name is edited from the submission page (POST request)
        resp = client.post(
            url_for(
                f"overview.clinvar_rename_casedata",
                submission=submission_with_data["_id"],
                case=case_id,
                old_name=old_name,
            ),
            data=form_data,
            headers={"referer": referer},
        )
        # a successful response should be redirect to the submssions page
        assert resp.status_code == 302

        # And the sample name should have been updated in the database
        updated_casedata = store.clinvar_collection.find_one(
            {"_id": clinvar_casedata["_id"]})
        assert updated_casedata["individual_id"] != clinvar_casedata[
            "individual_id"]