| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- <?php
- namespace Tests\Unit\UCore;
- use Tests\TestCase;
- use Carbon\Carbon;
- class GridHelperDateTimeTest extends TestCase
- {
- /**
- * 测试columnDateTime方法的时间格式化功能
- */
- public function testColumnDateTimeFormatting()
- {
- // 测试数据
- $testCases = [
- // 时间戳 (考虑时区,使用实际的时间戳转换结果)
- ['input' => 1640995200, 'expected' => date('Y-m-d H:i:s', 1640995200)],
- // Carbon实例
- ['input' => Carbon::parse('2023-06-15 14:30:45'), 'expected' => '2023-06-15 14:30:45'],
- // DateTime对象
- ['input' => new \DateTime('2023-12-25 23:59:59'), 'expected' => '2023-12-25 23:59:59'],
- // 字符串格式
- ['input' => '2023-07-20 10:15:30', 'expected' => '2023-07-20 10:15:30'],
- // 空值
- ['input' => null, 'expected' => '-'],
- ['input' => '', 'expected' => '-'],
- // 零值 (考虑时区)
- ['input' => 0, 'expected' => date('Y-m-d H:i:s', 0)],
- ];
- foreach ($testCases as $case) {
- $result = $this->simulateColumnDateTimeDisplay($case['input']);
- $inputStr = is_object($case['input']) ? get_class($case['input']) : var_export($case['input'], true);
- $this->assertEquals($case['expected'], $result,
- "输入 {$inputStr} 应该输出 {$case['expected']},实际输出 {$result}");
- }
- }
- /**
- * 测试优化后的columnCreatedAt和columnUpdatedAt方法
- */
- public function testOptimizedCreatedAtAndUpdatedAt()
- {
- // 测试创建时间格式化
- $createdAtTestCases = [
- ['input' => '2023-01-01 12:00:00', 'expected' => '2023-01-01 12:00:00'],
- ['input' => 1672574400, 'expected' => date('Y-m-d H:i:s', 1672574400)],
- ['input' => null, 'expected' => '-'],
- ];
- foreach ($createdAtTestCases as $case) {
- $result = $this->simulateColumnDateTimeDisplay($case['input']);
- $this->assertEquals($case['expected'], $result,
- "columnCreatedAt 输入 {$case['input']} 应该输出 {$case['expected']},实际输出 {$result}");
- }
- // 测试更新时间格式化
- $updatedAtTestCases = [
- ['input' => '2023-12-31 23:59:59', 'expected' => '2023-12-31 23:59:59'],
- ['input' => 1704067199, 'expected' => date('Y-m-d H:i:s', 1704067199)],
- ['input' => '', 'expected' => '-'],
- ];
- foreach ($updatedAtTestCases as $case) {
- $result = $this->simulateColumnDateTimeDisplay($case['input']);
- $this->assertEquals($case['expected'], $result,
- "columnUpdatedAt 输入 {$case['input']} 应该输出 {$case['expected']},实际输出 {$result}");
- }
- }
-
- /**
- * 模拟columnDateTime的display回调函数
- */
- private function simulateColumnDateTimeDisplay($value)
- {
- // 这里复制columnDateTime方法中display回调的逻辑
- // 检查空值(但不包括0,因为0是有效的时间戳)
- if (is_null($value) || $value === '') {
- return '-';
- }
- // 如果是时间戳,转换为日期时间字符串
- if (is_numeric($value)) {
- return date('Y-m-d H:i:s', $value);
- }
- // 如果是Carbon实例或DateTime对象
- if ($value instanceof \Carbon\Carbon || $value instanceof \DateTime) {
- return $value->format('Y-m-d H:i:s');
- }
- // 如果是字符串,尝试转换为标准格式
- if (is_string($value)) {
- try {
- $date = new \DateTime($value);
- return $date->format('Y-m-d H:i:s');
- } catch (\Exception $e) {
- return $value; // 如果转换失败,返回原值
- }
- }
- return $value;
- }
- }
|