Example #1
0
def test_experiments_create_with_invalid_data(inspire_app):
    data = faker.record("exp", with_control_number=True)
    data["invalid_key"] = "should throw an error"
    record_control_number = str(data["control_number"])

    with pytest.raises(ValidationError):
        ExperimentsRecord.create(data)

    record_pid = PersistentIdentifier.query.filter_by(
        pid_value=record_control_number).one_or_none()
    assert record_pid is None
def test_experiments_create_with_existing_control_number(inspire_app):
    data = faker.record("exp", with_control_number=True)
    existing_object_uuid = uuid.uuid4()

    create_pidstore(
        object_uuid=existing_object_uuid,
        pid_type="exp",
        pid_value=data["control_number"],
    )

    with pytest.raises(PIDAlreadyExists):
        ExperimentsRecord.create(data)
def test_cn_redirection_works_for_experiments(inspire_app):
    redirected_record = create_record("exp")
    record = create_record("exp", data={"deleted_records": [redirected_record["self"]]})

    original_record = ExperimentsRecord.get_uuid_from_pid_value(
        redirected_record["control_number"], original_record=True
    )
    new_record = ExperimentsRecord.get_uuid_from_pid_value(
        redirected_record["control_number"]
    )

    assert original_record != new_record
    assert original_record == redirected_record.id
    assert new_record == record.id
Example #4
0
    def post(self):
        """Adds new experiment record"""

        data = self.load_data_from_request()
        record = ExperimentsRecord(data=data).create(data)
        db.session.commit()
        return (jsonify({"control_number": record["control_number"]}), 201)
def test_create_record_from_db_depending_on_its_pid_type(inspire_app):
    data = faker.record("exp")
    record = InspireRecord.create(data)
    assert isinstance(record, ExperimentsRecord)
    assert record.pid_type == "exp"

    record = ExperimentsRecord.create(data)
    assert isinstance(record, ExperimentsRecord)
    assert record.pid_type == "exp"
def test_create_record_from_db_depending_on_its_pid_type(base_app, db, es):
    data = faker.record("exp")
    record = InspireRecord.create(data)
    assert type(record) == ExperimentsRecord
    assert record.pid_type == "exp"

    record = ExperimentsRecord.create(data)
    assert type(record) == ExperimentsRecord
    assert record.pid_type == "exp"
Example #7
0
def test_experiment_serializer_should_serialize_whole_basic_record():
    schema = ExperimentsElasticSearchSchema()
    expected_result = {
        "$schema": "http://localhost:5000/schemas/records/experiments.json",
        "_collections": ["Experiments"],
        "project_type": ["experiment"],
    }

    experiment = ExperimentsRecord(faker.record("exp", data={"experiment":
                                                             {}}))
    result = schema.dump(experiment).data

    assert result == expected_result
Example #8
0
def test_experiments_create_or_update_with_new_record(inspire_app):
    data = faker.record("exp")
    record = ExperimentsRecord.create_or_update(data)

    control_number = str(record["control_number"])
    record_db = RecordMetadata.query.filter_by(id=record.id).one()

    assert record == record_db.json

    record_pid = PersistentIdentifier.query.filter_by(
        pid_type="exp", pid_value=str(control_number)).one()

    assert record.model.id == record_pid.object_uuid
    assert control_number == record_pid.pid_value
def test_experiments_create_or_update_with_existing_record(inspire_app):
    data = faker.record("exp", with_control_number=True)
    record = ExperimentsRecord.create(data)

    assert data["control_number"] == record["control_number"]

    data_update = {"description": "UPDATED"}
    data.update(data_update)

    record_updated = ExperimentsRecord.create_or_update(data)
    control_number = str(record_updated["control_number"])

    assert record["control_number"] == record_updated["control_number"]

    record_updated_db = RecordMetadata.query.filter_by(id=record_updated.id).one()

    assert data == record_updated_db.json

    record_updated_pid = PersistentIdentifier.query.filter_by(
        pid_type="exp", pid_value=str(control_number)
    ).one()

    assert record_updated.model.id == record_updated_pid.object_uuid
    assert control_number == record_updated_pid.pid_value
Example #10
0
def test_experiment_serializer_populates_normalized_names_and_subgroups(
    mock_experiment_literature_table, ):
    schema = ExperimentsElasticSearchSchema()
    data = {
        "accelerator": {
            "value": "ACC"
        },
        "collaboration": {
            "curated_relation": False,
            "value": "COLLABORATION",
            "subgroup_names": ["subgroup 1", "subgroup 2"],
        },
        "experiment": {
            "short_name": "EXP SHORT NAME",
            "value": "Experiment value"
        },
        "institutions": [{
            "record": {
                "$ref": "http://labs.inspirehep.net/api/institutions/902725"
            },
            "value": "INST_VALUE",
            "curated_relation": True,
        }],
        "legacy_name":
        "LEGACY-NAME",
        "name_variants": ["NAME_V1", "NAME_V2", "NAME_V3"],
    }

    expected_normalized_name_variants = [
        "COLLABORATION",
        "NAME_V1",
        "NAME_V2",
        "NAME_V3",
    ]
    expected_normalized_subgroups = ["subgroup 1", "subgroup 2"]

    experiment = ExperimentsRecord(faker.record("exp", data))
    result = schema.dump(experiment).data

    assert result[
        "normalized_name_variants"] == expected_normalized_name_variants
    assert result["normalized_subgroups"] == expected_normalized_subgroups
Example #11
0
def test_experiment_serializer_populates_experiment_suggest(
    mock_experiment_literature_table,
):
    schema = ExperimentsElasticSearchSchema()
    data = {
        "accelerator": {"value": "ACC"},
        "collaboration": {"curated_relation": False, "value": "COLLABORATION"},
        "experiment": {"short_name": "EXP SHORT NAME", "value": "Experiment value"},
        "institutions": [
            {
                "record": {
                    "$ref": "http://labs.inspirehep.net/api/institutions/902725"
                },
                "value": "INST_VALUE",
                "curated_relation": True,
            }
        ],
        "legacy_name": "LEGACY-NAME",
        "long_name": "{Long Name}",
        "name_variants": ["NAME_V1", "NAME_V2", "NAME_V3"],
    }

    expected_experiment_suggest = [
        {"input": "ACC", "weight": 1},
        {"input": "COLLABORATION", "weight": 1},
        {"input": "EXP SHORT NAME", "weight": 1},
        {"input": "Experiment value", "weight": 1},
        {"input": "INST_VALUE", "weight": 1},
        {"input": "{Long Name}", "weight": 1},
        {"input": "NAME_V1", "weight": 1},
        {"input": "NAME_V2", "weight": 1},
        {"input": "NAME_V3", "weight": 1},
        {"input": "LEGACY-NAME", "weight": 5},
    ]
    experiment = ExperimentsRecord(faker.record("exp", data))
    result = schema.dump(experiment).data["experiment_suggest"]

    assert result == expected_experiment_suggest
def test_aut_citation_count_property_blows_up_on_wrong_pid_type(inspire_app):
    data = faker.record("exp")
    record = ExperimentsRecord.create(data)

    with pytest.raises(AttributeError):
        record.citation_count
def test_subclasses_for_experiments():
    expected = {"exp": ExperimentsRecord}
    assert expected == ExperimentsRecord.get_subclasses()