def test_journals_create_with_invalid_data(inspire_app): data = faker.record("jou", with_control_number=True) data["invalid_key"] = "should throw an error" record_control_number = str(data["control_number"]) with pytest.raises(ValidationError): JournalsRecord.create(data) record_pid = PersistentIdentifier.query.filter_by( pid_value=record_control_number).one_or_none() assert record_pid is None
def test_journals_create_with_existing_control_number(inspire_app): data = faker.record("jou", with_control_number=True) existing_object_uuid = uuid.uuid4() create_pidstore( object_uuid=existing_object_uuid, pid_type="jou", pid_value=data["control_number"], ) with pytest.raises(PIDAlreadyExists): JournalsRecord.create(data)
def test_cn_redirection_works_for_journals(inspire_app): redirected_record = create_record("jou") record = create_record( "jou", data={"deleted_records": [redirected_record["self"]]}) original_record = JournalsRecord.get_uuid_from_pid_value( redirected_record["control_number"], original_record=True) new_record = JournalsRecord.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 test_create_record_from_db_depending_on_its_pid_type(inspire_app): data = faker.record("jou") record = InspireRecord.create(data) assert type(record) == JournalsRecord assert record.pid_type == "jou" record = JournalsRecord.create(data) assert type(record) == JournalsRecord assert record.pid_type == "jou"
def test_journals_create_or_update_with_new_record(inspire_app): data = faker.record("jou") record = JournalsRecord.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="jou", pid_value=str(control_number)).one() assert record.model.id == record_pid.object_uuid assert control_number == record_pid.pid_value
def test_journals_serializer_should_serialize_whole_basic_record(): schema = JournalsElasticSearchSchema() data = faker.record("jou") expected_result = deepcopy(data) title_suggest = { "input": [data["journal_title"]["title"], data["short_title"]] } expected_result["title_suggest"] = title_suggest conference = JournalsRecord(data) result = schema.dump(conference).data assert result == expected_result
def test_journals_create_or_update_with_existing_record(inspire_app): data = faker.record("jou", with_control_number=True) record = JournalsRecord.create(data) assert data["control_number"] == record["control_number"] data_update = {"public_notes": [{"value": "UPDATED"}]} data.update(data_update) record_updated = JournalsRecord.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="jou", 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_indexer_deletes_record_from_es(inspire_app, datadir): def assert_record_is_deleted_from_es(): current_search.flush_and_refresh("records-journals") expected_records_count = 0 record_lit_es = JournalsSearch().get_record(str(record.id)).execute().hits assert expected_records_count == len(record_lit_es) data = orjson.loads((datadir / "1213103.json").read_text()) record = JournalsRecord.create(data) db.session.commit() record.delete() db.session.commit() retry_until_pass(assert_record_is_deleted_from_es)
def test_journals_serializer_populates_title_suggest(): schema = JournalsElasticSearchSchema() data = {"title_variants": ["title_variant1", "title_variant2"]} data = faker.record("jou", data) expected_result = { "input": [ data["journal_title"]["title"], data["short_title"], data["title_variants"][0], data["title_variants"][1], ] } institution = JournalsRecord(data) result = schema.dump(institution).data["title_suggest"] assert result == expected_result
def test_populate_title_suggest_with_all_inputs(): data = { "$schema": "http://localhost:5000/schemas/records/journals.json", "journal_title": { "title": "The Journal of High Energy Physics (JHEP)" }, "short_title": "JHEP", "title_variants": ["JOURNAL OF HIGH ENERGY PHYSICS"], } record = JournalsRecord(faker.record("jou", data)) marshmallow_schema = JournalsElasticSearchSchema() result = marshmallow_schema.dump(record).data["title_suggest"] expected = { "input": [ "The Journal of High Energy Physics (JHEP)", "JHEP", "JOURNAL OF HIGH ENERGY PHYSICS", ] } assert expected == result
def test_aut_citation_count_property_blows_up_on_wrong_pid_type(inspire_app): data = faker.record("jou") record = JournalsRecord.create(data) with pytest.raises(AttributeError): record.citation_count
def test_subclasses_for_journals(): expected = {"jou": JournalsRecord} assert expected == JournalsRecord.get_subclasses()