def test_delete(app, db, fake_schemas, location): """Test simple delete.""" deposit = Deposit.create({}) pid = deposit.pid assert deposit["_deposit"]["id"] assert "draft" == deposit.status assert 0 == deposit.revision_id deposit.delete() with pytest.raises(NoResultFound): Deposit.get_record(deposit.id) with pytest.raises(PIDInvalidAction): deposit.publish(pid=pid)
def test_delete(app, db, fake_schemas): """Test simple delete.""" deposit = Deposit.create({}) pid = deposit.pid assert deposit['_deposit']['id'] assert 'draft' == deposit['_deposit']['status'] assert 0 == deposit.revision_id deposit.delete() with pytest.raises(NoResultFound): Deposit.get_record(deposit.id) with pytest.raises(PIDInvalidAction): deposit.publish(pid=pid)
def test_delete(app, fake_schemas, location): """Test simple delete.""" deposit = Deposit.create({}) pid = deposit.pid assert deposit['_deposit']['id'] assert 'draft' == deposit.status assert 0 == deposit.revision_id deposit.delete() with pytest.raises(NoResultFound): Deposit.get_record(deposit.id) with pytest.raises(PIDInvalidAction): deposit.publish(pid=pid)
def test_file_put_oauth2(api, deposit, files, users, write_token_user_1): """PUT a deposit file with oauth2.""" with api.test_request_context(): with api.test_client() as client: old_file_id = files[0].file_id old_filename = files[0].key new_filename = '{0}-new-name'.format(old_filename) # test rename file res = client.put( url_for('invenio_deposit_rest.depid_file', pid_value=deposit['_deposit']['id'], key=old_filename), data=json.dumps({'filename': new_filename}), headers=[ ('Authorization', 'Bearer {0}'.format(write_token_user_1.access_token)) ] ) deposit_id = deposit.id db.session.expunge(deposit.model) deposit = Deposit.get_record(deposit_id) files = list(deposit.files) assert res.status_code == 200 assert new_filename == files[0].key assert old_file_id == files[0].file_id data = json.loads(res.data.decode('utf-8')) obj = files[0] assert data['filename'] == obj.key assert data['checksum'] == obj.file.checksum assert data['id'] == str(obj.file.id)
def test_file_put_oauth2(api, deposit, files, users, write_token_user_1): """PUT a deposit file with oauth2.""" with api.test_request_context(): with api.test_client() as client: old_file_id = files[0].file_id old_filename = files[0].key new_filename = '{0}-new-name'.format(old_filename) # test rename file res = client.put( url_for('invenio_deposit_rest.depid_file', pid_value=deposit['_deposit']['id'], key=old_filename), data=json.dumps({'filename': new_filename}), headers=[ ('Authorization', 'Bearer {0}'.format(write_token_user_1.access_token)) ] ) deposit_id = deposit.id db.session.expunge(deposit.model) deposit = Deposit.get_record(deposit_id) files = list(deposit.files) assert res.status_code == 200 assert new_filename == files[0].key assert old_file_id == files[0].file_id data = json.loads(res.data.decode('utf-8')) obj = files[0] assert data['filename'] == obj.key assert data['checksum'] == obj.file.checksum assert data['id'] == str(obj.file.id)
def test_files_put_oauth2(app, db, deposit, files, users, write_token_user_1): """Test put deposito files with oauth2.""" with app.test_request_context(): with app.test_client() as client: # fixture content = b'### Testing textfile 2 ###' stream = BytesIO(content) key = 'world.txt' deposit.files[key] = stream deposit.commit() db.session.commit() deposit_id = deposit.id db.session.expunge(deposit.model) deposit = Deposit.get_record(deposit_id) key0 = files[0].key files = list(deposit.files) assert files[0]['key'] == str(key0) assert files[1]['key'] == str(key) # order files res = client.put( url_for('invenio_deposit_rest.dep_files', pid_value=deposit['_deposit']['id']), data=json.dumps([ {'id': key}, {'id': key0} ]), headers=[ ('Authorization', 'Bearer {0}'.format(write_token_user_1.access_token)) ] ) assert res.status_code == 200 data = json.loads(res.data.decode('utf-8')) assert data[0]['filename'] == str(key) assert data[1]['filename'] == str(key0)
def test_file_put(api, deposit, files, users): """PUT a deposit file.""" with api.test_request_context(): with api.test_client() as client: old_file_id = files[0].file_id old_filename = files[0].key new_filename = '{0}-new-name'.format(old_filename) # test rename file (without login) res = client.put(url_for('invenio_deposit_rest.depid_file', pid_value=deposit['_deposit']['id'], key=old_filename), data=json.dumps({'filename': new_filename})) assert res.status_code == 401 # login res = client.post(url_for_security('login'), data=dict(email=users[0]['email'], password="******")) # test rename file res = client.put(url_for('invenio_deposit_rest.depid_file', pid_value=deposit['_deposit']['id'], key=old_filename), data=json.dumps({'filename': new_filename})) deposit_id = deposit.id db.session.expunge(deposit.model) deposit = Deposit.get_record(deposit_id) files = list(deposit.files) assert res.status_code == 200 assert new_filename == files[0].key assert old_file_id == files[0].file_id data = json.loads(res.data.decode('utf-8')) obj = files[0] assert data['filename'] == obj.key assert data['checksum'] == obj.file.checksum assert data['id'] == str(obj.file.id)
def test_file_delete(api, deposit, files, users): """Test delete file.""" with api.test_request_context(): # the user is the owner with api.test_client() as client: deposit_id = deposit.id res = client.delete(url_for( 'invenio_deposit_rest.depid_file', pid_value=deposit['_deposit']['id'], key=files[0].key )) assert res.status_code == 401 db.session.expunge(deposit.model) deposit = Deposit.get_record(deposit_id) assert files[0].key in deposit.files assert deposit.files[files[0].key] is not None # login res = client.post(url_for_security('login'), data=dict( email=users[0]['email'], password="******" )) # delete resource res = client.delete(url_for( 'invenio_deposit_rest.depid_file', pid_value=deposit['_deposit']['id'], key=files[0].key )) assert res.status_code == 204 assert res.data == b'' db.session.expunge(deposit.model) deposit = Deposit.get_record(deposit_id) assert files[0].key not in deposit.files # the user is NOT the owner with api.test_client() as client: # login res = client.post(url_for_security('login'), data=dict( email=users[1]['email'], password="******" )) # delete resource res = client.delete(url_for( 'invenio_deposit_rest.depid_file', pid_value=deposit['_deposit']['id'], key=files[0].key )) assert res.status_code == 403
def test_file_delete(api, deposit, files, users): """Test delete file.""" with api.test_request_context(): # the user is the owner with api.test_client() as client: deposit_id = deposit.id res = client.delete(url_for( 'invenio_deposit_rest.depid_file', pid_value=deposit['_deposit']['id'], key=files[0].key )) assert res.status_code == 401 db.session.expunge(deposit.model) deposit = Deposit.get_record(deposit_id) assert files[0].key in deposit.files assert deposit.files[files[0].key] is not None # login res = client.post(url_for_security('login'), data=dict( email=users[0]['email'], password="******" )) # delete resource res = client.delete(url_for( 'invenio_deposit_rest.depid_file', pid_value=deposit['_deposit']['id'], key=files[0].key )) assert res.status_code == 204 assert res.data == b'' db.session.expunge(deposit.model) deposit = Deposit.get_record(deposit_id) assert files[0].key not in deposit.files # the user is NOT the owner with api.test_client() as client: # login res = client.post(url_for_security('login'), data=dict( email=users[1]['email'], password="******" )) # delete resource res = client.delete(url_for( 'invenio_deposit_rest.depid_file', pid_value=deposit['_deposit']['id'], key=files[0].key )) assert res.status_code == 403
def test_file_delete_oauth2(api, deposit, files, users, write_token_user_1): """Test delete file with oauth2.""" with api.test_request_context(): with api.test_client() as client: deposit_id = deposit.id # delete resource res = client.delete(url_for('invenio_deposit_rest.depid_file', pid_value=deposit['_deposit']['id'], key=files[0].key), headers=[('Authorization', 'Bearer {0}'.format( write_token_user_1.access_token))]) assert res.status_code == 204 db.session.expunge(deposit.model) deposit = Deposit.get_record(deposit_id) assert files[0].key not in deposit.files
def test_files_put_oauth2(api, deposit, files, users, write_token_user_1): """Test put deposit files with oauth2.""" with api.test_request_context(): with api.test_client() as client: # fixture content = b'### Testing textfile 2 ###' stream = BytesIO(content) key = 'world.txt' deposit.files[key] = stream deposit.commit() db.session.commit() assert deposit['_files'][0]['key'] == files[0].key assert deposit['_files'][1]['key'] == key assert len(deposit.files) == 2 assert len(deposit['_files']) == 2 deposit_id = deposit.id file_ids = [f.file_id for f in deposit.files] # order files res = client.put( url_for('invenio_deposit_rest.depid_files', pid_value=deposit['_deposit']['id']), data=json.dumps([ {'id': str(file_ids[1])}, {'id': str(file_ids[0])} ]), headers=[ ('Authorization', 'Bearer {0}'.format(write_token_user_1.access_token)) ] ) assert res.status_code == 200 data = json.loads(res.data.decode('utf-8')) db.session.expunge(deposit.model) deposit = Deposit.get_record(deposit_id) assert deposit['_files'][0]['key'] == data[0]['filename'] assert deposit['_files'][1]['key'] == data[1]['filename'] assert data[0]['id'] == str(file_ids[1]) assert data[1]['id'] == str(file_ids[0]) assert len(deposit.files) == 2 assert len(deposit['_files']) == 2 assert len(data) == 2
def test_file_delete_oauth2(api, deposit, files, users, write_token_user_1): """Test delete file with oauth2.""" with api.test_request_context(): with api.test_client() as client: deposit_id = deposit.id # delete resource res = client.delete( url_for( 'invenio_deposit_rest.depid_file', pid_value=deposit['_deposit']['id'], key=files[0].key ), headers=[ ('Authorization', 'Bearer {0}'.format(write_token_user_1.access_token)) ] ) assert res.status_code == 204 db.session.expunge(deposit.model) deposit = Deposit.get_record(deposit_id) assert files[0].key not in deposit.files
def test_file_put(api, deposit, files, users): """PUT a deposit file.""" with api.test_request_context(): with api.test_client() as client: old_file_id = files[0].file_id old_filename = files[0].key new_filename = '{0}-new-name'.format(old_filename) # test rename file (without login) res = client.put( url_for('invenio_deposit_rest.depid_file', pid_value=deposit['_deposit']['id'], key=old_filename), data=json.dumps({'filename': new_filename})) assert res.status_code == 401 # login res = client.post(url_for_security('login'), data=dict( email=users[0]['email'], password="******" )) # test rename file res = client.put( url_for('invenio_deposit_rest.depid_file', pid_value=deposit['_deposit']['id'], key=old_filename), data=json.dumps({'filename': new_filename})) deposit_id = deposit.id db.session.expunge(deposit.model) deposit = Deposit.get_record(deposit_id) files = list(deposit.files) assert res.status_code == 200 assert new_filename == files[0].key assert old_file_id == files[0].file_id data = json.loads(res.data.decode('utf-8')) obj = files[0] assert data['filename'] == obj.key assert data['checksum'] == obj.file.checksum assert data['id'] == str(obj.file.id)
def test_files_put(api, deposit, files, users): """Test put deposit files.""" with api.test_request_context(): # the user is the owner with api.test_client() as client: # fixture content = b'### Testing textfile 2 ###' stream = BytesIO(content) key = 'world.txt' deposit.files[key] = stream deposit.commit() db.session.commit() deposit_id = deposit.id file_ids = [f.file_id for f in deposit.files] assert deposit['_files'][0]['key'] == files[0].key assert deposit['_files'][1]['key'] == key assert len(deposit.files) == 2 assert len(deposit['_files']) == 2 # add new file (without login) res = client.put( url_for('invenio_deposit_rest.depid_files', pid_value=deposit['_deposit']['id']), data=json.dumps([ {'id': str(file_ids[1])}, {'id': str(file_ids[0])} ]) ) assert res.status_code == 401 # login res = client.post(url_for_security('login'), data=dict( email=users[0]['email'], password="******" )) # order files res = client.put( url_for('invenio_deposit_rest.depid_files', pid_value=deposit['_deposit']['id']), data=json.dumps([ {'id': str(file_ids[1])}, {'id': str(file_ids[0])} ]) ) data = json.loads(res.data.decode('utf-8')) db.session.expunge(deposit.model) deposit = Deposit.get_record(deposit_id) assert deposit['_files'][0]['key'] == data[0]['filename'] assert deposit['_files'][1]['key'] == data[1]['filename'] assert data[0]['id'] == str(file_ids[1]) assert data[1]['id'] == str(file_ids[0]) assert len(deposit.files) == 2 assert len(deposit['_files']) == 2 assert len(data) == 2 # the user is NOT the owner with api.test_client() as client: # login res = client.post(url_for_security('login'), data=dict( email=users[1]['email'], password="******" )) db.session.expunge(deposit.model) deposit = Deposit.get_record(deposit_id) order = [f.key for f in deposit.files] # test files post res = client.put( url_for('invenio_deposit_rest.depid_files', pid_value=deposit['_deposit']['id']), data=json.dumps([ {'id': str(file_ids[1])}, {'id': str(file_ids[0])} ]) ) assert res.status_code == 403 db.session.expunge(deposit.model) deposit = Deposit.get_record(deposit_id) assert deposit['_files'][0]['key'] == order[0] assert deposit['_files'][1]['key'] == order[1]
def test_files_post(api, deposit, users): """Post a deposit file.""" real_filename = 'real_test.json' content = b'### Testing textfile ###' digest = 'md5:{0}'.format(hashlib.md5(content).hexdigest()) filename = 'test.json' with api.test_request_context(): # the user is the owner with api.test_client() as client: # test post without login file_to_upload = (BytesIO(content), filename) res = client.post( url_for('invenio_deposit_rest.depid_files', pid_value=deposit['_deposit']['id']), data={'file': file_to_upload, 'name': real_filename}, content_type='multipart/form-data' ) assert res.status_code == 401 # login res = client.post(url_for_security('login'), data=dict( email=users[0]['email'], password="******" )) # test empty post res = client.post( url_for('invenio_deposit_rest.depid_files', pid_value=deposit['_deposit']['id']), data={'name': real_filename}, content_type='multipart/form-data' ) assert res.status_code == 400 # test post file_to_upload = (BytesIO(content), filename) res = client.post( url_for('invenio_deposit_rest.depid_files', pid_value=deposit['_deposit']['id']), data={'file': file_to_upload, 'name': real_filename}, content_type='multipart/form-data' ) deposit_id = deposit.id db.session.expunge(deposit.model) deposit = Deposit.get_record(deposit_id) files = list(deposit.files) assert res.status_code == 201 assert real_filename == files[0].key assert digest == files[0].file.checksum data = json.loads(res.data.decode('utf-8')) obj = files[0] assert data['filename'] == obj.key assert data['checksum'] == obj.file.checksum assert data['id'] == str(obj.file.id) # the user is NOT the owner with api.test_client() as client: # login res = client.post(url_for_security('login'), data=dict( email=users[1]['email'], password="******" )) # test post file_to_upload = (BytesIO(content), filename) res = client.post( url_for('invenio_deposit_rest.depid_files', pid_value=deposit['_deposit']['id']), data={'file': file_to_upload, 'name': real_filename}, content_type='multipart/form-data' ) assert res.status_code == 403
def test_files_put(api, deposit, files, users): """Test put deposit files.""" with api.test_request_context(): # the user is the owner with api.test_client() as client: # fixture content = b'### Testing textfile 2 ###' stream = BytesIO(content) key = 'world.txt' deposit.files[key] = stream deposit.commit() db.session.commit() deposit_id = deposit.id file_ids = [f.file_id for f in deposit.files] assert deposit['_files'][0]['key'] == files[0].key assert deposit['_files'][1]['key'] == key assert len(deposit.files) == 2 assert len(deposit['_files']) == 2 # add new file (without login) res = client.put( url_for('invenio_deposit_rest.depid_files', pid_value=deposit['_deposit']['id']), data=json.dumps([ {'id': str(file_ids[1])}, {'id': str(file_ids[0])} ]) ) assert res.status_code == 401 # login res = client.post(url_for_security('login'), data=dict( email=users[0]['email'], password="******" )) # order files res = client.put( url_for('invenio_deposit_rest.depid_files', pid_value=deposit['_deposit']['id']), data=json.dumps([ {'id': str(file_ids[1])}, {'id': str(file_ids[0])} ]) ) data = json.loads(res.data.decode('utf-8')) db.session.expunge(deposit.model) deposit = Deposit.get_record(deposit_id) assert deposit['_files'][0]['key'] == data[0]['filename'] assert deposit['_files'][1]['key'] == data[1]['filename'] assert data[0]['id'] == str(file_ids[1]) assert data[1]['id'] == str(file_ids[0]) assert len(deposit.files) == 2 assert len(deposit['_files']) == 2 assert len(data) == 2 # the user is NOT the owner with api.test_client() as client: # login res = client.post(url_for_security('login'), data=dict( email=users[1]['email'], password="******" )) db.session.expunge(deposit.model) deposit = Deposit.get_record(deposit_id) order = [f.key for f in deposit.files] # test files post res = client.put( url_for('invenio_deposit_rest.depid_files', pid_value=deposit['_deposit']['id']), data=json.dumps([ {'id': str(file_ids[1])}, {'id': str(file_ids[0])} ]) ) assert res.status_code == 403 db.session.expunge(deposit.model) deposit = Deposit.get_record(deposit_id) assert deposit['_files'][0]['key'] == order[0] assert deposit['_files'][1]['key'] == order[1]
def test_files_post(api, deposit, users): """Post a deposit file.""" real_filename = 'real_test.json' content = b'### Testing textfile ###' digest = 'md5:{0}'.format(hashlib.md5(content).hexdigest()) filename = 'test.json' with api.test_request_context(): # the user is the owner with api.test_client() as client: # test post without login file_to_upload = (BytesIO(content), filename) res = client.post( url_for('invenio_deposit_rest.depid_files', pid_value=deposit['_deposit']['id']), data={'file': file_to_upload, 'name': real_filename}, content_type='multipart/form-data' ) assert res.status_code == 401 # login res = client.post(url_for_security('login'), data=dict( email=users[0]['email'], password="******" )) # test empty post res = client.post( url_for('invenio_deposit_rest.depid_files', pid_value=deposit['_deposit']['id']), data={'name': real_filename}, content_type='multipart/form-data' ) assert res.status_code == 400 # test post file_to_upload = (BytesIO(content), filename) res = client.post( url_for('invenio_deposit_rest.depid_files', pid_value=deposit['_deposit']['id']), data={'file': file_to_upload, 'name': real_filename}, content_type='multipart/form-data' ) deposit_id = deposit.id db.session.expunge(deposit.model) deposit = Deposit.get_record(deposit_id) files = list(deposit.files) assert res.status_code == 201 assert real_filename == files[0].key assert digest == files[0].file.checksum data = json.loads(res.data.decode('utf-8')) obj = files[0] assert data['filename'] == obj.key assert data['checksum'] == obj.file.checksum assert data['id'] == str(obj.file.id) # the user is NOT the owner with api.test_client() as client: # login res = client.post(url_for_security('login'), data=dict( email=users[1]['email'], password="******" )) # test post file_to_upload = (BytesIO(content), filename) res = client.post( url_for('invenio_deposit_rest.depid_files', pid_value=deposit['_deposit']['id']), data={'file': file_to_upload, 'name': real_filename}, content_type='multipart/form-data' ) assert res.status_code == 403
def test_files_put(app, db, deposit, files, users): """Test put deposit files.""" with app.test_request_context(): # the user is the owner with app.test_client() as client: # fixture content = b'### Testing textfile 2 ###' stream = BytesIO(content) key = 'world.txt' deposit.files[key] = stream deposit.commit() db.session.commit() deposit_id = deposit.id db.session.expunge(deposit.model) deposit = Deposit.get_record(deposit_id) key0 = files[0].key files = list(deposit.files) assert files[0]['key'] == str(key0) assert files[1]['key'] == str(key) # add new file (without login) res = client.put( url_for('invenio_deposit_rest.dep_files', pid_value=deposit['_deposit']['id']), data=json.dumps([ {'id': key}, {'id': key0} ]) ) assert res.status_code == 401 # login res = client.post(url_for_security('login'), data=dict( email=users[0].email, password="******" )) # order files res = client.put( url_for('invenio_deposit_rest.dep_files', pid_value=deposit['_deposit']['id']), data=json.dumps([ {'id': key}, {'id': key0} ]) ) db.session.expunge(deposit.model) deposit = Deposit.get_record(deposit_id) files = list(deposit.files) assert len(deposit.files) == 2 assert files[0]['key'] == str(key) assert files[1]['key'] == str(key0) data = json.loads(res.data.decode('utf-8')) assert data[0]['filename'] == str(key) assert data[1]['filename'] == str(key0) # the user is NOT the owner with app.test_client() as client: # login res = client.post(url_for_security('login'), data=dict( email=users[1].email, password="******" )) # test files post res = client.put( url_for('invenio_deposit_rest.dep_files', pid_value=deposit['_deposit']['id']), data=json.dumps([ {'id': key}, {'id': key0} ]) ) assert res.status_code == 403