def test_document_can_request_view( client, item_lib_fully, loan_pending_martigny, document, patron_martigny, patron2_martigny, item_type_standard_martigny, circulation_policies, librarian_martigny, item_lib_martigny, item_lib_saxon, item_lib_sion, loc_public_martigny): """Test can request on document view.""" login_user_via_session(client, patron_martigny.user) with mock.patch('rero_ils.modules.documents.views.current_user', patron_martigny.user), mock.patch( 'rero_ils.modules.documents.views.current_patrons', [patron_martigny]): can, _ = can_request(item_lib_fully) assert can can, _ = can_request(item_lib_sion) assert not can with mock.patch('rero_ils.modules.documents.views.current_user', patron2_martigny.user), mock.patch( 'rero_ils.modules.documents.views.current_patrons', [patron2_martigny]): can, _ = can_request(item_lib_fully) assert not can picks = record_library_pickup_locations(item_lib_fully) assert len(picks) == 3 picks = record_library_pickup_locations(item_lib_martigny) assert len(picks) == 3
def test_document_can_request_view( client, item_lib_fully, loan_pending_martigny, document, patron_martigny_no_email, patron2_martigny_no_email, item_type_standard_martigny, circulation_policies, librarian_martigny_no_email, item_lib_martigny, item_lib_saxon, item_lib_sion, loc_public_martigny): """Test can request on document view.""" login_user_via_session(client, patron_martigny_no_email.user) assert not patron_request_rank(item_lib_fully) with mock.patch('rero_ils.modules.documents.views.current_user', patron_martigny_no_email.user): assert can_request(item_lib_fully) assert not requested_this_item(item_lib_fully) assert number_of_requests(item_lib_fully) == 1 assert number_of_requests(item_lib_martigny) == 0 assert not can_request(item_lib_sion) with mock.patch('rero_ils.modules.documents.views.current_user', patron2_martigny_no_email.user): assert not can_request(item_lib_fully) assert requested_this_item(item_lib_fully) assert patron_request_rank(item_lib_fully) status = item_status_text(item_lib_fully, format='medium', locale='en') assert status == 'not available (requested)' status = item_status_text(item_lib_martigny, format='medium', locale='en') assert status == 'available' picks = item_library_pickup_locations(item_lib_fully) assert len(picks) == 3 picks = item_library_pickup_locations(item_lib_martigny) assert len(picks) == 3
def test_item_can_request(client, document, holding_lib_martigny, item_lib_martigny, librarian_martigny, lib_martigny, patron_martigny, circulation_policies, patron_type_children_martigny, loc_public_martigny_data, system_librarian_martigny, item_lib_martigny_data): """Test item can request API.""" # test no logged user res = client.get( url_for('api_item.can_request', item_pid=item_lib_martigny.pid, library_pid=lib_martigny.pid, patron_barcode=patron_martigny.get('patron', {}).get('barcode')[0])) assert res.status_code == 401 can, _ = can_request(item_lib_martigny) assert not can login_user_via_session(client, librarian_martigny.user) # valid test res = client.get( url_for('api_item.can_request', item_pid=item_lib_martigny.pid, library_pid=lib_martigny.pid, patron_barcode=patron_martigny.get('patron', {}).get('barcode')[0])) assert res.status_code == 200 data = get_json(res) assert data.get('can') # test no valid item res = client.get( url_for('api_item.can_request', item_pid='no_item', library_pid=lib_martigny.pid, patron_barcode=patron_martigny.get('patron', {}).get('barcode')[0])) assert res.status_code == 404 # test no valid library res = client.get( url_for('api_item.can_request', item_pid=item_lib_martigny.pid, library_pid='no_library', patron_barcode=patron_martigny.get('patron', {}).get('barcode')[0])) assert res.status_code == 404 # test no valid patron res = client.get( url_for('api_item.can_request', item_pid=item_lib_martigny.pid, library_pid=lib_martigny.pid, patron_barcode='no_barcode')) assert res.status_code == 404 # test no valid item status item_lib_martigny['status'] = ItemStatus.MISSING item_lib_martigny.update(item_lib_martigny, dbcommit=True, reindex=True) res = client.get( url_for('api_item.can_request', item_pid=item_lib_martigny.pid, library_pid=lib_martigny.pid, patron_barcode=patron_martigny.get('patron', {}).get('barcode')[0])) assert res.status_code == 200 data = get_json(res) assert not data.get('can') item_lib_martigny['status'] = ItemStatus.ON_SHELF item_lib_martigny.update(item_lib_martigny, dbcommit=True, reindex=True) # Location :: allow_request == false # create a new location and set 'allow_request' to false. Assign a new # item to this location. Chek if this item can be requested : it couldn't # with 'Item location doesn't allow request' reason. new_location = deepcopy(loc_public_martigny_data) del new_location['pid'] new_location['allow_request'] = False new_location = Location.create(new_location, dbcommit=True, reindex=True) assert new_location new_item = deepcopy(item_lib_martigny_data) del new_item['pid'] new_item['barcode'] = 'dummy_barcode_allow_request' new_item['location']['$ref'] = get_ref_for_pid(Location, new_location.pid) new_item = Item.create(new_item, dbcommit=True, reindex=True) assert new_item res = client.get(url_for('api_item.can_request', item_pid=new_item.pid)) assert res.status_code == 200 data = get_json(res) assert not data.get('can') # remove created data item_url = url_for('invenio_records_rest.item_item', pid_value=new_item.pid) hold_url = url_for('invenio_records_rest.hold_item', pid_value=new_item.holding_pid) loc_url = url_for('invenio_records_rest.loc_item', pid_value=new_location.pid) client.delete(item_url) client.delete(hold_url) client.delete(loc_url)