95 lines
3.1 KiB
Python
95 lines
3.1 KiB
Python
"""账号管理「按账号名批量选号」相关测试。"""
|
|
|
|
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 == ""
|