Пример #1
0
def create_minimal_resources_in_transit(db, minimal_member_record,
                                        minimal_location_record,
                                        item_record_in_transit,
                                        minimal_document_record):
    """Simple patron record."""
    member = MemberWithLocations.create(minimal_member_record, dbcommit=True)
    location = Location.create(minimal_location_record, dbcommit=True)
    member.add_location(location)
    doc = DocumentsWithItems.create(minimal_document_record, dbcommit=True)
    item = Item.create({})
    item.update(item_record_in_transit, dbcommit=True)
    doc.add_item(item, dbcommit=True)
    db.session.commit()
    yield doc, item, member, location
Пример #2
0
def test_create(db, minimal_document_record, minimal_item_record,
                minimal_member_record, minimal_location_record):
    """Test DocumentWithItems creation."""
    memb = MemberWithLocations.create(minimal_member_record, dbcommit=True)
    loc = Location.create(minimal_location_record, dbcommit=True)
    memb.add_location(loc, dbcommit=True)
    minimal_item_record['location_pid'] = loc.pid
    item = Item.create(minimal_item_record, dbcommit=True)
    doc = DocumentsWithItems.create(minimal_document_record, dbcommit=True)
    assert doc.itemslist == []

    doc.add_item(item, dbcommit=True)
    assert doc.itemslist[0] == item

    dump = doc.dumps()
    assert dump['itemslist'][0] == item.dumps()
Пример #3
0
def test_member_name(db, minimal_member_record, minimal_item_record,
                     minimal_location_record):
    """Test member names."""
    member = MemberWithLocations.create(minimal_member_record, dbcommit=True)
    assert member
    location = Location.create(minimal_location_record, dbcommit=True)
    assert location
    member.add_location(location, dbcommit=True)
    assert member.locations
    item = Item.create({})
    item.update(minimal_item_record, dbcommit=True)
    assert item
    data = item.dumps()
    assert data.get('member_pid') == '1'
    assert data.get('member_name') == 'MV Sion'
    holding = data.get('_circulation').get('holdings')[1]
    assert holding['pickup_member_name'] == 'MV Sion'
Пример #4
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)