Example #1
0
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
Example #2
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
Example #5
0
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
Example #6
0
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']
Example #11
0
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
Example #12
0
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