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
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"
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
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
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
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()