using System; using Dapper; using MySqlConnector; namespace CncService.Tests { /// /// Service层测试数据库辅助类 /// 与Repository.Tests共享同一个cnc_test库,每条测试前后清理数据 /// public static class TestDb { /// 测试库连接串 public static readonly string ConnectionString = "Server=localhost;Database=cnc_test;Uid=root;Pwd=root;Charset=utf8mb4;SslMode=None;"; /// /// 清空所有测试表(按外键依赖倒序DELETE,然后重置自增) /// public static void TruncateAll() { using (var conn = new MySqlConnection(ConnectionString)) { var tables = new[] { "log_collect_raw", "log_collector_heartbeat", "cnc_worker_machine", "cnc_production_segment", "cnc_machine_daily_status", "cnc_worker_daily_summary", "cnc_daily_production", "cnc_production_adjustment", "cnc_alert", "log_system", "cnc_machine", "cnc_collect_address", "cnc_brand_field_mapping", "cnc_screen_filter", "cnc_screen_config", "cnc_worker", "cnc_sys_config", "cnc_workshop", "cnc_brand" }; conn.Execute("SET FOREIGN_KEY_CHECKS = 0"); foreach (var table in tables) { conn.Execute($"DELETE FROM {table}"); conn.Execute($"ALTER TABLE {table} AUTO_INCREMENT = 1"); } conn.Execute("SET FOREIGN_KEY_CHECKS = 1"); } SeedData(); } /// /// 插入基础种子数据 /// public static void SeedData() { using (var conn = new MySqlConnection(ConnectionString)) { // 品牌 FANUC conn.Execute(@"INSERT IGNORE INTO cnc_brand (id, brand_name, device_field, tags_path, is_enabled, created_at, updated_at) VALUES (1, 'FANUC', 'device', 'tags', 1, NOW(), NOW())"); // 车间 A栋、B栋 conn.Execute(@"INSERT IGNORE INTO cnc_workshop (id, name, sort_order, is_enabled, created_at, updated_at) VALUES (1, 'A栋', 1, 1, NOW(), NOW()), (2, 'B栋', 2, 1, NOW(), NOW())"); // 系统配置(admin账号,密码为 BCrypt("admin123")) conn.Execute(@"INSERT IGNORE INTO cnc_sys_config (config_key, config_value, value_type, description, updated_at) VALUES ('admin_username', 'admin', 'string', '管理员用户名', NOW()), ('admin_password_hash', '$2a$11$dummyhashfortesting', 'string', '管理员密码哈希', NOW())"); } } /// /// 设置真实BCrypt密码哈希(用于AuthService登录测试) /// public static void SetRealPasswordHash(string plainPassword) { var hash = BCrypt.Net.BCrypt.HashPassword(plainPassword); using (var conn = new MySqlConnection(ConnectionString)) { conn.Execute("UPDATE cnc_sys_config SET config_value = @hash WHERE config_key = 'admin_password_hash'", new { hash }); } } /// /// 执行SQL并返回受影响行数 /// public static int Execute(string sql, object param = null) { using (var conn = new MySqlConnection(ConnectionString)) { return conn.Execute(sql, param); } } /// /// 查询单个值 /// public static T QuerySingle(string sql, object param = null) { using (var conn = new MySqlConnection(ConnectionString)) { return conn.QuerySingle(sql, param); } } /// /// 查询单个值(可空) /// public static T QueryFirstOrDefault(string sql, object param = null) { using (var conn = new MySqlConnection(ConnectionString)) { return conn.QueryFirstOrDefault(sql, param); } } } }