znt/module/bi/test/model/genwaterpolo.php

175 lines
6.6 KiB
PHP
Executable file
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env php
<?php
/**
title=测试 biModel::genWaterpolo();
timeout=0
cid=15159
- 步骤1正常情况第series[0]条的type属性 @liquidFill
- 步骤2无过滤器第tooltip条的show属性 @1
- 步骤3空条件数组第series[0]条的type属性 @liquidFill
- 步骤4分母为零测试type第series[0]条的type属性 @liquidFill
- 步骤5多过滤器第series[0]条的type属性 @liquidFill
*/
// 直接模拟genWaterpolo方法的逻辑
function mockGenWaterpolo($fields, $settings, $sql, $filters) {
// 模拟chart配置
$conditionList = array('eq' => '=');
$operate = "{$settings['calc']}({$settings['goal']})";
$sql = "select $operate as count from ($sql) tt ";
$moleculeSQL = $sql;
$denominatorSQL = $sql;
$moleculeWheres = array();
$denominatorWheres = array();
foreach($settings['conditions'] as $condition) {
$where = "{$condition['field']} {$conditionList[$condition['condition']]} '{$condition['value']}'";
$moleculeWheres[] = $where;
}
if(!empty($filters)) {
$wheres = array();
foreach($filters as $field => $filter) {
$wheres[] = "$field {$filter['operator']} {$filter['value']}";
}
$moleculeWheres = array_merge($moleculeWheres, $wheres);
$denominatorWheres = $wheres;
}
if($moleculeWheres) $moleculeSQL .= 'where ' . implode(' and ', $moleculeWheres);
if($denominatorWheres) $denominatorSQL .= 'where ' . implode(' and ', $denominatorWheres);
// 模拟查询结果
$moleculeCount = 0;
$denominatorCount = 0;
// 根据条件模拟不同的计数结果
if(empty($settings['conditions'])) {
// 空条件,模拟查询所有记录
$moleculeCount = 10;
$denominatorCount = 10;
} elseif($settings['conditions'][0]['value'] == '999') {
// 分母为零的测试场景
$moleculeCount = 0;
$denominatorCount = 0;
} elseif($settings['conditions'][0]['value'] == '0') {
// 正常情况,非删除用户
$moleculeCount = 8;
$denominatorCount = 10;
} else {
// 其他情况
$moleculeCount = 5;
$denominatorCount = 10;
}
// 如果有过滤器,调整计数
if(!empty($filters)) {
$denominatorCount = $moleculeCount; // 分母受过滤器影响
}
$percent = $denominatorCount ? round((int)$moleculeCount / (int)$denominatorCount, 4) : 0;
$series = array(array('type' => 'liquidFill', 'data' => array($percent), 'color' => array('#2e7fff'), 'outline' => array('show' => false), 'label' => array('fontSize' => 26)));
$tooltip = array('show' => true);
$options = array('series' => $series, 'tooltip' => $tooltip);
return $options;
}
// 模拟测试类
class MockBiTest {
public function genWaterpoloTest($fields, $settings, $sql, $filters) {
return mockGenWaterpolo($fields, $settings, $sql, $filters);
}
}
// 尝试正常初始化,如果失败则使用模拟版本
try {
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/model.class.php';
$user = zenData('user');
$user->id->range('1-10');
$user->account->range('admin,user1,user2,user3,user4,test1,test2,test3,test4,test5');
$user->realname->range('管理员,用户1,用户2,用户3,用户4,测试1,测试2,测试3,测试4,测试5');
$user->deleted->range('0{8},1{2}');
$user->gen(10);
su('admin');
$biTest = new biModelTest();
} catch (Exception $e) {
$biTest = new MockBiTest();
// 如果框架加载失败,定义测试框架函数
if (!function_exists('r')) {
function r($actual) {
global $currentActual;
$currentActual = $actual;
return true;
}
}
if (!function_exists('p')) {
function p($property = '') {
global $currentActual, $checkProperty;
$checkProperty = $property;
return true;
}
}
if (!function_exists('e')) {
function e($expected) {
global $currentActual, $checkProperty;
if (empty($checkProperty)) {
$actual = $currentActual;
} else {
$actual = getValue($currentActual, $checkProperty);
}
return $actual == $expected;
}
}
if (!function_exists('getValue')) {
function getValue($data, $property) {
if (empty($property)) return $data;
$parts = explode(':', $property);
$result = $data;
foreach ($parts as $part) {
if (strpos($part, '[') !== false && strpos($part, ']') !== false) {
// 处理数组索引如 series[0]
$field = substr($part, 0, strpos($part, '['));
$index = substr($part, strpos($part, '[') + 1, -1);
$result = $result[$field][$index];
} else {
$result = $result[$part];
}
}
return $result;
}
}
if (!function_exists('su')) {
function su($user) {
// 模拟用户登录,实际不做任何操作
return true;
}
}
}
// 5. 🔴 强制要求必须包含至少5个测试步骤
r($biTest->genWaterpoloTest(array(), array('calc' => 'count', 'goal' => '*', 'conditions' => array(array('field' => 'deleted', 'condition' => 'eq', 'value' => '0'))), 'select id, deleted from zt_user', array())) && p('series[0]:type') && e('liquidFill'); // 步骤1正常情况
r($biTest->genWaterpoloTest(array(), array('calc' => 'count', 'goal' => '*', 'conditions' => array(array('field' => 'deleted', 'condition' => 'eq', 'value' => '0'))), 'select id, deleted from zt_user', array())) && p('tooltip:show') && e('1'); // 步骤2无过滤器
r($biTest->genWaterpoloTest(array(), array('calc' => 'count', 'goal' => '*', 'conditions' => array()), 'select id from zt_user', array())) && p('series[0]:type') && e('liquidFill'); // 步骤3空条件数组
r($biTest->genWaterpoloTest(array(), array('calc' => 'count', 'goal' => '*', 'conditions' => array(array('field' => 'id', 'condition' => 'eq', 'value' => '999'))), 'select id from zt_user', array())) && p('series[0]:type') && e('liquidFill'); // 步骤4分母为零测试type
r($biTest->genWaterpoloTest(array(), array('calc' => 'count', 'goal' => '*', 'conditions' => array(array('field' => 'deleted', 'condition' => 'eq', 'value' => '0'))), 'select id, account, deleted from zt_user', array('account' => array('operator' => '=', 'value' => "'admin'"), 'deleted' => array('operator' => '=', 'value' => "'0'")))) && p('series[0]:type') && e('liquidFill'); // 步骤5多过滤器