def app(base_app): """Flask application fixture.""" base_app._internal_jsonschemas = InvenioJSONSchemas(base_app) InvenioREST(base_app) InvenioRecordsREST(base_app) InvenioRecords(base_app) InvenioPIDStore(base_app) base_app.url_map.converters['pid'] = PIDConverter base_app.register_blueprint(create_blueprint_from_app(base_app)) app_loaded.send(None, app=base_app) with base_app.app_context(): yield base_app
def base_app(base_app): """Flask base application fixture.""" base_app.url_map.converters['pid'] = PIDConverter InvenioDB(base_app) InvenioRecords(base_app) InvenioRecordsREST(base_app) InvenioPIDStore(base_app) InvenioIndexer(base_app) InvenioPIDStore(base_app) InvenioSearch(base_app) InvenioCirculation(base_app) InvenioJSONSchemas(base_app) base_app.register_blueprint(create_blueprint_from_app(base_app)) yield base_app
def app(base_app): """Flask application fixture.""" base_app._internal_jsonschemas = InvenioJSONSchemas(base_app) Records(base_app) InvenioREST(base_app) InvenioRecordsREST(base_app) InvenioRecords(base_app) InvenioPIDStore(base_app) base_app.url_map.converters['pid'] = PIDConverter base_app.register_blueprint(create_blueprint_from_app(base_app)) principal = Principal(base_app) login_manager = LoginManager() login_manager.init_app(base_app) login_manager.login_view = 'login' @login_manager.user_loader def basic_user_loader(user_id): user_obj = User.query.get(int(user_id)) return user_obj @base_app.route('/test/login/<int:id>', methods=['GET', 'POST']) def test_login(id): print("test: logging user with id", id) response = make_response() user = User.query.get(id) login_user(user) set_identity(user) return response app_loaded.send(None, app=base_app) with base_app.app_context(): yield base_app
RECORDS_REST_DEFAULT_READ_PERMISSION_FACTORY=None, SQLALCHEMY_TRACK_MODIFICATIONS=True, SQLALCHEMY_DATABASE_URI=os.getenv("SQLALCHEMY_DATABASE_URI", "sqlite:///app.db"), ) app.config["RECORDS_REST_ENDPOINTS"] = CIRCULATION_REST_ENDPOINTS app.url_map.converters["pid"] = PIDConverter InvenioDB(app) InvenioRecords(app) InvenioREST(app) InvenioRecordsREST(app) InvenioPIDStore(app) InvenioSearch(app) InvenioJSONSchemas(app) InvenioCirculation(app) app.register_blueprint(create_blueprint_from_app(app)) app.register_blueprint(create_loan_actions_blueprint(app)) app.register_blueprint(create_loan_for_item_blueprint(app)) app.register_blueprint(create_loan_replace_item_blueprint(app)) @app.cli.group() def fixtures(): """Command for working with test data.""" @fixtures.command() def loans(): """Load test data fixture.""" record_uuid = uuid.uuid4() new_loan = {}
def app(): instance_path = tempfile.mkdtemp() app = Flask('testapp', instance_path=instance_path) app.config.update( JSONSCHEMAS_HOST="nusl.cz", SQLALCHEMY_TRACK_MODIFICATIONS=True, SERVER_NAME='127.0.0.1:5000', INVENIO_INSTANCE_PATH=instance_path, DEBUG=True, # in tests, api is not on /api but directly in the root PIDSTORE_RECID_FIELD='pid', FLASK_TAXONOMIES_URL_PREFIX='/2.0/taxonomies/', # RECORDS_REST_ENDPOINTS=RECORDS_REST_ENDPOINTS, CELERY_BROKER_URL='amqp://*****:*****@localhost:5672//', CELERY_TASK_ALWAYS_EAGER=True, CELERY_RESULT_BACKEND='cache', CELERY_CACHE_BACKEND='memory', CELERY_TASK_EAGER_PROPAGATES=True, SUPPORTED_LANGUAGES=["cs", "en"], OAREPO_COMMUNITIES_ENDPOINTS=[], ELASTICSEARCH_DEFAULT_LANGUAGE_TEMPLATE={ "type": "text", "fields": { "keywords": { "type": "keyword" } } }) app.secret_key = 'changeme' print(os.environ.get("INVENIO_INSTANCE_PATH")) InvenioDB(app) OarepoTaxonomies(app) OARepoReferences(app) InvenioAccounts(app) InvenioAccess(app) Principal(app) InvenioJSONSchemas(app) InvenioSearch(app) InvenioIndexer(app) OARepoMappingIncludesExt(app) InvenioRecords(app) InvenioRecordsREST(app) InvenioCelery(app) NRNresults(app) InvenioPIDStore(app) OARepoValidate(app) OARepoCommunities(app) # Invenio Records Draft initialization RecordsDraft(app) app.url_map.converters['pid'] = PIDConverter app.url_map.converters['commpid'] = CommunityPIDConverter # Celery print(app.config["CELERY_BROKER_URL"]) login_manager = LoginManager() login_manager.init_app(app) login_manager.login_view = 'login' @login_manager.user_loader def basic_user_loader(user_id): user_obj = User.query.get(int(user_id)) return user_obj app.register_blueprint(create_blueprint_from_app(app)) @app.route('/test/login/<int:id>', methods=['GET', 'POST']) def test_login(id): print("test: logging user with id", id) response = make_response() user = User.query.get(id) login_user(user) set_identity(user) return response # app.extensions['invenio-search'].mappings["test"] = mapping # app.extensions["invenio-jsonschemas"].schemas["test"] = schema app_loaded.send(app, app=app) with app.app_context(): # app.register_blueprint(taxonomies_blueprint) print(app.url_map) yield app shutil.rmtree(instance_path)
'filters': { 'typefilter': terms_filter('type'), } } } app.url_map.converters['pid'] = PIDConverter FlaskCeleryExt(app) InvenioDB(app) InvenioREST(app) InvenioPIDStore(app) InvenioRecords(app) search = InvenioSearch(app) search.register_mappings('testrecords', 'data') InvenioIndexer(app) InvenioRecordsREST(app) app.register_blueprint(create_blueprint_from_app(app)) # A few documents which will be added in order to make search interesting record_examples = [{ 'title': 'Awesome meeting report', 'description': 'Notes of the last meeting.', 'participants': 42, 'type': 'report', }, { 'title': 'Furniture order', 'description': 'Tables for the meeting room.', 'type': 'order', }] record_examples += [{ 'title': 'LHC experiment {}'.format(idx), 'description': 'Data from experiment {}.'.format(idx),
def app(request, search_class): """Flask application fixture. Note that RECORDS_REST_ENDPOINTS is used during application creation to create blueprints on the fly, hence once you have this fixture in a test, it's too late to customize the configuration variable. You can however customize it using parameterized tests: .. code-block:: python @pytest.mark.parametrize('app', [dict( endpoint=dict( search_class='conftest:TestSearch', ) def test_mytest(app, db, es): # ... This will parameterize the default 'recid' endpoint in RECORDS_REST_ENDPOINTS. Alternatively: .. code-block:: python @pytest.mark.parametrize('app', [dict( records_rest_endpoints=dict( recid=dict( search_class='conftest:TestSearch', ) ) def test_mytest(app, db, es): # ... This will fully parameterize RECORDS_REST_ENDPOINTS. """ instance_path = tempfile.mkdtemp() app = Flask('testapp', instance_path=instance_path) app.config.update( ACCOUNTS_JWT_ENABLE=False, INDEXER_DEFAULT_DOC_TYPE='testrecord', INDEXER_DEFAULT_INDEX=search_class.Meta.index, RECORDS_REST_ENDPOINTS=copy.deepcopy(config.RECORDS_REST_ENDPOINTS), RECORDS_REST_DEFAULT_CREATE_PERMISSION_FACTORY=None, RECORDS_REST_DEFAULT_DELETE_PERMISSION_FACTORY=None, RECORDS_REST_DEFAULT_READ_PERMISSION_FACTORY=None, RECORDS_REST_DEFAULT_UPDATE_PERMISSION_FACTORY=None, RECORDS_REST_DEFAULT_RESULTS_SIZE=10, RECORDS_REST_DEFAULT_SEARCH_INDEX=search_class.Meta.index, RECORDS_REST_FACETS={ search_class.Meta.index: { 'aggs': { 'stars': { 'terms': { 'field': 'stars' } } }, 'post_filters': { 'stars': terms_filter('stars'), } } }, RECORDS_REST_SORT_OPTIONS={ search_class.Meta.index: dict(year=dict(fields=['year'], )) }, SERVER_NAME='localhost:5000', SQLALCHEMY_DATABASE_URI=os.environ.get('SQLALCHEMY_DATABASE_URI', 'sqlite:///test.db'), SQLALCHEMY_TRACK_MODIFICATIONS=True, TESTING=True, ) app.config['RECORDS_REST_ENDPOINTS']['recid']['search_class'] = \ search_class # Parameterize application. if hasattr(request, 'param'): if 'endpoint' in request.param: app.config['RECORDS_REST_ENDPOINTS']['recid'].update( request.param['endpoint']) if 'records_rest_endpoints' in request.param: original_endpoint = app.config['RECORDS_REST_ENDPOINTS']['recid'] del app.config['RECORDS_REST_ENDPOINTS']['recid'] for new_endpoint_prefix, new_endpoint_value in \ request.param['records_rest_endpoints'].items(): new_endpoint = dict(original_endpoint) new_endpoint.update(new_endpoint_value) app.config['RECORDS_REST_ENDPOINTS'][new_endpoint_prefix] = \ new_endpoint app.url_map.converters['pid'] = PIDConverter InvenioDB(app) InvenioREST(app) InvenioRecords(app) InvenioIndexer(app) InvenioPIDStore(app) search = InvenioSearch(app) search.register_mappings(search_class.Meta.index, 'mock_module.mappings') InvenioRecordsREST(app) app.register_blueprint(create_blueprint_from_app(app)) with app.app_context(): yield app # Teardown instance path. shutil.rmtree(instance_path)
def app(request, search_class): """Flask application fixture. Note that RECORDS_REST_ENDPOINTS is used during application creation to create blueprints on the fly, hence once you have this fixture in a test, it's too late to customize the configuration variable. You can however customize it using parameterized tests: .. code-block:: python @pytest.mark.parametrize('app', [dict( endpoint=dict( search_class='conftest:TestSearch', ) def test_mytest(app, db, es): # ... This will parameterize the default 'recid' endpoint in RECORDS_REST_ENDPOINTS. Alternatively: .. code-block:: python @pytest.mark.parametrize('app', [dict( records_rest_endpoints=dict( recid=dict( search_class='conftest:TestSearch', ) ) def test_mytest(app, db, es): # ... This will fully parameterize RECORDS_REST_ENDPOINTS. """ instance_path = tempfile.mkdtemp() app = Flask('testapp', instance_path=instance_path) from records import config app.config.update( ACCOUNTS_JWT_ENABLE=False, INDEXER_DEFAULT_DOC_TYPE='record-v1.0.0', INDEXER_DEFAULT_INDEX=search_class.Meta.index, RECORDS_REST_ENDPOINTS=copy.deepcopy(config.RECORDS_REST_ENDPOINTS), RECORDS_REST_DEFAULT_CREATE_PERMISSION_FACTORY=None, RECORDS_REST_DEFAULT_DELETE_PERMISSION_FACTORY=None, RECORDS_REST_DEFAULT_READ_PERMISSION_FACTORY=None, RECORDS_REST_DEFAULT_UPDATE_PERMISSION_FACTORY=None, RECORDS_REST_DEFAULT_SEARCH_INDEX=search_class.Meta.index, SERVER_NAME='localhost:5000', CELERY_ALWAYS_EAGER=True, CELERY_RESULT_BACKEND='cache', CELERY_CACHE_BACKEND='memory', CELERY_EAGER_PROPAGATES_EXCEPTIONS=True, SQLALCHEMY_DATABASE_URI=os.environ.get('SQLALCHEMY_DATABASE_URI', 'sqlite:///test.db'), SQLALCHEMY_TRACK_MODIFICATIONS=True, TESTING=True, ) app.config['RECORDS_REST_ENDPOINTS']['recid']['search_class'] = \ search_class app.config['RECORDS_REST_ENDPOINTS']['recid']['create_permission_factory_imp'] = \ user_id_1_perm app.config['RECORDS_REST_ENDPOINTS']['recid']['record_class'] = \ SchemaEnforcingRecord app.secret_key = 'changeme' # Parameterize application. if hasattr(request, 'param'): if 'endpoint' in request.param: app.config['RECORDS_REST_ENDPOINTS']['recid'].update( request.param['endpoint']) if 'records_rest_endpoints' in request.param: original_endpoint = app.config['RECORDS_REST_ENDPOINTS']['recid'] del app.config['RECORDS_REST_ENDPOINTS']['recid'] for new_endpoint_prefix, new_endpoint_value in \ request.param['records_rest_endpoints'].items(): new_endpoint = dict(original_endpoint) new_endpoint.update(new_endpoint_value) app.config['RECORDS_REST_ENDPOINTS'][new_endpoint_prefix] = \ new_endpoint app.url_map.converters['pid'] = PIDConverter InvenioDB(app) InvenioREST(app) InvenioRecords(app) schemas = InvenioJSONSchemas(app) indexer = InvenioIndexer(app) InvenioPIDStore(app) search = InvenioSearch(app) search.register_mappings(search_class.Meta.index, 'records.mappings') schemas._state.register_schemas_dir( os.path.join(os.path.dirname(__file__), 'records', 'jsonschemas')) InvenioRecordsREST(app) InvenioAccess(app) explicit_acls = InvenioExplicitAcls(app) principal = Principal(app) login_manager = LoginManager() login_manager.init_app(app) login_manager.login_view = 'login' @login_manager.user_loader def basic_user_loader(user_id): user_obj = User.query.get(int(user_id)) return user_obj app.register_blueprint(create_blueprint_from_app(app)) @app.route('/test/login/<int:id>', methods=['GET', 'POST']) def test_login(id): print("test: logging user with id", id) response = make_response() user = User.query.get(id) login_user(user) set_identity(user) return response with app.app_context(): yield app # Teardown instance path. shutil.rmtree(instance_path)
def app(request, search_class): """Flask application fixture. Note that RECORDS_REST_ENDPOINTS is used during application creation to create blueprints on the fly, hence once you have this fixture in a test, it's too late to customize the configuration variable. You can however customize it using parameterized tests: .. code-block:: python @pytest.mark.parametrize('app', [dict( endpoint=dict( search_class='conftest:TestSearch', ) def test_mytest(app, db, es): # ... This will parameterize the default 'recid' endpoint in RECORDS_REST_ENDPOINTS. Alternatively: .. code-block:: python @pytest.mark.parametrize('app', [dict( records_rest_endpoints=dict( recid=dict( search_class='conftest:TestSearch', ) ) def test_mytest(app, db, es): # ... This will fully parameterize RECORDS_REST_ENDPOINTS. """ instance_path = tempfile.mkdtemp() app = Flask('testapp', instance_path=instance_path) app.config.update( ACCOUNTS_JWT_ENABLE=False, INDEXER_DEFAULT_DOC_TYPE='testrecord', INDEXER_DEFAULT_INDEX=search_class.Meta.index, RECORDS_REST_ENDPOINTS=copy.deepcopy(config.RECORDS_REST_ENDPOINTS), RECORDS_REST_DEFAULT_CREATE_PERMISSION_FACTORY=None, RECORDS_REST_DEFAULT_DELETE_PERMISSION_FACTORY=None, RECORDS_REST_DEFAULT_READ_PERMISSION_FACTORY=None, RECORDS_REST_DEFAULT_UPDATE_PERMISSION_FACTORY=None, RECORDS_REST_DEFAULT_SEARCH_INDEX=search_class.Meta.index, RECORDS_REST_FACETS={ search_class.Meta.index: { 'aggs': { 'stars': {'terms': {'field': 'stars'}} }, 'post_filters': { 'stars': terms_filter('stars'), } } }, RECORDS_REST_SORT_OPTIONS={ search_class.Meta.index: dict( year=dict( fields=['year'], ) ) }, SERVER_NAME='localhost:5000', SQLALCHEMY_DATABASE_URI=os.environ.get( 'SQLALCHEMY_DATABASE_URI', 'sqlite:///test.db' ), SQLALCHEMY_TRACK_MODIFICATIONS=True, TESTING=True, ) app.config['RECORDS_REST_ENDPOINTS']['recid']['search_class'] = \ search_class # Parameterize application. if hasattr(request, 'param'): if 'endpoint' in request.param: app.config['RECORDS_REST_ENDPOINTS']['recid'].update( request.param['endpoint']) if 'records_rest_endpoints' in request.param: original_endpoint = app.config['RECORDS_REST_ENDPOINTS']['recid'] del app.config['RECORDS_REST_ENDPOINTS']['recid'] for new_endpoint_prefix, new_endpoint_value in \ request.param['records_rest_endpoints'].items(): new_endpoint = dict(original_endpoint) new_endpoint.update(new_endpoint_value) app.config['RECORDS_REST_ENDPOINTS'][new_endpoint_prefix] = \ new_endpoint app.url_map.converters['pid'] = PIDConverter InvenioDB(app) InvenioREST(app) InvenioRecords(app) InvenioIndexer(app) InvenioPIDStore(app) search = InvenioSearch(app) search.register_mappings(search_class.Meta.index, 'mock_module.mappings') InvenioRecordsREST(app) app.register_blueprint(create_blueprint_from_app(app)) with app.app_context(): yield app # Teardown instance path. shutil.rmtree(instance_path)