From ce72785184f4bea773e4cde803e938ab328db1e0 Mon Sep 17 00:00:00 2001 From: "Andrey K. Choi" Date: Thu, 16 Oct 2025 17:51:45 +0900 Subject: [PATCH] tmp commit --- .vscode/settings.json | 14 ++++ pytest.ini | 3 + requirements-dev.txt | 1 + tests/mobile_api_example.sh | 7 ++ tests/mobile_format_test.py | 139 ++++++++++++++++++++++++++++++++++++ tests/test_hello_world.py | 2 + 6 files changed, 166 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 pytest.ini create mode 100644 requirements-dev.txt create mode 100644 tests/mobile_api_example.sh create mode 100755 tests/mobile_format_test.py create mode 100644 tests/test_hello_world.py diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..e258e04 --- /dev/null +++ b/.vscode/settings.json @@ -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" + ] +} \ No newline at end of file diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 0000000..94a50dc --- /dev/null +++ b/pytest.ini @@ -0,0 +1,3 @@ +[pytest] +testpaths = tests +python_files = test_*.py \ No newline at end of file diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 0000000..55b033e --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1 @@ +pytest \ No newline at end of file diff --git a/tests/mobile_api_example.sh b/tests/mobile_api_example.sh new file mode 100644 index 0000000..30fefa4 --- /dev/null +++ b/tests/mobile_api_example.sh @@ -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": "Тестовая запись"}' diff --git a/tests/mobile_format_test.py b/tests/mobile_format_test.py new file mode 100755 index 0000000..dd18ec5 --- /dev/null +++ b/tests/mobile_format_test.py @@ -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=== ТЕСТИРОВАНИЕ ЗАВЕРШЕНО ===") \ No newline at end of file diff --git a/tests/test_hello_world.py b/tests/test_hello_world.py new file mode 100644 index 0000000..5ee6385 --- /dev/null +++ b/tests/test_hello_world.py @@ -0,0 +1,2 @@ +def test_hello_world(): + assert 1 + 1 == 2 \ No newline at end of file