mirror of
https://github.com/alexgetmancom/miband-bot.git
synced 2026-07-19 12:10:14 +03:00
feat: add miband bot application
This commit is contained in:
@@ -0,0 +1,355 @@
|
||||
"""conftest.py —— pytest 公共 fixture。"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
import pytest
|
||||
|
||||
from mi_fitness.auth import XiaomiAuth
|
||||
from mi_fitness.models import AuthToken
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def ssecurity() -> str:
|
||||
"""测试用 ssecurity(base64 编码的 16 字节密钥)。"""
|
||||
return "56nienlY7Ayh4VVJ0ywGGg=="
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def auth_token(ssecurity: str) -> AuthToken:
|
||||
"""构造一个已登录的 AuthToken。"""
|
||||
return AuthToken(
|
||||
user_id="123456",
|
||||
c_user_id="c_test_user",
|
||||
service_token="test_service_token",
|
||||
ssecurity=ssecurity,
|
||||
pass_token="test_pass_token",
|
||||
device_id="an_test_device",
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_auth(auth_token: AuthToken) -> XiaomiAuth:
|
||||
"""构造一个已登录的 mock XiaomiAuth 实例。"""
|
||||
auth = XiaomiAuth.__new__(XiaomiAuth)
|
||||
auth.username = "test"
|
||||
auth._password = ""
|
||||
auth.token = auth_token
|
||||
auth._http = MagicMock()
|
||||
auth._ticket_token = ""
|
||||
auth._token_path = None
|
||||
return auth
|
||||
|
||||
|
||||
# region 常用 API 响应模板
|
||||
RELATIVE_LIST_RESPONSE = {
|
||||
"code": 0,
|
||||
"message": "ok",
|
||||
"result": {
|
||||
"relative_list": [
|
||||
{
|
||||
"relative_uid": 1452722403,
|
||||
"relative_note": "妈妈",
|
||||
"relative_icon": "https://example.com/avatar.jpg",
|
||||
"latest_data_time": 1717488000,
|
||||
"latest_abnormal_record_time": 0,
|
||||
"source_tag": 1,
|
||||
},
|
||||
{
|
||||
"relative_uid": 9876543210,
|
||||
"relative_note": "爸爸",
|
||||
"relative_icon": "",
|
||||
"latest_data_time": 1717484400,
|
||||
"latest_abnormal_record_time": 0,
|
||||
"source_tag": 1,
|
||||
},
|
||||
]
|
||||
},
|
||||
}
|
||||
|
||||
VERIFY_USER_RESPONSE = {
|
||||
"code": 0,
|
||||
"message": "ok",
|
||||
"result": {
|
||||
"userId": 1452722403,
|
||||
"nickname": "测试用户",
|
||||
"icon": "https://example.com/icon.jpg",
|
||||
},
|
||||
}
|
||||
|
||||
INVITE_RESPONSE = {
|
||||
"code": 0,
|
||||
"message": "ok",
|
||||
"result": {"send_ret": 1},
|
||||
}
|
||||
|
||||
DELETE_RESPONSE = {
|
||||
"code": 0,
|
||||
"message": "ok",
|
||||
"result": {"delete_ret": True},
|
||||
}
|
||||
|
||||
OPERATE_INVITE_RESPONSE = {
|
||||
"code": 0,
|
||||
"message": "ok",
|
||||
"result": {"operate_ret": True},
|
||||
}
|
||||
|
||||
INVITE_ID_RESPONSE = {
|
||||
"code": 0,
|
||||
"message": "ok",
|
||||
"result": {"invite_link_id": 467184968352742400},
|
||||
}
|
||||
|
||||
SHARED_TYPES_RESPONSE = {
|
||||
"code": 0,
|
||||
"message": "ok",
|
||||
"result": {
|
||||
"keys": ["goal", "heart_rate", "sleep", "steps"],
|
||||
},
|
||||
}
|
||||
|
||||
LATEST_DATA_RESPONSE = {
|
||||
"code": 0,
|
||||
"message": "ok",
|
||||
"result": {
|
||||
"data_list": [
|
||||
{
|
||||
"time": 1717488000,
|
||||
"key": "goal",
|
||||
"value": (
|
||||
'{"date_time":1717488000,"goal_items":['
|
||||
'{"field":2,"target_value":400,"achieved_value":13},'
|
||||
'{"field":1,"target_value":6000,"achieved_value":3716}'
|
||||
"]}"
|
||||
),
|
||||
},
|
||||
{
|
||||
"time": 1717488000,
|
||||
"key": "heart_rate",
|
||||
"value": '{"time":1717491600,"bpm":84}',
|
||||
},
|
||||
{
|
||||
"time": 1717488000,
|
||||
"key": "sleep",
|
||||
"value": (
|
||||
'{"date_time":1717488000,"total_duration":436,'
|
||||
'"sleep_stage":3,"sleep_score":86,'
|
||||
'"long_sleep_evaluation":7,"day_sleep_evaluation":0}'
|
||||
),
|
||||
},
|
||||
{
|
||||
"time": 1717488000,
|
||||
"key": "steps",
|
||||
"value": '{"date_time":1717488000,"steps":3716,"distance":2193,"calories":143,"goal":6000}',
|
||||
},
|
||||
{
|
||||
"time": 1717488000,
|
||||
"key": "calories",
|
||||
"value": '{"date_time":1717488000,"calories":230,"goal":300}',
|
||||
},
|
||||
{
|
||||
"time": 1717488000,
|
||||
"key": "valid_stand",
|
||||
"value": '{"date_time":1717488000,"count":7}',
|
||||
},
|
||||
{
|
||||
"time": 1717488000,
|
||||
"key": "intensity",
|
||||
"value": '{"date_time":1717488000,"duration":15}',
|
||||
},
|
||||
{
|
||||
"time": 1717488000,
|
||||
"key": "weight",
|
||||
"value": '{"time":1717488000,"weight":65.5,"bmi":22.1}',
|
||||
},
|
||||
{
|
||||
"time": 1717488000,
|
||||
"key": "spo2",
|
||||
"value": '{"time":1717495200,"spo2":96}',
|
||||
},
|
||||
{
|
||||
"key": "blood_pressure",
|
||||
},
|
||||
],
|
||||
"latest_data_time": 1717495200,
|
||||
},
|
||||
}
|
||||
|
||||
AGGREGATED_HR_RESPONSE = {
|
||||
"code": 0,
|
||||
"message": "ok",
|
||||
"result": {
|
||||
"data_list": [
|
||||
{
|
||||
"sid": "miothealth",
|
||||
"tag": "daily_report",
|
||||
"key": "heart_rate",
|
||||
"time": 1717430400,
|
||||
"value": (
|
||||
'{"avg_hr":72,"avg_rhr":62,"max_hr":120,"min_hr":55,'
|
||||
'"latest_hr":{"bpm":75,"time":1717488000},'
|
||||
'"abnormal_hr_count":0,'
|
||||
'"aerobic_hr_zone_duration":30,'
|
||||
'"anaerobic_hr_zone_duration":0,'
|
||||
'"extreme_hr_zone_duration":0,'
|
||||
'"fat_burning_hr_zone_duration":15,'
|
||||
'"warm_up_hr_zone_duration":10}'
|
||||
),
|
||||
"update_time": 1717488000,
|
||||
"watermark": "w1",
|
||||
"source_sid_list": [],
|
||||
}
|
||||
],
|
||||
"has_more": False,
|
||||
},
|
||||
}
|
||||
|
||||
AGGREGATED_SLEEP_RESPONSE = {
|
||||
"code": 0,
|
||||
"message": "ok",
|
||||
"result": {
|
||||
"data_list": [
|
||||
{
|
||||
"sid": "miothealth",
|
||||
"tag": "daily_report",
|
||||
"key": "sleep",
|
||||
"time": 1717430400,
|
||||
"value": (
|
||||
'{"total_duration":480,"sleep_score":85,"sleep_stage":4,'
|
||||
'"sleep_deep_duration":120,"sleep_light_duration":200,'
|
||||
'"sleep_rem_duration":100,"sleep_awake_duration":60,'
|
||||
'"long_sleep_evaluation":1,"day_sleep_evaluation":0,'
|
||||
'"avg_hr":60,"max_hr":80,"min_hr":50,"avg_spo2":97,'
|
||||
'"segment_details":[{"bedtime":1717365600,"wake_up_time":1717394400,'
|
||||
'"duration":480,"sleep_deep_duration":120,"sleep_light_duration":200,'
|
||||
'"timezone":28800,"awake_count":2,"sleep_awake_duration":60}]}'
|
||||
),
|
||||
"update_time": 1717488000,
|
||||
"watermark": "w2",
|
||||
"source_sid_list": [],
|
||||
}
|
||||
],
|
||||
"has_more": False,
|
||||
},
|
||||
}
|
||||
|
||||
AGGREGATED_STEPS_RESPONSE = {
|
||||
"code": 0,
|
||||
"message": "ok",
|
||||
"result": {
|
||||
"data_list": [
|
||||
{
|
||||
"sid": "miothealth",
|
||||
"tag": "daily_report",
|
||||
"key": "steps",
|
||||
"time": 1717430400,
|
||||
"value": '{"steps":8500,"distance":6200,"calories":320}',
|
||||
"update_time": 1717488000,
|
||||
"watermark": "w3",
|
||||
"source_sid_list": [],
|
||||
}
|
||||
],
|
||||
"has_more": False,
|
||||
},
|
||||
}
|
||||
|
||||
FITNESS_WEIGHT_RESPONSE = {
|
||||
"code": 0,
|
||||
"message": "ok",
|
||||
"result": {
|
||||
"data_list": [
|
||||
{
|
||||
"sid": "xiaomiwear_app_manually",
|
||||
"tag": "",
|
||||
"key": "weight",
|
||||
"time": 1773753142,
|
||||
"value": '{"bmi":16.97531,"time":1773753142,"weight":55.0}',
|
||||
"update_time": 1773753142,
|
||||
"watermark": "w5",
|
||||
"source_sid_list": [],
|
||||
}
|
||||
],
|
||||
"has_more": False,
|
||||
},
|
||||
}
|
||||
|
||||
FITNESS_BLOOD_PRESSURE_RESPONSE = {
|
||||
"code": 0,
|
||||
"message": "ok",
|
||||
"result": {
|
||||
"data_list": [
|
||||
{
|
||||
"sid": "xiaomiwear_app_manually",
|
||||
"tag": "",
|
||||
"key": "blood_pressure",
|
||||
"time": 1773753098,
|
||||
"value": (
|
||||
'{"systolic_pressure":33,"diastolic_pressure":30,"pulse":60,"time":1773753098}'
|
||||
),
|
||||
"update_time": 1773753098,
|
||||
"watermark": "w6",
|
||||
"source_sid_list": [],
|
||||
}
|
||||
],
|
||||
"has_more": False,
|
||||
},
|
||||
}
|
||||
|
||||
FAMILY_MEMBER_RESPONSE = {
|
||||
"code": 0,
|
||||
"message": "ok",
|
||||
"result": {
|
||||
"family_user_list": [
|
||||
{"userId": 123, "nickname": "家人1"},
|
||||
]
|
||||
},
|
||||
}
|
||||
|
||||
MESSAGE_LIST_RESPONSE = {
|
||||
"code": 0,
|
||||
"message": "ok",
|
||||
"result": {
|
||||
"messages": [
|
||||
{
|
||||
"msg_id": 152824796151809,
|
||||
"module": 1,
|
||||
"type": 1,
|
||||
"receiver": 3188565001,
|
||||
"sender": 1452722403,
|
||||
"extra_data": '{"invite_id":4777767,"auth_data":["heart_rate","sleep"],"nick_name":"测试用户","icon":"https://example.com/avatar.jpg"}',
|
||||
"is_new": 2,
|
||||
"data_status": 0,
|
||||
"create_time": 1772628283,
|
||||
"last_modify": 1772628283,
|
||||
},
|
||||
{
|
||||
"msg_id": 152821515157506,
|
||||
"module": 1,
|
||||
"type": 5,
|
||||
"receiver": 3188565001,
|
||||
"sender": 1452722403,
|
||||
"extra_data": '{"nick_name":"测试用户","icon":"https://example.com/avatar.jpg"}',
|
||||
"is_new": 2,
|
||||
"data_status": 1,
|
||||
"create_time": 1772625154,
|
||||
"last_modify": 1772625154,
|
||||
},
|
||||
],
|
||||
"msg_total": 2,
|
||||
},
|
||||
}
|
||||
|
||||
CHECK_NEW_MSG_RESPONSE = {
|
||||
"code": 0,
|
||||
"message": "ok",
|
||||
"result": [{"module": 1, "is_new": True}],
|
||||
}
|
||||
|
||||
CHECK_NO_NEW_MSG_RESPONSE = {
|
||||
"code": 0,
|
||||
"message": "ok",
|
||||
"result": [{"module": 1, "is_new": False}],
|
||||
}
|
||||
# endregion
|
||||
Reference in New Issue
Block a user