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