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

97 lines
4.3 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=测试 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 ))");