def setup_api_test_data(db): """ Set up data for API v2.0 tests. """ print("Setting up data for API v2.0 tests on %s" % db.engine) from flexmeasures.data.models.user import User, Role from flexmeasures.data.models.assets import Asset user_datastore = SQLAlchemySessionUserDatastore(db.session, User, Role) test_supplier = user_datastore.find_user(email="*****@*****.**") battery = Asset.query.filter(Asset.name == "Test battery").one_or_none() battery.owner = test_supplier test_prosumer = user_datastore.find_user(email="*****@*****.**") admin_role = user_datastore.create_role(name="admin", description="God powers") user_datastore.add_role_to_user(test_prosumer, admin_role) # an inactive user user_datastore.create_user( username="******", email="*****@*****.**", password=hash_password("testtest"), active=False, )
def find_user_by_email(user_email: str, keep_in_session: bool = True) -> User: user_datastore = SQLAlchemySessionUserDatastore(db.session, User, Role) user = user_datastore.find_user(email=user_email) if not keep_in_session: # we might need this object persistent across requests db.session.expunge(user) return user
def add_battery_assets(db: SQLAlchemy, setup_roles_users, setup_markets): """Add two battery assets, set their capacity values and their initial SOC.""" db.session.add( AssetType( name="battery", is_consumer=True, is_producer=True, can_curtail=True, can_shift=True, daily_seasonality=True, weekly_seasonality=True, yearly_seasonality=True, ) ) from flexmeasures.data.models.user import User, Role user_datastore = SQLAlchemySessionUserDatastore(db.session, User, Role) test_prosumer = user_datastore.find_user(email="*****@*****.**") epex_da = Market.query.filter(Market.name == "epex_da").one_or_none() battery = Asset( name="Test battery", asset_type_name="battery", event_resolution=timedelta(minutes=15), capacity_in_mw=2, max_soc_in_mwh=5, min_soc_in_mwh=0, soc_in_mwh=2.5, soc_datetime=as_server_time(datetime(2015, 1, 1)), soc_udi_event_id=203, latitude=10, longitude=100, market_id=epex_da.id, unit="MW", ) battery.owner = test_prosumer db.session.add(battery) battery = Asset( name="Test battery with no known prices", asset_type_name="battery", event_resolution=timedelta(minutes=15), capacity_in_mw=2, max_soc_in_mwh=5, min_soc_in_mwh=0, soc_in_mwh=2.5, soc_datetime=as_server_time(datetime(2040, 1, 1)), soc_udi_event_id=203, latitude=10, longitude=100, market_id=epex_da.id, unit="MW", ) battery.owner = test_prosumer db.session.add(battery)
def test_analytics_responds(db, client, as_prosumer): analytics = client.get(url_for("flexmeasures_ui.analytics_view"), follow_redirects=True) assert analytics.status_code == 200 assert b"Client analytics" in analytics.data from flexmeasures.data.models.user import User, Role user_datastore = SQLAlchemySessionUserDatastore(db.session, User, Role) test_prosumer = user_datastore.find_user(email="*****@*****.**") assert str.encode(f"for {test_prosumer.username}") in analytics.data
def setup_api_test_data(db): """ Set up data for API v1.2 tests. """ print("Setting up data for API v1.2 tests on %s" % db.engine) from flexmeasures.data.models.user import User, Role from flexmeasures.data.models.assets import Asset user_datastore = SQLAlchemySessionUserDatastore(db.session, User, Role) test_prosumer = user_datastore.find_user(email="*****@*****.**") battery = Asset.query.filter(Asset.name == "Test battery").one_or_none() battery.owner = test_prosumer
def setup_api_test_data(db): """ Set up data for API v1 tests. """ print("Setting up data for API v1 tests on %s" % db.engine) from flexmeasures.data.models.user import User, Role from flexmeasures.data.models.assets import Asset, AssetType, Power from flexmeasures.data.models.data_sources import DataSource user_datastore = SQLAlchemySessionUserDatastore(db.session, User, Role) # Create an anonymous user create_user( username="******", email="*****@*****.**", password=hash_password("testtest"), user_roles=[ "Prosumer", dict(name="anonymous", description="Anonymous test user"), ], ) # Create 1 test asset for the anonymous user test_prosumer = user_datastore.find_user(email="*****@*****.**") test_asset_type = AssetType(name="test-type") db.session.add(test_asset_type) asset_names = ["CS 0"] assets: List[Asset] = [] for asset_name in asset_names: asset = Asset( name=asset_name, asset_type_name="test-type", event_resolution=timedelta(minutes=15), capacity_in_mw=1, latitude=100, longitude=100, unit="MW", ) asset.owner = test_prosumer assets.append(asset) db.session.add(asset) # Create a test user without a USEF role create_user( username="******", email="*****@*****.**", password=hash_password("testtest"), ) # Create 5 test assets for the test_prosumer user test_prosumer = user_datastore.find_user(email="*****@*****.**") asset_names = ["CS 1", "CS 2", "CS 3", "CS 4", "CS 5"] assets: List[Asset] = [] for asset_name in asset_names: asset = Asset( name=asset_name, asset_type_name="test-type", event_resolution=timedelta(minutes=15), capacity_in_mw=1, latitude=100, longitude=100, unit="MW", ) asset.owner = test_prosumer if asset_name == "CS 4": asset.event_resolution = timedelta(hours=1) assets.append(asset) db.session.add(asset) # Add power forecasts to one of the assets, for two sources cs_5 = Asset.query.filter(Asset.name == "CS 5").one_or_none() test_supplier = user_datastore.find_user(email="*****@*****.**") prosumer_data_source = DataSource.query.filter( DataSource.user == test_prosumer).one_or_none() supplier_data_source = DataSource.query.filter( DataSource.user == test_supplier).one_or_none() meter_data = [] for i in range(6): p_1 = Power( datetime=isodate.parse_datetime("2015-01-01T00:00:00Z") + timedelta(minutes=15 * i), horizon=timedelta(0), value=(100.0 + i) * -1, asset_id=cs_5.id, data_source_id=prosumer_data_source.id, ) p_2 = Power( datetime=isodate.parse_datetime("2015-01-01T00:00:00Z") + timedelta(minutes=15 * i), horizon=timedelta(hours=0), value=(1000.0 - 10 * i) * -1, asset_id=cs_5.id, data_source_id=supplier_data_source.id, ) meter_data.append(p_1) meter_data.append(p_2) db.session.bulk_save_objects(meter_data) print("Done setting up data for API v1 tests")
def add_charging_station_assets(db: SQLAlchemy, setup_roles_users, setup_markets): """Add uni- and bi-directional charging station assets, set their capacity value and their initial SOC.""" db.session.add( AssetType( name="one-way_evse", is_consumer=True, is_producer=False, can_curtail=True, can_shift=True, daily_seasonality=True, weekly_seasonality=True, yearly_seasonality=True, ) ) db.session.add( AssetType( name="two-way_evse", is_consumer=True, is_producer=True, can_curtail=True, can_shift=True, daily_seasonality=True, weekly_seasonality=True, yearly_seasonality=True, ) ) from flexmeasures.data.models.user import User, Role user_datastore = SQLAlchemySessionUserDatastore(db.session, User, Role) test_prosumer = user_datastore.find_user(email="*****@*****.**") epex_da = Market.query.filter(Market.name == "epex_da").one_or_none() charging_station = Asset( name="Test charging station", asset_type_name="one-way_evse", event_resolution=timedelta(minutes=15), capacity_in_mw=2, max_soc_in_mwh=5, min_soc_in_mwh=0, soc_in_mwh=2.5, soc_datetime=as_server_time(datetime(2015, 1, 1)), soc_udi_event_id=203, latitude=10, longitude=100, market_id=epex_da.id, unit="MW", ) charging_station.owner = test_prosumer db.session.add(charging_station) bidirectional_charging_station = Asset( name="Test charging station (bidirectional)", asset_type_name="two-way_evse", event_resolution=timedelta(minutes=15), capacity_in_mw=2, max_soc_in_mwh=5, min_soc_in_mwh=0, soc_in_mwh=2.5, soc_datetime=as_server_time(datetime(2015, 1, 1)), soc_udi_event_id=203, latitude=10, longitude=100, market_id=epex_da.id, unit="MW", ) bidirectional_charging_station.owner = test_prosumer db.session.add(bidirectional_charging_station)
def setup_api_test_data(db): """ Set up data for API v1.1 tests. """ print("Setting up data for API v1.1 tests on %s" % db.engine) from flexmeasures.data.models.user import User, Role from flexmeasures.data.models.assets import Asset, AssetType from flexmeasures.data.models.weather import WeatherSensor, WeatherSensorType user_datastore = SQLAlchemySessionUserDatastore(db.session, User, Role) # Create a user without proper registration as a data source user = user_datastore.create_user( username="******", email="*****@*****.**", password=hash_password("testtest"), ) role = user_datastore.find_role("Prosumer") user_datastore.add_role_to_user(user, role) # Create a test user without a USEF role create_user( username="******", email="*****@*****.**", password=hash_password("testtest"), ) # Create 3 test assets for the test_prosumer user test_prosumer = user_datastore.find_user(email="*****@*****.**") test_asset_type = AssetType(name="test-type") db.session.add(test_asset_type) asset_names = ["CS 1", "CS 2", "CS 3"] assets: List[Asset] = [] for asset_name in asset_names: asset = Asset( name=asset_name, asset_type_name="test-type", event_resolution=timedelta(minutes=15), capacity_in_mw=1, latitude=100, longitude=100, unit="MW", ) asset.owner = test_prosumer assets.append(asset) db.session.add(asset) # Add power forecasts to the assets cs_1 = Asset.query.filter(Asset.name == "CS 1").one_or_none() cs_2 = Asset.query.filter(Asset.name == "CS 2").one_or_none() cs_3 = Asset.query.filter(Asset.name == "CS 3").one_or_none() data_source = DataSource.query.filter( DataSource.user == test_prosumer).one_or_none() power_forecasts = [] for i in range(6): p_1 = Power( datetime=isodate.parse_datetime("2015-01-01T00:00:00Z") + timedelta(minutes=15 * i), horizon=timedelta(hours=6), value=(300 + i) * -1, asset_id=cs_1.id, data_source_id=data_source.id, ) p_2 = Power( datetime=isodate.parse_datetime("2015-01-01T00:00:00Z") + timedelta(minutes=15 * i), horizon=timedelta(hours=6), value=(300 - i) * -1, asset_id=cs_2.id, data_source_id=data_source.id, ) p_3 = Power( datetime=isodate.parse_datetime("2015-01-01T00:00:00Z") + timedelta(minutes=15 * i), horizon=timedelta(hours=6), value=(0 + i) * -1, asset_id=cs_3.id, data_source_id=data_source.id, ) power_forecasts.append(p_1) power_forecasts.append(p_2) power_forecasts.append(p_3) db.session.bulk_save_objects(power_forecasts) # Create 2 weather sensors test_sensor_type = WeatherSensorType(name="wind_speed") db.session.add(test_sensor_type) sensor = WeatherSensor( name="wind_speed_sensor", weather_sensor_type_name="wind_speed", event_resolution=timedelta(minutes=5), latitude=33.4843866, longitude=126, unit="m/s", ) db.session.add(sensor) test_sensor_type = WeatherSensorType(name="temperature") db.session.add(test_sensor_type) sensor = WeatherSensor( name="temperature_sensor", weather_sensor_type_name="temperature", event_resolution=timedelta(minutes=5), latitude=33.4843866, longitude=126, unit="°C", ) db.session.add(sensor) print("Done setting up data for API v1.1 tests")