Example #1
0
def deposit(app, es, users, locations, deposit_metadata, sip_metadata_types):
    """New deposit with files."""
    with app.test_request_context():
        datastore = app.extensions['security'].datastore
        login_user(datastore.get_user(users[0]['email']))
        id_ = uuid4()
        zenodo_deposit_minter(id_, deposit_metadata)
        deposit = Deposit.create(deposit_metadata, id_=id_)
        db_.session.commit()
    current_search.flush_and_refresh(index='deposits')
    return deposit
Example #2
0
def test_doi_minting(db, doi_in, doi_out):
    """Test using same integer for dep/rec ids."""
    dep_uuid, rec_uuid = uuid4(), uuid4()
    data = dict(doi=doi_in)
    zenodo_deposit_minter(dep_uuid, data)
    zenodo_record_minter(rec_uuid, data)
    db.session.commit()

    pid = PersistentIdentifier.get('doi', doi_out)
    assert pid.object_uuid == rec_uuid
    assert pid.status == PIDStatus.RESERVED
Example #3
0
def deposit(app, es, users, locations, deposit_metadata, sip_metadata_types):
    """New deposit with files."""
    with app.test_request_context():
        datastore = app.extensions['security'].datastore
        login_user(datastore.get_user(users[0]['email']))
        id_ = uuid4()
        zenodo_deposit_minter(id_, deposit_metadata)
        deposit = Deposit.create(deposit_metadata, id_=id_)
        db_.session.commit()
    current_search.flush_and_refresh(index='deposits')
    return deposit
Example #4
0
def loaddemorecords(records, owner):
    """Load demo records."""
    with current_app.test_request_context():
        login_user(owner)
        for record in records:
            deposit_data = legacyjson_v1(record)
            deposit_id = uuid4()
            zenodo_deposit_minter(deposit_id, deposit_data)
            deposit = ZenodoDeposit.create(deposit_data, id_=deposit_id)
            db.session.commit()
            filename = record['files'][0]
            deposit.files[filename] = BytesIO(filename)
            db.session.commit()
            deposit.publish()
            db.session.commit()
Example #5
0
def test_double_minting_depid_recid(db):
    """Test using same integer for dep/rec ids."""
    dep_uuid = uuid4()
    data = dict()
    pid = zenodo_deposit_minter(dep_uuid, data)
    # Assert values added to data. Depid and recid have IDs starting from
    # '2' since the conceptrecid is minted first
    assert data['_deposit']['id'] == '2'
    assert data['conceptrecid'] == '1'
    assert data['recid'] == 2
    assert 'doi' not in data
    # Assert pid values
    assert pid.pid_type == 'depid'
    assert pid.pid_value == '2'
    assert pid.status == PIDStatus.REGISTERED
    assert pid.object_uuid == dep_uuid
    # Assert reservation of recid.
    assert PersistentIdentifier.get('recid', pid.pid_value).status \
        == PIDStatus.RESERVED
    db.session.commit()

    # Assert registration of recid.
    rec_uuid = uuid4()
    pid = zenodo_record_minter(rec_uuid, data)
    assert pid.pid_type == 'recid'
    assert pid.pid_value == '2'
    assert pid.status == PIDStatus.REGISTERED
    assert pid.object_uuid == rec_uuid
    assert data['doi'] == '10.5072/zenodo.2'
    assert data['_oai']['id'] == 'oai:zenodo.org:2'
Example #6
0
def test_cleanup_indexed_deposits(app, db, es, locations, users,
                                  deposit_metadata, sip_metadata_types):
    with app.test_request_context():
        datastore = app.extensions['security'].datastore
        login_user(datastore.get_user(users[0]['email']))
        id_ = uuid4()
        depid = zenodo_deposit_minter(id_, deposit_metadata)
        ZenodoDeposit.create(deposit_metadata, id_=id_)

    # Emulate a database "failure", which would wipe any models in the session
    db.session.remove()
    current_search.flush_and_refresh(index='deposits')

    # Deposit has been indexed in ES, but not commimted in DB
    assert PersistentIdentifier.query.filter(
        PersistentIdentifier.pid_type == depid.pid_type,
        PersistentIdentifier.pid_value == depid.pid_value).count() == 0
    assert (RecordsSearch(index='deposits').get_record(id_).execute()
            [0]._deposit.id == depid.pid_value)

    cleanup_indexed_deposits.apply()
    current_search.flush_and_refresh(index='deposits')

    assert PersistentIdentifier.query.filter(
        PersistentIdentifier.pid_type == depid.pid_type,
        PersistentIdentifier.pid_value == depid.pid_value).count() == 0
    assert len(RecordsSearch(index='deposits').get_record(id_).execute()) == 0
Example #7
0
def deposit(app, es, users, location):
    """New deposit with files."""
    data = dict(
        title='Test title',
        creators=[
            dict(name='Doe, John', affiliation='Atlantis'),
            dict(name='Smith, Jane', affiliation='Atlantis')
        ],
        description='Test Description',
        resource_type=dict(type='publication'),
        publication_date='2013-05-08',
        access_right='open'
    )
    with app.test_request_context():
        datastore = app.extensions['security'].datastore
        login_user(datastore.get_user(users[0]['email']))
        id_ = uuid4()
        zenodo_deposit_minter(id_, data)
        deposit = Deposit.create(data, id_=id_)
        db_.session.commit()
    current_search.flush_and_refresh(index='deposits')
    return deposit
Example #8
0
def test_invalid_doi(db, doi):
    """Test using same integer for dep/rec ids."""
    dep_uuid = uuid4()
    data = dict(doi=doi)
    zenodo_deposit_minter(dep_uuid, data)
    assert PersistentIdentifier.query.count() == 3