Exemplo n.º 1
0
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
Exemplo n.º 3
0
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)