feat: 账号管理支持按账号名批量选号打标签,并支持复制账号名

This commit is contained in:
yml2213
2026-10-20 17:31:39 +08:00
parent c299f63537
commit c778ae9a09
8 changed files with 465 additions and 10 deletions
@@ -0,0 +1,94 @@
"""账号管理「按账号名批量选号」相关测试。"""
from tests.support.db import get_test_engine, make_test_session
from web.backend.models import Account, User
from web.backend.routers.accounts import (
_parse_account_names,
batch_tag_selection,
list_account_ids,
list_accounts,
)
from web.backend.schemas import AccountBulkTag
class TestAccountNameBatchSelection:
def setup_method(self):
self.engine = get_test_engine()
self.session = make_test_session(self.engine)
self.admin = User(
username="name-filter-admin",
password_hash="hash",
role="super_admin",
is_active=True,
)
self.session.add(self.admin)
self.session.commit()
self.accounts = {}
for name in ("name-filter-a", "name-filter-b", "name-filter-c"):
account = Account(
username=name,
password="password",
email=f"{name}@example.com",
email_password="mail-password",
cookie="acf_uid=1",
)
self.session.add(account)
self.session.flush()
self.accounts[name] = account
self.session.commit()
def teardown_method(self):
self.session.close()
def test_parse_account_names_trims_and_dedupes(self):
assert _parse_account_names(
"name-filter-c\n\nname-filter-a\r\nname-filter-c\n name-filter-b "
) == ["name-filter-c", "name-filter-a", "name-filter-b"]
def test_list_accounts_filters_by_exact_names(self):
result = list_accounts(
account_names="name-filter-c\nname-filter-missing\nname-filter-a",
page=1,
page_size=20,
db=self.session,
current=self.admin,
)
assert result["total"] == 2
assert {item.username for item in result["items"]} == {
"name-filter-a",
"name-filter-c",
}
def test_list_account_ids_follows_paste_order(self):
result = list_account_ids(
account_names="name-filter-c\nname-filter-missing\nname-filter-a",
db=self.session,
current=self.admin,
)
assert result["account_ids"] == [
self.accounts["name-filter-c"].id,
self.accounts["name-filter-a"].id,
]
assert result["usernames"] == ["name-filter-c", "name-filter-a"]
assert result["total"] == 2
def test_batch_tag_selection_supports_account_names(self):
result = batch_tag_selection(
req=AccountBulkTag(
all_matching=True,
account_names="name-filter-a\nname-filter-b",
tag_value="按名单标签",
),
db=self.session,
current=self.admin,
)
assert result["count"] == 2
for name in ("name-filter-a", "name-filter-b"):
self.session.refresh(self.accounts[name])
assert self.accounts[name].tag == "按名单标签"
self.session.refresh(self.accounts["name-filter-c"])
assert self.accounts["name-filter-c"].tag == ""