86 lines
4.7 KiB
Python
86 lines
4.7 KiB
Python
# pyright: reportCallIssue=false
|
||
|
||
from __future__ import annotations
|
||
|
||
from behave import then, when
|
||
|
||
from KVSTest.testdata.kvs_test_data import KVSTestData
|
||
|
||
|
||
@when("create two users for kvs") # pyright: ignore[reportGeneralTypeIssues]
|
||
def step_create_two_users_for_kvs(context) -> None:
|
||
td = KVSTestData.from_behave_context(context)
|
||
uid1, _ = td.create_new_user()
|
||
uid2, _ = td.create_new_user()
|
||
context.kvs_user_ids = [uid1, uid2]
|
||
|
||
|
||
@when("add both users to kvs place") # pyright: ignore[reportGeneralTypeIssues]
|
||
def step_add_both_users_to_place(context) -> None:
|
||
td = KVSTestData.from_behave_context(context)
|
||
place_id = getattr(context, "kvs_place_id", None) or td.place_id
|
||
assert isinstance(place_id, str) and place_id, "Нет kvs_place_id (place не создан)."
|
||
|
||
user_ids = getattr(context, "kvs_user_ids", None)
|
||
assert isinstance(user_ids, list) and len(user_ids) == 2, "Нет kvs_user_ids (ожидали двух созданных пользователей)."
|
||
assert all(isinstance(x, str) and x for x in user_ids), f"Некорректные user_ids: {user_ids!r}"
|
||
|
||
context.kvs_add_user_to_place_responses = [
|
||
td.add_user_to_place(account_id=user_ids[0], place_id=place_id),
|
||
td.add_user_to_place(account_id=user_ids[1], place_id=place_id),
|
||
]
|
||
|
||
|
||
|
||
@when("query members by created kvs place") # pyright: ignore[reportGeneralTypeIssues]
|
||
def step_query_members_by_place(context) -> None:
|
||
td = KVSTestData.from_behave_context(context)
|
||
place_id = getattr(context, "kvs_place_id", None) or td.place_id
|
||
assert isinstance(place_id, str) and place_id, "Нет kvs_place_id."
|
||
context.kvs_members_response = td.query_members_by_place(place_id=place_id)
|
||
|
||
|
||
@then("members response contains two created users with statuses accepted and pending") # pyright: ignore[reportGeneralTypeIssues]
|
||
def step_assert_members_initial_statuses(context) -> None:
|
||
user_ids = getattr(context, "kvs_user_ids", None)
|
||
assert isinstance(user_ids, list) and len(user_ids) == 2, "Нет kvs_user_ids."
|
||
uid1, uid2 = user_ids
|
||
|
||
resp = getattr(context, "kvs_members_response", None)
|
||
assert isinstance(resp, dict) and "data" in resp, f"Некорректный members ответ: {resp!r}"
|
||
results = resp.get("data", {}).get("members", {}).get("results")
|
||
assert isinstance(results, list), f"data.members.results не list: {results!r}"
|
||
|
||
by_id = {r.get("id"): r for r in results if isinstance(r, dict)}
|
||
assert uid1 in by_id and uid2 in by_id, f"id не совпали с созданными пользователями. ожидали={user_ids!r} получили={list(by_id.keys())!r}"
|
||
assert by_id[uid1].get("status") == "accepted", f"Первый пользователь должен быть accepted: {by_id.get(uid1)!r}"
|
||
assert by_id[uid2].get("status") == "pending", f"Второй пользователь должен быть pending: {by_id.get(uid2)!r}"
|
||
|
||
|
||
@when("update second kvs user status to accepted") # pyright: ignore[reportGeneralTypeIssues]
|
||
def step_update_second_user_status(context) -> None:
|
||
td = KVSTestData.from_behave_context(context)
|
||
place_id = getattr(context, "kvs_place_id", None) or td.place_id
|
||
user_ids = getattr(context, "kvs_user_ids", None)
|
||
assert isinstance(place_id, str) and place_id, "Нет kvs_place_id."
|
||
assert isinstance(user_ids, list) and len(user_ids) == 2, "Нет kvs_user_ids."
|
||
context.kvs_update_status_response_2 = td.update_member_status(place_id=place_id, user_id=user_ids[1], status="accepted")
|
||
|
||
|
||
@then("members response contains two created users with status accepted") # pyright: ignore[reportGeneralTypeIssues]
|
||
def step_assert_members_final_statuses(context) -> None:
|
||
user_ids = getattr(context, "kvs_user_ids", None)
|
||
assert isinstance(user_ids, list) and len(user_ids) == 2, "Нет kvs_user_ids."
|
||
uid1, uid2 = user_ids
|
||
|
||
resp = getattr(context, "kvs_members_response", None)
|
||
assert isinstance(resp, dict) and "data" in resp, f"Некорректный members ответ: {resp!r}"
|
||
results = resp.get("data", {}).get("members", {}).get("results")
|
||
assert isinstance(results, list), f"data.members.results не list: {results!r}"
|
||
|
||
by_id = {r.get("id"): r for r in results if isinstance(r, dict)}
|
||
assert uid1 in by_id and uid2 in by_id, f"id не совпали с созданными пользователями. ожидали={user_ids!r} получили={list(by_id.keys())!r}"
|
||
assert by_id[uid1].get("status") == "accepted", f"Первый пользователь должен быть accepted: {by_id.get(uid1)!r}"
|
||
assert by_id[uid2].get("status") == "accepted", f"Второй пользователь должен быть accepted: {by_id.get(uid2)!r}"
|
||
|