def test_loan_return_receiver(app, db, access_token): """Use the webhooks api to loan and return an item.""" item_uuid = uuid.uuid4() item_data = {} pid = circulation_item_minter(item_uuid, item_data) item = Item.create(item_data, id_=item_uuid) with app.test_request_context(): with app.test_client() as client: url = url_for('invenio_webhooks.event_list', receiver_id='circulation_loan') url += '?access_token=' + access_token data = {'item_id': pid.pid_value} res = client.post(url, data=json.dumps(data), content_type='application/json') assert res.status_code == 202 item = Item.get_record(item.id) assert item['_circulation']['status'] == ItemStatus.ON_LOAN assert len(item['_circulation']['holdings']) == 1 url = url_for('invenio_webhooks.event_list', receiver_id='circulation_return') url += '?access_token=' + access_token data = {'item_id': pid.pid_value} res = client.post(url, data=json.dumps(data), content_type='application/json') assert res.status_code == 202 item = Item.get_record(item.id) assert item['_circulation']['status'] == ItemStatus.ON_SHELF assert len(item['_circulation']['holdings']) == 0
def test_extend_receiver(app, db, access_token): """Use the webhooks api to an item loan.""" item_uuid = uuid.uuid4() item_data = {} pid = circulation_item_minter(item_uuid, item_data) item = Item.create(item_data, id_=item_uuid) with app.test_request_context(): with app.test_client() as client: url = url_for('invenio_webhooks.event_list', receiver_id='circulation_loan') url += '?access_token=' + access_token data = {'item_id': pid.pid_value} res = client.post(url, data=json.dumps(data), content_type='application/json') assert res.status_code == 202 item = Item.get_record(item.id) assert item['_circulation']['status'] == ItemStatus.ON_LOAN url = url_for('invenio_webhooks.event_list', receiver_id='circulation_extend') url += '?access_token=' + access_token data = { 'item_id': pid.pid_value, 'requested_end_date': datetime.date.today().isoformat(), } res = client.post(url, data=json.dumps(data), content_type='application/json') assert res.status_code == 202 item = Item.get_record(item.id) assert item['_circulation']['status'] == ItemStatus.ON_LOAN
def test_item_minter(db): data1 = {'foo': 'bar'} record_uuid1 = uuid.uuid4() pid1 = circulation_item_minter(record_uuid1, data1) assert data1['control_number'] == pid1.pid_value with pytest.raises(AssertionError): circulation_item_minter(uuid.uuid4(), data1) data2 = {'foo': 'bar'} record_uuid2 = uuid.uuid4() pid2 = circulation_item_minter(record_uuid2, data2) assert data2['control_number'] == pid2.pid_value assert int(pid1.pid_value) == int(pid2.pid_value) - 1
def test_item_minter(db): data1 = {'foo': 'bar'} record_uuid1 = uuid.uuid4() pid1 = circulation_item_minter(record_uuid1, data1) assert data1['control_number'] == pid1.pid_value with pytest.raises(AssertionError): circulation_item_minter(uuid.uuid4(), data1) data2 = {'foo': 'bar'} record_uuid2 = uuid.uuid4() pid2 = circulation_item_minter(record_uuid2, data2) assert data2['control_number'] == pid2.pid_value assert int(pid1.pid_value) == int(pid2.pid_value) - 1
def test_circulation_fetcher(db): """Test circulation_item_fetcher functionality.""" item = Item.create({'foo': 'bar'}) pid = circulation_item_minter(item.id, item) item.commit() db.session.commit() fetched = circulation_item_fetcher(item.id, item) assert pid.pid_value == fetched.pid_value
def items(): """Create circulation items.""" from invenio_db import db from invenio_indexer.api import RecordIndexer from invenio_circulation.api import Item from invenio_circulation.minters import circulation_item_minter for x in range(10): item = Item.create({ 'foo': 'bar{0}'.format(x), 'title_statement': {'title': 'title{0}'.format(x)}, 'record': {'id': 1} }) circulation_item_minter(item.id, item) item.commit() record_indexer = RecordIndexer() record_indexer.index(item) db.session.commit()
def test_rest_search(app, db, es, url_addition, count): """Test REST API search functionality.""" item = Item.create({'foo': 'bar'}) circulation_item_minter(item.id, item) item.commit() db.session.commit() record_indexer = RecordIndexer() record_indexer.index(item) current_search.flush_and_refresh('_all') with app.test_request_context(): with app.test_client() as client: base_url = url_for('circulation_rest.crcitm_list') url = base_url + url_addition res = client.get(url) hits = json.loads(res.data.decode('utf-8'))['hits']['hits'] assert len(hits) == count
def test_crud_read(app, db, es): """Test REST API get functionality.""" item = Item.create({'foo': 'bar'}) circulation_item_minter(item.id, item) item.commit() db.session.commit() record_indexer = RecordIndexer() record_indexer.index(item) current_search.flush_and_refresh('_all') with app.test_request_context(): with app.test_client() as client: url = url_for('circulation_rest.crcitm_item', pid_value=item['control_number']) res = client.get(url) fetched_item = json.loads(res.data.decode('utf-8'))['metadata'] assert fetched_item['control_number'] == item['control_number']
def test_rest_search(app, db, es, url_addition, count): """Test REST API search functionality.""" item = Item.create({'foo': 'bar'}) circulation_item_minter(item.id, item) item.commit() db.session.commit() record_indexer = RecordIndexer() record_indexer.index(item) current_search.flush_and_refresh('_all') with app.test_request_context(): with app.test_client() as client: base_url = url_for('circulation_rest.crcitm_list') url = base_url + url_addition res = client.get(url) hits = json.loads(res.data.decode('utf-8'))['hits']['hits'] assert len(hits) == count
def test_crud_read(app, db, es): """Test REST API get functionality.""" item = Item.create({'foo': 'bar'}) circulation_item_minter(item.id, item) item.commit() db.session.commit() record_indexer = RecordIndexer() record_indexer.index(item) current_search.flush_and_refresh('_all') with app.test_request_context(): with app.test_client() as client: url = url_for('circulation_rest.crcitm_item', pid_value=item['control_number']) res = client.get(url) fetched_item = json.loads(res.data.decode('utf-8'))['metadata'] assert fetched_item['control_number'] == item['control_number']
def test_receiver_base(app, db, access_token): """Test ReceiverBase failure behavior.""" item_uuid = uuid.uuid4() item_data = {} pid = circulation_item_minter(item_uuid, item_data) item = Item.create(item_data, id_=item_uuid) with app.test_request_context(): with app.test_client() as client: url = url_for('invenio_webhooks.event_list', receiver_id='circulation_loan') url += '?access_token=' + access_token yesterday = datetime.date.today() + datetime.timedelta(days=-1) data = { 'item_id': pid.pid_value, 'start_date': str(yesterday), } res = client.post(url, data=json.dumps(data), content_type='application/json') assert res.status_code == 400
def test_dry_run(app, db, access_token): """Use the webhooks api to loan and return an item.""" item_uuid = uuid.uuid4() item_data = {} pid = circulation_item_minter(item_uuid, item_data) item = Item.create(item_data, id_=item_uuid) with app.test_request_context(): with app.test_client() as client: # Successful request url = url_for('invenio_webhooks.event_list', receiver_id='circulation_loan') url += '?access_token=' + access_token data = { 'item_id': pid.pid_value, 'dry_run': True, } res = client.post(url, data=json.dumps(data), content_type='application/json') assert res.status_code == 204 item = Item.get_record(item.id) assert item['_circulation']['status'] == ItemStatus.ON_SHELF assert len(item['_circulation']['holdings']) == 0 # Invalid request url = url_for('invenio_webhooks.event_list', receiver_id='circulation_loan') url += '?access_token=' + access_token yesterday = datetime.date.today() + datetime.timedelta(days=-1) data = { 'item_id': pid.pid_value, 'start_date': str(yesterday), 'dry_run': True, } res = client.post(url, data=json.dumps(data), content_type='application/json') assert res.status_code == 400