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
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()
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'
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)