tmp commit
This commit is contained in:
14
.vscode/settings.json
vendored
Normal file
14
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"python.testing.pytestArgs": [
|
||||||
|
"tests"
|
||||||
|
],
|
||||||
|
"python.testing.unittestEnabled": true,
|
||||||
|
"python.testing.pytestEnabled": false,
|
||||||
|
"python.testing.unittestArgs": [
|
||||||
|
"-v",
|
||||||
|
"-s",
|
||||||
|
"./tests",
|
||||||
|
"-p",
|
||||||
|
"test_*.py"
|
||||||
|
]
|
||||||
|
}
|
||||||
3
pytest.ini
Normal file
3
pytest.ini
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
[pytest]
|
||||||
|
testpaths = tests
|
||||||
|
python_files = test_*.py
|
||||||
1
requirements-dev.txt
Normal file
1
requirements-dev.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
pytest
|
||||||
7
tests/mobile_api_example.sh
Normal file
7
tests/mobile_api_example.sh
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Пример запроса к мобильному API календарного сервиса
|
||||||
|
curl -v -X POST http://localhost:8004/api/v1/calendar/entries/mobile \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-H "Authorization: Bearer $(cat auth_token.txt)" \
|
||||||
|
-d '{"date": "2025-09-26", "type": "MENSTRUATION", "flow_intensity": 3, "symptoms": ["CRAMPS", "HEADACHE"], "mood": "NORMAL", "notes": "Тестовая запись"}'
|
||||||
139
tests/mobile_format_test.py
Executable file
139
tests/mobile_format_test.py
Executable file
@@ -0,0 +1,139 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
"""
|
||||||
|
Скрипт для демонстрации преобразования данных мобильного формата в формат сервера.
|
||||||
|
Показывает, как преобразовывать данные и какие поля ожидает сервер.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import json
|
||||||
|
import requests
|
||||||
|
from datetime import date, datetime
|
||||||
|
|
||||||
|
# Пример данных из мобильного приложения
|
||||||
|
MOBILE_DATA_EXAMPLES = [
|
||||||
|
{
|
||||||
|
"date": "2025-09-26",
|
||||||
|
"type": "MENSTRUATION",
|
||||||
|
"flow_intensity": 3,
|
||||||
|
"symptoms": ["CRAMPS", "HEADACHE"],
|
||||||
|
"mood": "NORMAL",
|
||||||
|
"notes": "Пример записи о менструации"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"date": "2025-09-30",
|
||||||
|
"type": "OVULATION",
|
||||||
|
"symptoms": ["BREAST_TENDERNESS"],
|
||||||
|
"mood": "HAPPY",
|
||||||
|
"notes": "Пример записи об овуляции"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"date": "2025-10-05",
|
||||||
|
"type": "SPOTTING",
|
||||||
|
"flow_intensity": 1,
|
||||||
|
"symptoms": ["BLOATING"],
|
||||||
|
"mood": "STRESSED",
|
||||||
|
"notes": "Пример записи о выделениях"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
def test_format_conversion(mobile_data):
|
||||||
|
"""Тестирование преобразования формата данных"""
|
||||||
|
url = "http://localhost:8004/debug/mobile-entry"
|
||||||
|
|
||||||
|
headers = {
|
||||||
|
"Content-Type": "application/json"
|
||||||
|
}
|
||||||
|
|
||||||
|
print(f"\nТестирование преобразования данных: {json.dumps(mobile_data, ensure_ascii=False)}")
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = requests.post(url, json=mobile_data, headers=headers)
|
||||||
|
|
||||||
|
if response.status_code == 200:
|
||||||
|
result = response.json()
|
||||||
|
|
||||||
|
print("✅ Успешное преобразование данных")
|
||||||
|
print("\nОригинальные данные (мобильный формат):")
|
||||||
|
print(json.dumps(result["original_data"], ensure_ascii=False, indent=2))
|
||||||
|
|
||||||
|
print("\nПреобразованные данные (формат сервера):")
|
||||||
|
print(json.dumps(result["transformed_data"], ensure_ascii=False, indent=2))
|
||||||
|
|
||||||
|
print("\nАнализ преобразования:")
|
||||||
|
print(f"- Дата: {mobile_data['date']} -> {result['transformed_data']['entry_date']}")
|
||||||
|
print(f"- Тип: {mobile_data['type']} -> {result['transformed_data']['entry_type']}")
|
||||||
|
|
||||||
|
if mobile_data.get('flow_intensity'):
|
||||||
|
print(f"- Интенсивность: {mobile_data['flow_intensity']} -> {result['transformed_data']['flow_intensity']}")
|
||||||
|
|
||||||
|
if mobile_data.get('symptoms'):
|
||||||
|
print(f"- Симптомы: {', '.join(mobile_data['symptoms'])} -> {result['transformed_data']['symptoms']}")
|
||||||
|
|
||||||
|
if mobile_data.get('mood'):
|
||||||
|
print(f"- Настроение: {mobile_data['mood']} -> {result['transformed_data']['mood'] or 'Не задано'}")
|
||||||
|
|
||||||
|
return result
|
||||||
|
else:
|
||||||
|
print(f"❌ Ошибка: {response.status_code}")
|
||||||
|
print(response.text)
|
||||||
|
return None
|
||||||
|
except Exception as e:
|
||||||
|
print(f"❌ Исключение: {str(e)}")
|
||||||
|
return None
|
||||||
|
|
||||||
|
def generate_documentation():
|
||||||
|
"""Генерация документации по формату данных"""
|
||||||
|
print("\n=== ДОКУМЕНТАЦИЯ ПО ФОРМАТУ ДАННЫХ ===\n")
|
||||||
|
print("Мобильный формат данных должен соответствовать следующей схеме:")
|
||||||
|
|
||||||
|
schema = {
|
||||||
|
"date": "string (формат YYYY-MM-DD, например '2025-09-26')",
|
||||||
|
"type": "string (один из: MENSTRUATION, OVULATION, SPOTTING, DISCHARGE, PAIN, MOOD)",
|
||||||
|
"flow_intensity": "integer (опционально, значения от 1 до 5)",
|
||||||
|
"symptoms": "массив строк (опционально, например ['CRAMPS', 'HEADACHE'])",
|
||||||
|
"mood": "string (опционально, одно из: HAPPY, SAD, NORMAL, STRESSED, ANXIOUS, IRRITATED)",
|
||||||
|
"notes": "string (опционально, текстовые заметки)"
|
||||||
|
}
|
||||||
|
|
||||||
|
print(json.dumps(schema, ensure_ascii=False, indent=2))
|
||||||
|
|
||||||
|
print("\nМаппинг между форматами:")
|
||||||
|
|
||||||
|
mapping = {
|
||||||
|
"Типы записей": {
|
||||||
|
"MENSTRUATION": "period",
|
||||||
|
"OVULATION": "ovulation",
|
||||||
|
"SPOTTING": "symptoms",
|
||||||
|
"DISCHARGE": "symptoms",
|
||||||
|
"PAIN": "symptoms",
|
||||||
|
"MOOD": "mood"
|
||||||
|
},
|
||||||
|
"Интенсивность выделений": {
|
||||||
|
"1": "light",
|
||||||
|
"2": "light",
|
||||||
|
"3": "medium",
|
||||||
|
"4-5": "heavy"
|
||||||
|
},
|
||||||
|
"Настроение": {
|
||||||
|
"HAPPY": "happy",
|
||||||
|
"SAD": "sad",
|
||||||
|
"NORMAL": "happy", # Маппится на happy
|
||||||
|
"STRESSED": "anxious",
|
||||||
|
"ANXIOUS": "anxious",
|
||||||
|
"IRRITATED": "irritated"
|
||||||
|
},
|
||||||
|
"Симптомы": "Преобразуются из массива строк в строку с разделителями-запятыми"
|
||||||
|
}
|
||||||
|
|
||||||
|
print(json.dumps(mapping, ensure_ascii=False, indent=2))
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
print("=== ТЕСТИРОВАНИЕ ПРЕОБРАЗОВАНИЯ ДАННЫХ МОБИЛЬНОГО ФОРМАТА ===\n")
|
||||||
|
|
||||||
|
for i, example in enumerate(MOBILE_DATA_EXAMPLES):
|
||||||
|
print(f"\n--- Пример #{i+1} ---")
|
||||||
|
test_format_conversion(example)
|
||||||
|
|
||||||
|
generate_documentation()
|
||||||
|
|
||||||
|
print("\n=== ТЕСТИРОВАНИЕ ЗАВЕРШЕНО ===")
|
||||||
2
tests/test_hello_world.py
Normal file
2
tests/test_hello_world.py
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
def test_hello_world():
|
||||||
|
assert 1 + 1 == 2
|
||||||
Reference in New Issue
Block a user