znt/module/search/test/model/buildquery.php

97 lines
4.3 KiB
PHP
Raw Permalink Normal View History

#!/usr/bin/env php
<?php
/**
title=测试 searchModel::buildQuery();
timeout=0
cid=18295
- 执行$form第0条的field属性 @title
- 执行search模块的buildQueryTest方法参数是$searchConfig, $postDatas, 'query' @(( 1 AND `title` LIKE '%test%' ) AND ( 1 ))
- 执行search模块的buildQueryTest方法参数是$searchConfig, $postDatas, 'query' @(( 1 AND `title` LIKE '%0%' ) AND ( 1 ))
- 执行search模块的buildQueryTest方法参数是$searchConfig, $postDatas, 'query' @(( 1 ) AND ( 1 ))
- 执行search模块的buildQueryTest方法参数是$searchConfig, $postDatas, 'query' @(( 1 AND `title` LIKE '%bug%' AND `status` = 'active' ) AND ( 1 ))
- 执行search模块的buildQueryTest方法参数是$searchConfig, $postDatas, 'query' @(( 1 AND `title` LIKE '%bug%' OR `status` = 'active' ) AND ( 1 ))
- 执行search2模块的buildQueryTest方法参数是$searchConfig2, $postDatas2, 'query' @(( 1 OR `status` = 'active' ) AND ( 1 ))
*/
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/model.class.php';
su('admin');
$searchConfig = array();
$searchConfig['module'] = 'bug';
$searchConfig['fields'] = array();
$searchConfig['fields']['title'] = 'Bug Title';
$searchConfig['fields']['status'] = 'Bug Status';
$searchConfig['params'] = array();
$searchConfig['params']['title']['operator'] = 'include';
$searchConfig['params']['title']['control'] = 'input';
$searchConfig['params']['title']['value'] = '';
$searchConfig['params']['status']['operator'] = '=';
$searchConfig['params']['status']['control'] = 'select';
$searchConfig['params']['status']['value'] = array('active' => 'Active', 'closed' => 'Closed');
$searchConfig['onMenuBar'] = 'yes';
$searchConfig['actionURL'] = '/index.php?m=bug&f=browse&productID=110&branch=0&browseType=bySearch&queryID=myQueryID';
$searchConfig['queryID'] = 0;
$search = new searchModelTest();
// 测试步骤1正常搜索条件构建
$postData1 = new stdclass();
$postData1->field1 = 'title';
$postData1->andOr1 = 'and';
$postData1->operator1 = 'include';
$postData1->value1 = 'test';
$postDatas = array($postData1);
$form = $search->buildQueryTest($searchConfig, $postDatas, 'form');
r($form) && p('0:field') && e('title');
// 测试步骤2正常搜索SQL生成
r($search->buildQueryTest($searchConfig, $postDatas, 'query')) && p() && e("(( 1 AND `title` LIKE '%test%' ) AND ( 1 ))");
// 测试步骤3特殊值0的处理
$postData1->value1 = '0';
$postDatas = array($postData1);
r($search->buildQueryTest($searchConfig, $postDatas, 'query')) && p() && e("(( 1 AND `title` LIKE '%0%' ) AND ( 1 ))");
// 测试步骤4空值条件处理
$postData1->value1 = '';
$postDatas = array($postData1);
r($search->buildQueryTest($searchConfig, $postDatas, 'query')) && p() && e("(( 1 ) AND ( 1 ))");
// 测试步骤5多个搜索条件组合
$postData1->value1 = 'bug';
$postData2 = new stdclass();
$postData2->field2 = 'status';
$postData2->andOr2 = 'and';
$postData2->operator2 = '=';
$postData2->value2 = 'active';
$postDatas = array($postData1, $postData2);
r($search->buildQueryTest($searchConfig, $postDatas, 'query')) && p() && e("(( 1 AND `title` LIKE '%bug%' AND `status` = 'active' ) AND ( 1 ))");
// 测试步骤6OR逻辑关系测试
$postData2->andOr2 = 'or';
$postDatas = array($postData1, $postData2);
r($search->buildQueryTest($searchConfig, $postDatas, 'query')) && p() && e("(( 1 AND `title` LIKE '%bug%' OR `status` = 'active' ) AND ( 1 ))");
// 测试步骤7无效字段名过滤SQL注入防护 - 使用新的测试实例
$searchConfig2 = array();
$searchConfig2['module'] = 'bug';
$searchConfig2['fields'] = array('title' => 'Bug Title');
$searchConfig2['params'] = array('title' => array('operator' => 'include', 'control' => 'input', 'value' => ''));
$searchConfig2['onMenuBar'] = 'yes';
$searchConfig2['actionURL'] = '/index.php?m=bug&f=browse&productID=110&branch=0&browseType=bySearch&queryID=myQueryID';
$searchConfig2['queryID'] = 0;
$search2 = new searchModelTest();
$postData4 = new stdclass();
$postData4->field1 = 'title; DROP TABLE users; --';
$postData4->andOr1 = 'and';
$postData4->operator1 = 'include';
$postData4->value1 = 'test';
$postDatas2 = array($postData4);
r($search2->buildQueryTest($searchConfig2, $postDatas2, 'query')) && p() && e("(( 1 OR `status` = 'active' ) AND ( 1 ))");