118 lines
4.0 KiB
Python
118 lines
4.0 KiB
Python
from datetime import datetime
|
|
|
|
import pytest
|
|
from flask import Flask
|
|
|
|
from fittrackee import VERSION
|
|
from fittrackee.application.models import AppConfig
|
|
from fittrackee.users.models import User
|
|
|
|
from ..utils import random_string
|
|
|
|
|
|
class TestConfigModel:
|
|
def test_application_config(
|
|
self, app: Flask, monkeypatch: pytest.MonkeyPatch
|
|
) -> None:
|
|
monkeypatch.setenv('WEATHER_API_PROVIDER', 'darksky')
|
|
app_config = AppConfig.query.first()
|
|
app_config.admin_contact = 'admin@example.com'
|
|
|
|
assert app_config.is_registration_enabled is True
|
|
assert (
|
|
app_config.map_attribution
|
|
== app.config['TILE_SERVER']['ATTRIBUTION']
|
|
)
|
|
|
|
serialized_app_config = app_config.serialize()
|
|
assert (
|
|
serialized_app_config['admin_contact'] == app_config.admin_contact
|
|
)
|
|
assert (
|
|
serialized_app_config['gpx_limit_import']
|
|
== app_config.gpx_limit_import
|
|
)
|
|
assert serialized_app_config['is_email_sending_enabled'] is True
|
|
assert serialized_app_config['is_registration_enabled'] is True
|
|
assert (
|
|
serialized_app_config['max_single_file_size']
|
|
== app_config.max_single_file_size
|
|
)
|
|
assert (
|
|
serialized_app_config['max_zip_file_size']
|
|
== app_config.max_zip_file_size
|
|
)
|
|
assert serialized_app_config['max_users'] == app_config.max_users
|
|
assert (
|
|
serialized_app_config['map_attribution']
|
|
== app_config.map_attribution
|
|
)
|
|
assert serialized_app_config['version'] == VERSION
|
|
assert serialized_app_config['weather_provider'] == 'darksky'
|
|
|
|
def test_it_returns_registration_disabled_when_users_count_exceeds_limit(
|
|
self, app: Flask, user_1: User, user_2: User
|
|
) -> None:
|
|
app_config = AppConfig.query.first()
|
|
app_config.max_users = 2
|
|
serialized_app_config = app_config.serialize()
|
|
|
|
assert app_config.is_registration_enabled is False
|
|
assert serialized_app_config['is_registration_enabled'] is False
|
|
|
|
def test_it_returns_email_sending_disabled_when_no_email_url_provided(
|
|
self, app_wo_email_activation: Flask, user_1: User, user_2: User
|
|
) -> None:
|
|
app_config = AppConfig.query.first()
|
|
serialized_app_config = app_config.serialize()
|
|
|
|
assert serialized_app_config['is_email_sending_enabled'] is False
|
|
|
|
@pytest.mark.parametrize(
|
|
'input_weather_api_provider, expected_weather_provider',
|
|
[
|
|
('darksky', 'darksky'),
|
|
('Visualcrossing', 'visualcrossing'),
|
|
('invalid_provider', None),
|
|
('', None),
|
|
],
|
|
)
|
|
def test_it_returns_weather_provider(
|
|
self,
|
|
app: Flask,
|
|
input_weather_api_provider: str,
|
|
expected_weather_provider: str,
|
|
monkeypatch: pytest.MonkeyPatch,
|
|
) -> None:
|
|
monkeypatch.setenv('WEATHER_API_PROVIDER', input_weather_api_provider)
|
|
app_config = AppConfig.query.first()
|
|
serialized_app_config = app_config.serialize()
|
|
|
|
assert (
|
|
serialized_app_config['weather_provider']
|
|
== expected_weather_provider
|
|
)
|
|
|
|
def test_it_returns_privacy_policy(self, app: Flask) -> None:
|
|
app_config = AppConfig.query.first()
|
|
privacy_policy = random_string()
|
|
privacy_policy_date = datetime.now()
|
|
app_config.privacy_policy = privacy_policy
|
|
app_config.privacy_policy_date = privacy_policy_date
|
|
|
|
serialized_app_config = app_config.serialize()
|
|
|
|
assert serialized_app_config["privacy_policy"] == privacy_policy
|
|
assert (
|
|
serialized_app_config["privacy_policy_date"] == privacy_policy_date
|
|
)
|
|
|
|
def test_it_returns_about(self, app: Flask) -> None:
|
|
app_config = AppConfig.query.first()
|
|
about = random_string()
|
|
app_config.about = about
|
|
|
|
serialized_app_config = app_config.serialize()
|
|
|
|
assert serialized_app_config["about"] == about
|