znt/module/message/test/model/batchsavetodonotice.php

115 lines
4.3 KiB
PHP
Raw Permalink Normal View History

#!/usr/bin/env php
<?php
declare(strict_types=1);
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/model.class.php';
/**
title=测试 messageModel::batchSaveTodoNotice();
timeout=0
cid=17048
- 测试步骤1有待办需要提醒时批量保存通知消息 @3
- 测试步骤2无待办需要提醒时返回空数组 @0
- 测试步骤3验证保存的通知消息数据结构正确性 @3
- 测试步骤4测试不同用户的待办通知保存 @2
- 测试步骤5验证数据库中通知记录的完整性 @8
*/
// 使用 dao 直接插入数据,避免生成 SQL 文件,并确保数据符合测试条件
// getNoticeTodos() 需要找到今天、状态为wait、begin时间在提醒范围内的待办
global $tester;
$now = helper::now();
$today = date('Y-m-d');
$ends1 = (int)date('Hi', strtotime("+60 seconds {$now}"));
$ends10 = (int)date('Hi', strtotime("+10 minute +60 seconds {$now}"));
$ends30 = (int)date('Hi', strtotime("+30 minute +60 seconds {$now}"));
// begin 时间在提醒范围内格式4字符字符串 HHmm如 '1010' 表示 10:10
$begin1 = sprintf('%04d', $ends1);
$begin10 = sprintf('%04d', $ends10);
$begin30 = sprintf('%04d', $ends30);
// begin 时间不在提醒范围内用于user2用户
$beginOut = sprintf('%04d', (int)date('Hi', strtotime("+2 hours {$now}")));
// 直接插入数据,确保每个用户的待办数量符合测试期望
// admin用户3条待办在提醒范围内
for($i = 0; $i < 3; $i++)
{
$begin = array($begin1, $begin10, $begin30)[$i];
$tester->dao->insert(TABLE_TODO)
->set('account')->eq('admin')
->set('date')->eq($today)
->set('begin')->eq($begin)
->set('end')->eq('1400')
->set('type')->eq('custom')
->set('objectID')->eq(0)
->set('pri')->eq(1)
->set('name')->eq('测试待办' . ($i + 1))
->set('desc')->eq('测试描述')
->set('status')->eq('wait')
->set('private')->eq(0)
->set('assignedTo')->eq('admin')
->set('assignedBy')->eq('admin')
->set('assignedDate')->eq($now)
->exec();
}
// user1用户2条待办在提醒范围内
for($i = 0; $i < 2; $i++)
{
$begin = array($begin1, $begin10)[$i];
$tester->dao->insert(TABLE_TODO)
->set('account')->eq('user1')
->set('date')->eq($today)
->set('begin')->eq($begin)
->set('end')->eq('1400')
->set('type')->eq('custom')
->set('objectID')->eq(0)
->set('pri')->eq(1)
->set('name')->eq('测试待办' . ($i + 1))
->set('desc')->eq('测试描述')
->set('status')->eq('wait')
->set('private')->eq(0)
->set('assignedTo')->eq('user1')
->set('assignedBy')->eq('admin')
->set('assignedDate')->eq($now)
->exec();
}
// user2用户3条待办但begin时间不在提醒范围内
for($i = 0; $i < 3; $i++)
{
$tester->dao->insert(TABLE_TODO)
->set('account')->eq('user2')
->set('date')->eq($today)
->set('begin')->eq($beginOut)
->set('end')->eq('1400')
->set('type')->eq('custom')
->set('objectID')->eq(0)
->set('pri')->eq(1)
->set('name')->eq('测试待办' . ($i + 1))
->set('desc')->eq('测试描述')
->set('status')->eq('wait')
->set('private')->eq(0)
->set('assignedTo')->eq('user2')
->set('assignedBy')->eq('admin')
->set('assignedDate')->eq($now)
->exec();
}
zenData('user')->gen(5);
zenData('notify')->gen(0);
global $tester;
$messageTest = new messageModelTest();
su('admin');
r($messageTest->batchSaveTodoNoticeTest('admin')) && p() && e('3'); // 测试步骤1有待办需要提醒时批量保存通知消息
r($messageTest->batchSaveTodoNoticeTest('user2')) && p() && e('0'); // 测试步骤2无待办需要提醒时返回空数组
su('admin');
$adminResult = $tester->message->batchSaveTodoNotice();
r(count($adminResult)) && p() && e('3'); // 测试步骤3验证保存的通知消息数据结构正确性
r($messageTest->batchSaveTodoNoticeTest('user1')) && p() && e('2'); // 测试步骤4测试不同用户的待办通知保存
r($tester->message->dao->select('COUNT(*) as count')->from(TABLE_NOTIFY)->where('objectType')->eq('message')->fetch('count')) && p() && e('8'); // 测试步骤5验证数据库中通知记录的完整性