def test_patrons_get(client, user_librarian_no_email): """Test record retrieval.""" patron = user_librarian_no_email item_url = url_for('invenio_records_rest.ptrn_item', pid_value='ptrn1') list_url = url_for('invenio_records_rest.ptrn_list', q='pid:ptrn1') res = client.get(item_url) assert res.status_code == 200 assert res.headers['ETag'] == '"{}"'.format(patron.revision_id) data = get_json(res) assert patron.dumps() == data['metadata'] # Check metadata for k in ['created', 'updated', 'metadata', 'links']: assert k in data # Check self links res = client.get(to_relative_url(data['links']['self'])) assert res.status_code == 200 assert data == get_json(res) assert patron.dumps() == data['metadata'] res = client.get(list_url) assert res.status_code == 200 data = get_json(res) assert data['hits']['hits'][0]['metadata'] == patron.replace_refs()
def test_libraries_get(client, lib_martigny): """Test record retrieval.""" item_url = url_for('invenio_records_rest.lib_item', pid_value='lib1') list_url = url_for('invenio_records_rest.lib_list', q='pid:lib1') res = client.get(item_url) assert res.status_code == 200 assert res.headers['ETag'] == '"{}"'.format(lib_martigny.revision_id) data = get_json(res) assert lib_martigny.dumps() == data['metadata'] # Check metadata for k in ['created', 'updated', 'metadata', 'links']: assert k in data # Check self links res = client.get(to_relative_url(data['links']['self'])) assert res.status_code == 200 assert data == get_json(res) assert lib_martigny.dumps() == data['metadata'] res = client.get(list_url) assert res.status_code == 200 data = get_json(res) assert data['hits']['hits'][0]['metadata'] == lib_martigny.replace_refs()
def test_templates_get(client, templ_doc_public_martigny): """Test template retrieval.""" template = templ_doc_public_martigny item_url = url_for('invenio_records_rest.tmpl_item', pid_value='tmpl1') res = client.get(item_url) assert res.status_code == 200 assert res.headers['ETag'] == '"{}"'.format(template.revision_id) data = get_json(res) assert template.dumps() == data['metadata'] # Check metadata for k in ['created', 'updated', 'metadata', 'links']: assert k in data # Check self links res = client.get(to_relative_url(data['links']['self'])) assert res.status_code == 200 json = get_json(res) assert data == json assert template.dumps() == data['metadata'] list_url = url_for('invenio_records_rest.tmpl_list', q='pid:tmpl1') res = client.get(list_url) assert res.status_code == 200 data = get_json(res) assert data['hits']['hits'][0]['metadata'] == template.replace_refs()
def test_budgets_get(client, budget_2020_martigny): """Test record retrieval.""" item_url = url_for('invenio_records_rest.budg_item', pid_value='budg1') budget = budget_2020_martigny res = client.get(item_url) assert res.status_code == 200 assert res.headers['ETag'] == '"{}"'.format(budget.revision_id) data = get_json(res) assert budget.dumps() == data['metadata'] # Check metadata for k in ['created', 'updated', 'metadata', 'links']: assert k in data # Check self links res = client.get(to_relative_url(data['links']['self'])) assert res.status_code == 200 assert data == get_json(res) assert budget.dumps() == data['metadata'] list_url = url_for('invenio_records_rest.budg_list', pid='budg1') res = client.get(list_url) assert res.status_code == 200 data = get_json(res) assert data['hits']['hits'][0]['metadata'] == budget.replace_refs()
def test_circ_policies_get(client, circ_policy_default_martigny): """Test policy retrieval.""" circ_policy = circ_policy_default_martigny item_url = url_for('invenio_records_rest.cipo_item', pid_value='cipo1') res = client.get(item_url) assert res.status_code == 200 assert res.headers['ETag'] == '"{}"'.format(circ_policy.revision_id) data = get_json(res) assert circ_policy.dumps() == data['metadata'] # Check metadata for k in ['created', 'updated', 'metadata', 'links']: assert k in data # Check self links res = client.get(to_relative_url(data['links']['self'])) assert res.status_code == 200 json = get_json(res) assert data == json assert circ_policy.dumps() == data['metadata'] list_url = url_for('invenio_records_rest.cipo_list', pid='cipo1') res = client.get(list_url) assert res.status_code == 200 data = get_json(res) assert data['hits']['hits'][0]['metadata'] == circ_policy.replace_refs()
def test_mef_persons_get(client, mef_person): """Test record retrieval.""" item_url = url_for('invenio_records_rest.pers_item', pid_value='pers1') res = client.get(item_url) assert res.status_code == 200 assert res.headers['ETag'] == '"{}"'.format(mef_person.revision_id) data = get_json(res) assert mef_person.dumps() == data['metadata'] # Check metadata for k in ['created', 'updated', 'metadata', 'links']: assert k in data # Check self links res = client.get(to_relative_url(data['links']['self'])) assert res.status_code == 200 assert data == get_json(res) assert mef_person.dumps() == data['metadata'] list_url = url_for('invenio_records_rest.pers_list', pid='pers1') res = client.get(list_url) assert res.status_code == 200 data = get_json(res) assert data['hits']['hits'][0]['metadata'] == mef_person.replace_refs()
def test_patrons_get(client, librarian_martigny): """Test record retrieval.""" patron = librarian_martigny item_url = url_for('invenio_records_rest.ptrn_item', pid_value=librarian_martigny.pid) list_url = url_for('invenio_records_rest.ptrn_list', q='pid:{pid}'.format(pid=librarian_martigny.pid)) res = client.get(item_url) assert res.status_code == 200 assert res.headers['ETag'] == '"{}"'.format(patron.revision_id) data = get_json(res) assert patron.dumps() == data['metadata'] # Check metadata for k in ['created', 'updated', 'metadata', 'links']: assert k in data # Check self links res = client.get(to_relative_url(data['links']['self'])) assert res.status_code == 200 assert data == get_json(res) assert patron.dumps() == data['metadata'] res = client.get(list_url) assert res.status_code == 200 data = get_json(res) result = data['hits']['hits'][0]['metadata'] # organisation has been added during the indexing del (result['organisation']) assert result == patron.replace_refs().dumps()
def test_ill_requests_get(client, ill_request_martigny): """Test record retrieval.""" ill_request = ill_request_martigny item_url = url_for('invenio_records_rest.illr_item', pid_value='illr1') res = client.get(item_url) assert res.status_code == 200 assert res.headers['ETag'] == '"{}"'.format(ill_request.revision_id) data = get_json(res) assert ill_request.dumps() == data['metadata'] # Check metadata for k in ['created', 'updated', 'metadata', 'links']: assert k in data # Check self links res = client.get(to_relative_url(data['links']['self'])) assert res.status_code == 200 assert data == get_json(res) assert ill_request.dumps() == data['metadata'] list_url = url_for('invenio_records_rest.illr_list', pid='illr1') res = client.get(list_url) assert res.status_code == 200 data = get_json(res) metadata = data['hits']['hits'][0]['metadata'] del metadata['organisation'] # organisation is added only for indexation assert metadata == ill_request.replace_refs()
def test_documents_get(client, document): """Test record retrieval.""" item_url = url_for('invenio_records_rest.doc_item', pid_value='doc1') res = client.get(item_url) assert res.status_code == 200 assert res.headers['ETag'] == '"{}"'.format(document.revision_id) data = get_json(res) assert document.dumps() == data['metadata'] # Check metadata for k in ['created', 'updated', 'metadata', 'links']: assert k in data # Check self links res = client.get(to_relative_url(data['links']['self'])) assert res.status_code == 200 assert data == get_json(res) assert document.dumps() == data['metadata'] list_url = url_for('invenio_records_rest.doc_list', pid='doc1') res = client.get(list_url) assert res.status_code == 200 data = get_json(res) assert data['hits']['hits'][0]['metadata'] == document.replace_refs() res = client.get( url_for('api_documents.import_bnf_ean', ean='9782070541270')) assert res.status_code == 401
def test_acq_accounts_get(client, acq_account_fiction_martigny): """Test record retrieval.""" item_url = url_for('invenio_records_rest.acac_item', pid_value='acac1') acq_account = acq_account_fiction_martigny res = client.get(item_url) assert res.status_code == 200 assert res.headers['ETag'] == '"{}"'.format(acq_account.revision_id) data = get_json(res) assert acq_account.dumps() == data['metadata'] # Check metadata for k in ['created', 'updated', 'metadata', 'links']: assert k in data # Check self links res = client.get(to_relative_url(data['links']['self'])) assert res.status_code == 200 assert data == get_json(res) assert acq_account.dumps() == data['metadata'] list_url = url_for('invenio_records_rest.acac_list', pid='acac1') res = client.get(list_url) assert res.status_code == 200 data = get_json(res) assert data['hits']['hits'][0]['metadata']['pid'] == 'acac1'
def test_patron_types_get(client, patron_type_children_martigny): """Test record retrieval.""" item_url = url_for('invenio_records_rest.ptty_item', pid_value='ptty1') patron_type = patron_type_children_martigny res = client.get(item_url) assert res.status_code == 200 assert res.headers['ETag'] == '"{}"'.format(patron_type.revision_id) data = get_json(res) assert patron_type.dumps() == data['metadata'] # Check metadata for k in ['created', 'updated', 'metadata', 'links']: assert k in data # Check self links res = client.get(to_relative_url(data['links']['self'])) assert res.status_code == 200 assert data == get_json(res) assert patron_type.dumps() == data['metadata'] list_url = url_for('invenio_records_rest.ptty_list', pid='ptty1') res = client.get(list_url) assert res.status_code == 200 data = get_json(res) assert data['hits']['hits'][0]['metadata'] == patron_type.replace_refs()
def test_patrons_profile(client, user_librarian_no_email): """.""" # check redirection res = client.get(url_for('patrons.profile')) assert res.status_code == 302 assert to_relative_url(res.location) == unquote(url_for( 'security.login', next='/patrons/profile')) # check with logged user login_user_via_session(client, user_librarian_no_email.user) res = client.get(url_for('patrons.profile')) assert res.status_code == 200
def test_notifications_get( client, notification_availability_martigny): """Test record retrieval.""" record = notification_availability_martigny pid = record.get('pid') item_url = url_for( 'invenio_records_rest.notif_item', pid_value=pid) list_url = url_for( 'invenio_records_rest.notif_list', q='pid:' + pid) item_url_with_resolve = url_for( 'invenio_records_rest.notif_item', pid_value=record.pid, resolve=1, sources=1 ) res = client.get(item_url) assert res.status_code == 200 assert res.headers['ETag'] == '"{}"'.format(record.revision_id) data = get_json(res) assert record.dumps() == data['metadata'] # Check metadata for k in ['created', 'updated', 'metadata', 'links']: assert k in data # Check self links res = client.get(to_relative_url(data['links']['self'])) assert res.status_code == 200 assert data == get_json(res) assert record.dumps() == data['metadata'] # check resolve res = client.get(item_url_with_resolve) assert res.status_code == 200 data = get_json(res) assert record.replace_refs().dumps() == data['metadata'] res = client.get(list_url) assert res.status_code == 200 data = get_json(res) result = data['hits']['hits'][0]['metadata'] # organisation has been added during the indexing del(result['organisation']) assert result == record.replace_refs() record.delete(dbcommit=True, delindex=True) flush_index(NotificationsSearch.Meta.index)
def test_documents_get(client, document): """Test record retrieval.""" def clean_authorized_access_point(data): """Clean contribution from authorized_access_point_""" contributions = [] for contribution in data.get('contribution', []): agent = {} for item in contribution['agent']: if item == 'authorized_access_point': agent['preferred_name'] = contribution['agent'][item] elif not item.startswith('authorized_access_point_'): agent[item] = contribution['agent'][item] contribution['agent'] = agent contributions.append(contribution) data.pop('sort_date_new', None) data.pop('sort_date_old', None) data.pop('sort_title', None) data.pop('isbn', None) return data item_url = url_for('invenio_records_rest.doc_item', pid_value='doc1') res = client.get(item_url) assert res.status_code == 200 assert res.headers['ETag'] == '"{}"'.format(document.revision_id) data = get_json(res) assert document.dumps() == clean_authorized_access_point(data['metadata']) # Check self links res = client.get(to_relative_url(data['links']['self'])) assert res.status_code == 200 assert data == get_json(res) assert document.dumps() == clean_authorized_access_point(data['metadata']) list_url = url_for('invenio_records_rest.doc_list') res = client.get(list_url) assert res.status_code == 200 data = get_json(res) data_clean = clean_authorized_access_point( data['hits']['hits'][0]['metadata'] ) document = document.replace_refs().dumps() assert document == data_clean list_url = url_for('invenio_records_rest.doc_list', q="Vincent Berthe") res = client.get(list_url) assert res.status_code == 200 data = get_json(res) assert data['hits']['total']['value'] == 1
def test_patron_transactions_get(client, patron_transaction_overdue_martigny): """Test record retrieval.""" transaction = patron_transaction_overdue_martigny pid = transaction.pid item_url = url_for('invenio_records_rest.pttr_item', pid_value=pid) list_url = url_for( 'invenio_records_rest.pttr_list', q='pid:' + pid) item_url_with_resolve = url_for( 'invenio_records_rest.pttr_item', pid_value=pid, resolve=1, sources=1 ) res = client.get(item_url) assert res.status_code == 200 assert res.headers['ETag'] == '"{}"'.format(transaction.revision_id) data = get_json(res) assert transaction.dumps() == data['metadata'] # Check metadata for k in ['created', 'updated', 'metadata', 'links']: assert k in data # Check self links res = client.get(to_relative_url(data['links']['self'])) assert res.status_code == 200 assert data == get_json(res) assert transaction.dumps() == data['metadata'] # check resolve res = client.get(item_url_with_resolve) assert res.status_code == 200 data = get_json(res) assert transaction.replace_refs().dumps() == data['metadata'] res = client.get(list_url) assert res.status_code == 200 data = get_json(res) result = data['hits']['hits'][0]['metadata'] del(result['document']) del(result['library']) del(result['item']) assert result == transaction.replace_refs()
def test_stats_get(client, stats, csv_header): """Test record retrieval.""" item_url = url_for('invenio_records_rest.stat_item', pid_value=stats.pid) res = client.get(item_url) assert res.status_code == 200 assert res.headers['ETag'] data = get_json(res) # Check metadata for k in ['created', 'updated', 'metadata', 'links']: assert k in data # Check self links res = client.get(to_relative_url(data['links']['self'])) assert res.status_code == 200 # CSV format item_url = url_for('invenio_records_rest.stat_item', pid_value=stats.pid, format='csv') res = client.get(item_url, headers=csv_header) assert res.status_code == 200 data = get_csv(res) assert data == ( 'library id,library name,number_of_active_patrons,' 'number_of_checkins,number_of_checkouts,' 'number_of_deleted_items,number_of_documents,' 'number_of_items,number_of_librarians,number_of_libraries,' 'number_of_new_items,number_of_new_patrons,' 'number_of_order_lines,number_of_patrons,' 'number_of_renewals,number_of_requests,' 'number_of_satisfied_ill_request\r\n' 'lib3,Library of Fully,0,0,0,0,1,1,0,2,1,0,0,0,0,0,0\r\n' 'lib1,Library of Martigny-ville,0,0,0,0,1,1,0,2,1,0,0,0,0,0,0\r\n' 'lib4,Library of Sion,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0\r\n') list_url = url_for('invenio_records_rest.stat_list') res = client.get(list_url) assert res.status_code == 200 data = get_json(res) assert data['hits']['hits']
def test_holdings_get(client, item_lib_martigny, item_lib_martigny_masked): """Test record retrieval.""" holding = Holding.get_record_by_pid(item_lib_martigny.holding_pid) item_url = url_for('invenio_records_rest.hold_item', pid_value=holding.pid) list_url = url_for( 'invenio_records_rest.hold_list', q='pid:' + holding.pid) item_url_with_resolve = url_for( 'invenio_records_rest.hold_item', pid_value=holding.pid, resolve=1, sources=1 ) res = client.get(item_url) assert res.status_code == 200 assert res.headers['ETag'] == '"{}"'.format(holding.revision_id) data = get_json(res) assert holding.dumps() == data['metadata'] # Check metadata for k in ['created', 'updated', 'metadata', 'links']: assert k in data # Check self links res = client.get(to_relative_url(data['links']['self'])) assert res.status_code == 200 assert data == get_json(res) assert holding.dumps() == data['metadata'] # check resolve res = client.get(item_url_with_resolve) assert res.status_code == 200 data = get_json(res) assert holding.replace_refs().dumps() == data['metadata'] res = client.get(list_url) assert res.status_code == 200 data = get_json(res) result = data['hits']['hits'][0]['metadata'] assert result.pop('public_items_count') == 1 assert result.pop('items_count') == 2 assert result == holding.replace_refs()
def test_locations_get(client, loc_public_martigny): """Test record retrieval.""" location = loc_public_martigny item_url = url_for('invenio_records_rest.loc_item', pid_value=location.pid) list_url = url_for( 'invenio_records_rest.loc_list', q='pid:' + location.pid) item_url_with_resolve = url_for( 'invenio_records_rest.loc_item', pid_value=location.pid, resolve=1, sources=1 ) res = client.get(item_url) assert res.status_code == 200 assert res.headers['ETag'] == '"{}"'.format(location.revision_id) data = get_json(res) assert location.dumps() == data['metadata'] # Check metadata for k in ['created', 'updated', 'metadata', 'links']: assert k in data # Check self links res = client.get(to_relative_url(data['links']['self'])) assert res.status_code == 200 assert data == get_json(res) assert location.dumps() == data['metadata'] # check resolve res = client.get(item_url_with_resolve) assert res.status_code == 200 data = get_json(res) assert location.replace_refs().dumps() == data['metadata'] res = client.get(list_url) assert res.status_code == 200 data = get_json(res) result = data['hits']['hits'][0]['metadata'] # organisation has been added during the indexing del (result['organisation']) assert result == location.replace_refs()
def test_acq_receipt_lines_get(client, acq_receipt_line_1_fiction_martigny): """Test record retrieval.""" item_url = url_for('invenio_records_rest.acrl_item', pid_value='acrl1') acq_receipt_line = deepcopy(acq_receipt_line_1_fiction_martigny) res = client.get(item_url) assert res.status_code == 200 assert res.headers['ETag'] == '"{}"'.format(acq_receipt_line.revision_id) data = get_json(res) assert acq_receipt_line.dumps() == data['metadata'] # Check metadata for k in ['created', 'updated', 'metadata', 'links']: assert k in data # Check self links res = client.get(to_relative_url(data['links']['self'])) assert res.status_code == 200 assert data == get_json(res) assert acq_receipt_line.dumps() == data['metadata'] list_url = url_for('invenio_records_rest.acrl_list', pid='acrl1') res = client.get(list_url) assert res.status_code == 200 data = get_json(res) metadata = data['hits']['hits'][0]['metadata'] total_amount = metadata['total_amount'] assert total_amount == 1000.0 # remove dynamically added fields del metadata['acq_account'] del metadata['total_amount'] del metadata['document'] assert data['hits']['hits'][0]['metadata'] == \ acq_receipt_line.replace_refs()
def test_acq_receipt_get( client, org_martigny, vendor2_martigny, acq_receipt_fiction_saxon ): """Test record retrieval.""" acre = acq_receipt_fiction_saxon acq_receipt = deepcopy(acre) item_url = url_for('invenio_records_rest.acre_item', pid_value=acre.pid) list_url = url_for('invenio_records_rest.acre_list', q=f'pid:{acre.pid}') res = client.get(item_url) assert res.status_code == 200 assert res.headers['ETag'] == '"{}"'.format(acq_receipt.revision_id) data = get_json(res) assert acq_receipt.dumps() == data['metadata'] # Check metadata for k in ['created', 'updated', 'metadata', 'links']: assert k in data # Check self links res = client.get(to_relative_url(data['links']['self'])) assert res.status_code == 200 assert data == get_json(res) assert acq_receipt.dumps() == data['metadata'] res = client.get(list_url) assert res.status_code == 200 data = get_json(res) metadata = data['hits']['hits'][0]['metadata'] # remove dynamically added fields del metadata['quantity'] del metadata['receipt_lines'] del metadata['total_amount'] assert metadata == acq_receipt.replace_refs()
def test_contributions_get(client, contribution_person): """Test record retrieval.""" item_url = url_for('invenio_records_rest.cont_item', pid_value='cont_pers') res = client.get(item_url) assert res.status_code == 200 assert res.headers['ETag'] == '"{}"'.format( contribution_person.revision_id) data = get_json(res) assert contribution_person.dumps() == data['metadata'] assert contribution_person.dumps() == data['metadata'] # Check metadata for k in ['created', 'updated', 'metadata', 'links']: assert k in data # Check self links res = client.get(to_relative_url(data['links']['self'])) assert res.status_code == 200 assert data == get_json(res) assert contribution_person.dumps() == data['metadata'] list_url = url_for('invenio_records_rest.cont_list', pid='cont_pers') res = client.get(list_url) assert res.status_code == 200 data = get_json(res) contribution_person = contribution_person.replace_refs() contribution_person['organisations'] = \ contribution_person.organisation_pids contribution_person['type'] = ContributionType.PERSON contribution_person['type'] = ContributionType.PERSON assert data['hits']['hits'][0]['metadata'] == \ contribution_person.replace_refs()
def test_documents_get(client, document): """Test record retrieval.""" item_url = url_for('invenio_records_rest.doc_item', pid_value='doc1') res = client.get(item_url) assert res.status_code == 200 assert res.headers['ETag'] == '"{}"'.format(document.revision_id) data = get_json(res) assert document.dumps() == data['metadata'] # Check metadata for k in ['created', 'updated', 'metadata', 'links']: assert k in data # Check self links res = client.get(to_relative_url(data['links']['self'])) assert res.status_code == 200 assert data == get_json(res) assert document.dumps() == data['metadata'] list_url = url_for('invenio_records_rest.doc_list') res = client.get(list_url) assert res.status_code == 200 data = get_json(res) document = document.replace_refs() assert data['hits']['hits'][0]['metadata'] == \ document.replace_refs().dumps() list_url = url_for('invenio_records_rest.doc_list', q="Vincent Berthe") res = client.get(list_url) assert res.status_code == 200 data = get_json(res) assert data['hits']['total'] == 1
def test_patrons_profile(client, librarian_martigny_no_email, loan_pending_martigny, patron_martigny_no_email, loc_public_martigny, item_type_standard_martigny, item_lib_martigny, json_header, circ_policy_short_martigny, ill_request_martigny): """Test patron profile.""" # check redirection res = client.get(url_for('patrons.profile')) assert res.status_code == 302 assert to_relative_url(res.location) == unquote( url_for('security.login', next='/global/patrons/profile')) # check with logged user login_user_via_session(client, patron_martigny_no_email.user) res = client.get(url_for('patrons.profile')) assert res.status_code == 200 # create patron transactions data = { 'patron_pid': patron_martigny_no_email.pid, 'item_pid': item_lib_martigny.pid, 'pickup_location_pid': loc_public_martigny.pid, 'transaction_location_pid': loc_public_martigny.pid, 'transaction_user_pid': librarian_martigny_no_email.pid } loan = item_lib_martigny.request(**data) loan_pid = loan[1].get('request').get('pid') pending_loan = loan_pending_martigny pending_loan_pid = pending_loan.get('pid') assert pending_loan['state'] == LoanState.PENDING # patron successfully cancelled the request res = client.post(url_for('patrons.profile'), data={ 'loan_pid': pending_loan_pid, 'type': 'cancel' }) assert res.status_code == 302 # Check redirect pending_loan = Loan.get_record_by_pid(pending_loan_pid) assert pending_loan['state'] == LoanState.CANCELLED loan = item_lib_martigny.checkout(**data) # patron successfully renew the item res = client.post(url_for('patrons.profile'), data={ 'loan_pid': loan_pid, 'type': 'renew' }) assert res.status_code == 302 # check redirect # disable possiblity to renew the item circ_policy_short_martigny['number_renewals'] = 0 circ_policy_short_martigny.update(circ_policy_short_martigny, dbcommit=True, reindex=True) # patron fails to renew the item res = client.post(url_for('patrons.profile'), data={ 'loan_pid': loan_pid, 'type': 'renew' }) assert res.status_code == 302 # Check redirect # checkin item to create history for this patron data['transaction_location_pid'] = loc_public_martigny.pid data['pid'] = loan_pid loan = item_lib_martigny.checkin(**data)