blocks-transformer/test_block.py

87 lines
3.4 KiB
Python
Raw Normal View History

2026-05-20 13:11:44 -04:00
import json
2025-03-12 16:13:29 +00:00
import unittest
2026-05-20 13:11:44 -04:00
from pathlib import Path
2025-03-12 16:13:29 +00:00
from block import __main__
2026-05-20 13:11:44 -04:00
BASE_DIR = Path(__file__).resolve().parent
2025-03-12 16:13:29 +00:00
data = [{
"application_key": "A3CDD39F-10F8-40B0-A4C9-0E1558B75131",
"hd_score_m1": 1101.0,
"hd_score_iso_m2": 1113,
"cluster_size": 10,
"cluster_size_users_v2": 3,
"target_connected_30_sum": 0.0,
"email_cnt": 3,
"rejected_app_count": 6.0,
"app_dt_day_cnt": 7,
"hd_score_m2": 1188,
"hd_score_m2_connected_max": 1197.0,
"hd_score_m2_connected_avg": 1184.888889,
"applicant_age_connected_max": 60.0,
"applicant_age_connected_avg": 52.44444444,
"account_tel_first_seen_min_conn": 879.0,
"account_tel_first_seen_max_conn": 989.0,
"account_tel_first_seen_avg_conn": 949.6666667,
"ssn_hash_first_seen_min_conn": 5.0,
"ssn_hash_first_seen_avg_conn": 58.0,
"account_login_first_seen_min_conn": 0.0,
"digital_id_first_seen_max_conn": 2652.0,
"true_ip_first_seen_min_conn": 1857.0,
"true_ip_first_seen_max_conn": 1967.0,
"dist_em_ip_ref_km_min_conn": 17.43689023,
"pct_acc_email_attr_challenged_1_conn": 0.0,
"account_login_first_seen_range_conn": 2313.0,
"account_login_first_seen_stddev_conn": 1042.4994,
"cpu_clock_range_conn": 9054.0,
"summary_risk_score_max_conn": 14.0
}]
2025-03-12 16:13:29 +00:00
class TestBlock(unittest.TestCase):
def test_main_returns_scores(self):
block_result = __main__(data)
self.assertIsInstance(block_result, dict)
self.assertIn("hd_score_g1", block_result)
self.assertIn("hd_score_g2", block_result)
2025-03-12 16:13:29 +00:00
2026-05-20 13:11:44 -04:00
def test_main_passes_velocity_rule_fields_through(self):
row = dict(data[0])
row.update({
"cluster_size": 1,
"application_customer_type": "Direct New",
"input_ip_address": "203.0.113.10",
"input_ip_connection_type": "broadband",
"input_ip_isp": "local isp",
"input_ip_distinct_ssn_24h": 3,
"input_ip_distinct_zip_24h": 2,
})
block_result = __main__([row])
self.assertEqual(block_result["application_customer_type"], "Direct New")
self.assertEqual(block_result["input_ip_address"], "203.0.113.10")
self.assertEqual(block_result["input_ip_connection_type"], "broadband")
self.assertEqual(block_result["input_ip_isp"], "local isp")
self.assertEqual(block_result["input_ip_distinct_ssn_24h"], 3)
self.assertEqual(block_result["input_ip_distinct_zip_24h"], 2)
def test_response_schema_includes_velocity_rule_fields(self):
schema = json.loads((BASE_DIR / "response_schema.json").read_text())
expected_types = {
"application_customer_type": ["string", "null"],
"input_ip_address": ["string", "null"],
"input_ip_connection_type": ["string", "null"],
"input_ip_isp": ["string", "null"],
"input_ip_distinct_ssn_24h": ["number", "null"],
"input_ip_distinct_zip_24h": ["number", "null"],
}
for field, expected_type in expected_types.items():
self.assertEqual(schema["properties"][field]["type"], expected_type)
2025-03-12 16:13:29 +00:00
if __name__ == "__main__":
unittest.main()