def test_literature_json_put_redirected_record(inspire_app): token = create_user_and_token() headers = { "Authorization": "BEARER " + token.access_token, "If-Match": '"2"' } record_redirected = create_record("lit") record = create_record( "lit", data={"deleted_records": [record_redirected["self"]]}) data = dict(record_redirected) data["deleted"] = True with inspire_app.test_client() as client: response = client.put( "/literature/{}".format(record_redirected.control_number), headers=headers, json=data, ) assert response.status_code == 200 redirected_record_from_db = LiteratureRecord.get_record_by_pid_value( record_redirected.control_number, original_record=True) record_from_db = LiteratureRecord.get_record_by_pid_value( record.control_number) assert dict(redirected_record_from_db) == data assert dict(record_from_db) == dict(record)
def test_restricted_file_attach(inspire_app, override_config): record = create_record( "lit", data={ "documents": [{ "source": "arxiv", "key": "arXiv:nucl-th_9310031.pdf", "url": "https://inspirehep.net/literature/863300", "original_url": "http://original-url.com/1", "filename": "fermilab.pdf", }], }, ) token = create_user_and_token() expected_status_code = 415 expected_message = ( "Attached file format is not supported (text/html), please attach a valid file." ) headers = { "Authorization": "BEARER " + token.access_token, "If-Match": '"0"' } config = {"FEATURE_FLAG_ENABLE_FILES": True} with override_config(**config), inspire_app.test_client() as client: response = client.put(f"/literature/{record['control_number']}", headers=headers, json=record) assert expected_status_code == response.status_code assert expected_message == response.json["message"]
def test_view_disambiguate(disambiguate_signatures_mock, inspire_app, override_config): token = create_user_and_token() headers = {"Authorization": "BEARER " + token.access_token} clusters = [{ "signatures": [{ "publication_id": 374836, "signature_uuid": "94fc2b0a-dc17-42c2-bae3-ca0024079e51", }], "authors": [{ "author_id": 100, "has_claims": True }], }] config = {"FEATURE_FLAG_ENABLE_DISAMBIGUATION": True} with override_config(**config), inspire_app.test_client() as client: response = client.post( "/disambiguation", content_type="application/json", data=orjson.dumps({"clusters": clusters}), headers=headers, ) expected_message = "Disambiguation started." expected_status_code = 200 result_message = response.json["message"] result_status_code = response.status_code assert expected_status_code == result_status_code assert expected_message == result_message disambiguate_signatures_mock.apply_async.assert_called_with( queue="disambiguation", kwargs={"clusters": clusters})
def test_view_disambiguate_with_disambiguation_disabled( disambiguate_signatures_mock, inspire_app): token = create_user_and_token() headers = {"Authorization": "BEARER " + token.access_token} clusters = [{ "signatures": [{ "publication_id": 374836, "signature_uuid": "94fc2b0a-dc17-42c2-bae3-ca0024079e51", }], "authors": [{ "author_id": 100, "has_claims": True }], }] with inspire_app.test_client() as client: response = client.post( "/disambiguation", content_type="application/json", data=orjson.dumps({"clusters": clusters}), headers=headers, ) expected_message = "Disambiguation feature is disabled." expected_status_code = 200 result_message = response.json["message"] result_status_code = response.status_code assert expected_status_code == result_status_code assert expected_message == result_message disambiguate_signatures_mock.apply_async.assert_not_called()
def test_view_disambiguate_with_missing_data(inspire_app): token = create_user_and_token() headers = {"Authorization": "BEARER " + token.access_token} clusters = [{"authors": [{"author_id": 100, "has_claims": True}]}] with inspire_app.test_client() as client: response = client.post( "/disambiguation", content_type="application/json", data=orjson.dumps({"clusters": clusters}), headers=headers, ) expected_message = "Validation Error." expected_status_code = 400 expected_errors = { "clusters": { "0": { "signatures": ["Missing data for required field."] } } } result_message = response.json["message"] result_status_code = response.status_code result_errors = response.json["errors"] assert expected_status_code == result_status_code assert expected_message == result_message assert expected_errors == result_errors
def test_experiment_update_permission(inspire_app): record = create_record("exp") control_number = record["control_number"] token = create_user_and_token(user_role=Roles.cataloger.value) headers = {"Authorization": "BEARER " + token.access_token, "If-Match": '"0"'} with inspire_app.test_client() as client: response = client.put( f"/experiments/{control_number}", headers=headers, json=record ) assert response.status_code == 200
def test_literature_application_json_post_with_token(inspire_app): expected_status_code = 201 token = create_user_and_token() headers = {"Authorization": "BEARER " + token.access_token} rec_data = faker.record("lit") with inspire_app.test_client() as client: response = client.post("/literature", headers=headers, json=rec_data) response_status_code = response.status_code assert expected_status_code == response_status_code
def test_literature_application_json_delete_with_token(inspire_app): record = create_record("lit") record_control_number = record["control_number"] token = create_user_and_token() expected_status_code = 403 headers = {"Authorization": "BEARER " + token.access_token} with inspire_app.test_client() as client: response = client.delete( "/literature/{}".format(record_control_number), headers=headers) response_status_code = response.status_code assert expected_status_code == response_status_code
def test_literature_application_json_put_with_token_(inspire_app): expected_status_code = 200 token = create_user_and_token("cataloger") headers = {"Authorization": "BEARER " + token.access_token, "If-Match": '"0"'} record = create_record("lit") record_control_number = record["control_number"] with inspire_app.test_client() as client: response = client.put( "/literature/{}".format(record_control_number), headers=headers, json=record ) response_status_code = response.status_code assert expected_status_code == response_status_code
def test_authors_application_json_put_with_token(inspire_app): record = create_record("aut") record_control_number = record["control_number"] token = create_user_and_token() expected_status_code = 200 headers = {"Authorization": "BEARER " + token.access_token} with inspire_app.test_client() as client: response = client.put("/authors/{}".format(record_control_number), headers=headers, json=record) response_status_code = response.status_code assert expected_status_code == response_status_code
def test_literature_search_permissions_private_collections_put(inspire_app): hidden_collection = "HEP Hidden" record = create_record("lit", data={"_collections": [hidden_collection]}) token = create_user_and_token(user_role="user") headers = { "Authorization": "BEARER " + token.access_token, "If-Match": '"0"' } with inspire_app.test_client() as client: response = client.put( "/literature/{}".format(record["control_number"]), headers=headers, json=record, ) assert response.status_code == 403
def test_literature_search_permissions_private_collections_put_user_read_write( inspire_app, ): hidden_collection = "HEP Hidden" hidden_collection_role_prefix = hidden_collection.lower().replace(" ", "-") record = create_record("lit", data={"_collections": [hidden_collection]}) token_readwrite = create_user_and_token( user_role=f"{hidden_collection_role_prefix}-read-write") headers_readwrite = { "Authorization": "BEARER " + token_readwrite.access_token, "If-Match": '"0"', } with inspire_app.test_client() as client: response = client.put( "/literature/{}".format(record["control_number"]), headers=headers_readwrite, json=record, ) assert response.status_code == 200
def test_error_message_on_pid_already_exists(inspire_app): create_record_factory("lit", data={"control_number": 666}) token = create_user_and_token() headers = {"Authorization": "BEARER " + token.access_token} record = faker.record("lit", data={"control_number": 666}) with inspire_app.test_client() as client: response = client.post( "/literature", headers=headers, content_type="application/json", data=orjson.dumps(record), ) response_status_code = response.status_code response_message = response.json["message"] expected_status_code = 400 expected_message = "PIDAlreadyExists: pid_type:'lit', pid_value:'666'." assert expected_status_code == response_status_code assert expected_message == response_message