You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

84 lines
3.8 KiB

from __future__ import annotations
from uuid import uuid4
from playwright.sync_api import Page, expect
from tests.e2e.helpers import accept_next_dialog, expect_flash, expect_path, login
def _unique_suffix() -> str:
return uuid4().hex[:8]
def test_admin_can_create_household_and_manage_members(
page: Page,
base_url: str,
admin_credentials: dict[str, str],
) -> None:
suffix = _unique_suffix()
head_name = f"自动化新户{suffix}"
member_name = f"成员{suffix}"
updated_member_name = f"成员更新{suffix}"
login(
page,
base_url,
username=admin_credentials["username"],
password=admin_credentials["password"],
expected_path="/",
)
page.get_by_role("link", name="新增一户").click()
expect_path(page, base_url, "/households/new")
expect(page.get_by_role("heading", name="最小创建一户")).to_be_visible()
page.locator("#head_name").fill(head_name)
page.locator("#note").fill("E2E 创建的新户")
page.get_by_role("button", name="创建并继续补充").click()
expect(page.get_by_role("heading", name="编辑户信息")).to_be_visible()
expect_flash(page, f"已创建户 {head_name}")
expect(page.locator("#household_code")).not_to_have_value("")
expect(page.locator("#head_name")).to_have_value(head_name)
expect(page.locator("#note")).to_have_value("E2E 创建的新户")
page.locator("summary").filter(has_text="+ 添加新成员").click()
new_member_form = page.locator("#new-member-form")
new_member_form.locator("#new_member_name").fill(member_name)
new_member_form.locator("#new_member_relation").select_option("子女")
new_member_form.locator("#new_member_gender").select_option("male")
new_member_form.locator("#new_member_age_group").select_option("child")
new_member_form.get_by_role("checkbox", name="是儿童").check()
new_member_form.get_by_role("checkbox", name="需红包").check()
new_member_form.locator("#new_member_note").fill("新增成员备注")
new_member_form.get_by_role("button", name="添加成员").click()
expect_flash(page, f"已添加成员 {member_name}")
member_row = page.locator("div.rounded-xl", has_text=member_name).first
expect(member_row.get_by_text(member_name, exact=True)).to_be_visible()
expect(member_row.get_by_text("需红包", exact=True)).to_be_visible()
member_row.get_by_role("button", name="编辑").click()
expect(page.locator("#edit-member-modal")).to_be_visible()
page.locator("#edit_member_name").fill(updated_member_name)
page.locator("#edit_member_relation").select_option("其他亲属")
page.locator("#edit_member_age_group").select_option("teen")
page.locator("#edit_member_is_child").uncheck()
page.locator("#edit_member_needs_red_packet").uncheck()
page.locator("#edit_member_actually_attended").check()
page.locator("#edit_member_note").fill("编辑后的成员备注")
page.locator("#edit-member-form").get_by_role("button", name="保存修改").click()
expect_flash(page, f"已更新成员 {updated_member_name} 的信息。")
updated_member_row = page.locator("div.rounded-xl", has_text=updated_member_name).first
expect(updated_member_row.get_by_text(updated_member_name, exact=True)).to_be_visible()
expect(updated_member_row.get_by_text("编辑后的成员备注")).to_be_visible()
expect(updated_member_row.get_by_text("已到场")).to_be_visible()
accept_next_dialog(page, expected_message_substring=updated_member_name)
updated_member_row.get_by_role("button", name="删除").click()
expect_flash(page, f"已删除成员 {updated_member_name}")
expect(page.locator("div.rounded-xl", has_text=updated_member_name)).to_have_count(0)
expect(page.get_by_text("暂无家庭成员记录,点击下方按钮添加。")).to_be_visible()