接通Mock随机命中流水生成链路
This commit is contained in:
@@ -22,11 +22,28 @@ class FakeStaffIdentityRepository:
|
||||
}
|
||||
|
||||
|
||||
def test_generate_statements_should_include_seeded_samples_before_noise():
|
||||
"""生成流水时必须先混入固定命中样本,而不是纯随机噪声。"""
|
||||
service = StatementService()
|
||||
def test_generate_statements_should_include_seeded_samples_before_noise_when_rule_plan_exists():
|
||||
"""存在规则命中计划时,生成流水必须先混入被选中的命中样本。"""
|
||||
file_service = FileService(staff_identity_repository=FakeStaffIdentityRepository())
|
||||
service = StatementService(file_service=file_service)
|
||||
|
||||
statements = service._generate_statements(group_id=1000, log_id=20001, count=30)
|
||||
response = file_service.fetch_inner_flow(
|
||||
{
|
||||
"groupId": 1001,
|
||||
"customerNo": "customer_seeded_samples",
|
||||
"dataChannelCode": "test_code",
|
||||
"requestDateId": 20240101,
|
||||
"dataStartDateId": 20240101,
|
||||
"dataEndDateId": 20240131,
|
||||
"uploadUserId": 902001,
|
||||
}
|
||||
)
|
||||
log_id = response["data"][0]
|
||||
record = file_service.file_records[log_id]
|
||||
record.large_transaction_hit_rules = ["HOUSE_OR_CAR_EXPENSE"]
|
||||
record.phase1_hit_rules = []
|
||||
|
||||
statements = service._generate_statements(group_id=1000, log_id=log_id, count=30)
|
||||
|
||||
assert len(statements) >= 30
|
||||
assert any(item["userMemo"] == "购买房产首付款" for item in statements)
|
||||
@@ -137,6 +154,33 @@ def test_generate_statements_should_fill_noise_up_to_requested_count():
|
||||
assert len(statements) == 80
|
||||
|
||||
|
||||
def test_generate_statements_should_follow_rule_hit_plan_from_file_record():
|
||||
file_service = FileService(staff_identity_repository=FakeStaffIdentityRepository())
|
||||
statement_service = StatementService(file_service=file_service)
|
||||
|
||||
response = file_service.fetch_inner_flow(
|
||||
{
|
||||
"groupId": 1001,
|
||||
"customerNo": "customer_rule_plan",
|
||||
"dataChannelCode": "test_code",
|
||||
"requestDateId": 20240101,
|
||||
"dataStartDateId": 20240101,
|
||||
"dataEndDateId": 20240131,
|
||||
"uploadUserId": 902001,
|
||||
}
|
||||
)
|
||||
log_id = response["data"][0]
|
||||
record = file_service.file_records[log_id]
|
||||
record.large_transaction_hit_rules = ["HOUSE_OR_CAR_EXPENSE"]
|
||||
record.phase1_hit_rules = ["GAMBLING_SENSITIVE_KEYWORD"]
|
||||
|
||||
statements = statement_service._generate_statements(group_id=1001, log_id=log_id, count=200)
|
||||
|
||||
assert any("房产首付款" in item["userMemo"] for item in statements)
|
||||
assert any("游戏" in item["userMemo"] for item in statements)
|
||||
assert not any("购汇" in item["userMemo"] for item in statements)
|
||||
|
||||
|
||||
def test_generate_statements_should_stay_within_single_employee_scope_per_log_id():
|
||||
"""同一 logId 的流水只能落在 FileRecord 绑定的员工及亲属身份证内。"""
|
||||
file_service = FileService(staff_identity_repository=FakeStaffIdentityRepository())
|
||||
@@ -267,6 +311,14 @@ def test_get_bank_statement_contains_large_transaction_hit_samples(monkeypatch):
|
||||
)
|
||||
log_id = response["data"][0]
|
||||
record = file_service.file_records[log_id]
|
||||
record.large_transaction_hit_rules = [
|
||||
"HOUSE_OR_CAR_EXPENSE",
|
||||
"TAX_EXPENSE",
|
||||
"CUMULATIVE_INCOME",
|
||||
"FREQUENT_CASH_DEPOSIT",
|
||||
"LARGE_TRANSFER",
|
||||
]
|
||||
record.phase1_hit_rules = []
|
||||
staff_id_card = record.staff_id_card
|
||||
family_id_card = record.family_id_cards[0]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user