API - use same tile server as Client to generate staticmap - fix #83

This commit is contained in:
Sam 2021-07-14 20:20:48 +02:00
parent bd7783ca96
commit 3ead237e5c
4 changed files with 53 additions and 14 deletions

View File

@ -1,5 +1,5 @@
import json import json
from typing import Tuple from typing import Any, Tuple
from flask import Flask from flask import Flask
from flask.testing import FlaskClient from flask.testing import FlaskClient
@ -23,3 +23,13 @@ class ApiTestCaseMixin:
) )
auth_token = json.loads(resp_login.data.decode())['auth_token'] auth_token = json.loads(resp_login.data.decode())['auth_token']
return client, auth_token return client, auth_token
class CallArgsMixin:
@staticmethod
def get_args(call_args: Any) -> Any:
if len(call_args) == 2:
args, _ = call_args
else:
_, args, _ = call_args
return args

View File

@ -1,4 +1,3 @@
from typing import Any
from unittest.mock import Mock, patch from unittest.mock import Mock, patch
from flask import Flask from flask import Flask
@ -6,6 +5,7 @@ from flask import Flask
from fittrackee import email_service from fittrackee import email_service
from fittrackee.emails.email import EmailMessage from fittrackee.emails.email import EmailMessage
from ..api_test_case import CallArgsMixin
from .template_results.password_reset_request import expected_en_text_body from .template_results.password_reset_request import expected_en_text_body
@ -32,7 +32,7 @@ class TestEmailMessage:
assert 'Hello !' in message_string assert 'Hello !' in message_string
class TestEmailSending: class TestEmailSending(CallArgsMixin):
email_data = { email_data = {
'expiration_delay': '3 seconds', 'expiration_delay': '3 seconds',
@ -42,14 +42,6 @@ class TestEmailSending:
'browser_name': 'Firefox', 'browser_name': 'Firefox',
} }
@staticmethod
def get_args(call_args: Any) -> Any:
if len(call_args) == 2:
args, _ = call_args
else:
_, args, _ = call_args
return args
def assert_smtp(self, smtp: Mock) -> None: def assert_smtp(self, smtp: Mock) -> None:
assert smtp.sendmail.call_count == 1 assert smtp.sendmail.call_count == 1
call_args = self.get_args(smtp.sendmail.call_args) call_args = self.get_args(smtp.sendmail.call_args)

View File

@ -4,6 +4,7 @@ import re
from datetime import datetime from datetime import datetime
from io import BytesIO from io import BytesIO
from typing import Dict from typing import Dict
from unittest.mock import Mock
import pytest import pytest
from flask import Flask from flask import Flask
@ -12,7 +13,7 @@ from fittrackee.users.models import User
from fittrackee.workouts.models import Sport, Workout from fittrackee.workouts.models import Sport, Workout
from fittrackee.workouts.utils_id import decode_short_id from fittrackee.workouts.utils_id import decode_short_id
from ..api_test_case import ApiTestCaseMixin from ..api_test_case import ApiTestCaseMixin, CallArgsMixin
def assert_workout_data_with_gpx(data: Dict) -> None: def assert_workout_data_with_gpx(data: Dict) -> None:
@ -205,7 +206,7 @@ def assert_workout_data_wo_gpx(data: Dict) -> None:
assert records[3]['value'] == 10.0 assert records[3]['value'] == 10.0
class TestPostWorkoutWithGpx(ApiTestCaseMixin): class TestPostWorkoutWithGpx(ApiTestCaseMixin, CallArgsMixin):
def test_it_adds_an_workout_with_gpx_file( def test_it_adds_an_workout_with_gpx_file(
self, app: Flask, user_1: User, sport_1_cycling: Sport, gpx_file: str self, app: Flask, user_1: User, sport_1_cycling: Sport, gpx_file: str
) -> None: ) -> None:
@ -330,6 +331,35 @@ class TestPostWorkoutWithGpx(ApiTestCaseMixin):
assert len(data['data']['workouts']) == 1 assert len(data['data']['workouts']) == 1
assert data['data']['workouts'][0]['notes'] == input_notes assert data['data']['workouts'][0]['notes'] == input_notes
def test_it_calls_configured_tile_server_for_static_map(
self,
app: Flask,
user_1: User,
sport_1_cycling: Sport,
gpx_file: str,
static_map_get_mock: Mock,
) -> None:
client, auth_token = self.get_test_client_and_auth_token(app)
client.post(
'/api/workouts',
data=dict(
file=(BytesIO(str.encode(gpx_file)), 'example.gpx'),
data='{"sport_id": 1}',
),
headers=dict(
content_type='multipart/form-data',
Authorization=f'Bearer {auth_token}',
),
)
call_args = self.get_args(static_map_get_mock.call_args)
assert (
app.config['TILE_SERVER']['URL']
.replace('{s}.', '')
.replace('/{z}/{x}/{y}.png', '')
in call_args[0]
)
def test_it_returns_500_if_gpx_file_has_not_tracks( def test_it_returns_500_if_gpx_file_has_not_tracks(
self, self,
app: Flask, app: Flask,

View File

@ -265,7 +265,14 @@ def generate_map(map_filepath: str, map_data: List) -> None:
""" """
Generate and save map image from map data Generate and save map image from map data
""" """
m = StaticMap(400, 225, 10) m = StaticMap(
400,
225,
10,
url_template=current_app.config['TILE_SERVER']['URL'].replace(
'{s}.', ''
),
)
line = Line(map_data, '#3388FF', 4) line = Line(map_data, '#3388FF', 4)
m.add_line(line) m.add_line(line)
image = m.render() image = m.render()