| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- <?php
- namespace Tests\Unit;
- use App\Module\Game\AdminControllers\FarmUserSummaryController;
- use Carbon\Carbon;
- use PHPUnit\Framework\TestCase;
- use ReflectionClass;
- /**
- * 农场用户信息汇总相对时间测试
- */
- class FarmUserSummaryRelativeTimeTest extends TestCase
- {
- /**
- * 获取控制器实例并访问受保护的方法
- */
- private function getController()
- {
- $controller = new FarmUserSummaryController();
- $reflection = new ReflectionClass($controller);
- $method = $reflection->getMethod('formatRelativeTime');
- $method->setAccessible(true);
- return [$controller, $method];
- }
- /**
- * 测试空值处理
- */
- public function testFormatRelativeTimeWithNull()
- {
- [$controller, $method] = $this->getController();
- $result = $method->invoke($controller, null);
- $this->assertEquals('无', $result);
- $result = $method->invoke($controller, '');
- $this->assertEquals('无', $result);
- }
- /**
- * 测试已过期时间
- */
- public function testFormatRelativeTimeWithPastTime()
- {
- [$controller, $method] = $this->getController();
- $pastTime = Carbon::now()->subHours(1);
- $result = $method->invoke($controller, $pastTime);
- $this->assertStringContainsString('已过期', $result);
- $this->assertStringContainsString('text-danger', $result);
- }
- /**
- * 测试秒级时间差
- */
- public function testFormatRelativeTimeWithSeconds()
- {
- [$controller, $method] = $this->getController();
- $futureTime = Carbon::now()->addSeconds(30);
- $result = $method->invoke($controller, $futureTime);
- $this->assertStringContainsString('秒后', $result);
- $this->assertStringContainsString('text-warning', $result);
- }
- /**
- * 测试分钟级时间差
- */
- public function testFormatRelativeTimeWithMinutes()
- {
- [$controller, $method] = $this->getController();
- $futureTime = Carbon::now()->addMinutes(30);
- $result = $method->invoke($controller, $futureTime);
- $this->assertStringContainsString('分钟后', $result);
- $this->assertStringContainsString('text-info', $result);
- }
- /**
- * 测试小时级时间差
- */
- public function testFormatRelativeTimeWithHours()
- {
- [$controller, $method] = $this->getController();
- $futureTime = Carbon::now()->addHours(5);
- $result = $method->invoke($controller, $futureTime);
- $this->assertStringContainsString('小时后', $result);
- $this->assertStringContainsString('text-primary', $result);
- // 测试整数小时不显示小数
- $this->assertStringContainsString('5小时后', $result);
- }
- /**
- * 测试小时级时间差的小数位数优化
- */
- public function testFormatRelativeTimeHoursDecimalOptimization()
- {
- [$controller, $method] = $this->getController();
- // 测试3.5小时
- $futureTime = Carbon::now()->addMinutes(210); // 3.5小时
- $result = $method->invoke($controller, $futureTime);
- $this->assertStringContainsString('3.5小时后', $result);
- $this->assertStringNotContainsString('3.50', $result);
- // 测试3.97小时应该显示为4.0小时
- $futureTime = Carbon::now()->addMinutes(238); // 约3.97小时
- $result = $method->invoke($controller, $futureTime);
- $this->assertStringContainsString('小时后', $result);
- // 应该四舍五入到1位小数
- $this->assertStringNotContainsString('3.97', $result);
- }
- /**
- * 测试天级时间差
- */
- public function testFormatRelativeTimeWithDays()
- {
- [$controller, $method] = $this->getController();
- $futureTime = Carbon::now()->addDays(3);
- $result = $method->invoke($controller, $futureTime);
- $this->assertStringContainsString('天后', $result);
- $this->assertStringContainsString('text-secondary', $result);
- }
- /**
- * 测试超过7天的时间差
- */
- public function testFormatRelativeTimeWithWeeks()
- {
- [$controller, $method] = $this->getController();
- $futureTime = Carbon::now()->addDays(10);
- $result = $method->invoke($controller, $futureTime);
- // 超过7天应该显示具体日期
- $this->assertStringContainsString($futureTime->format('Y-m-d H:i:s'), $result);
- }
- /**
- * 测试字符串时间输入
- */
- public function testFormatRelativeTimeWithStringInput()
- {
- [$controller, $method] = $this->getController();
- $futureTimeString = Carbon::now()->addHours(2)->toDateTimeString();
- $result = $method->invoke($controller, $futureTimeString);
- $this->assertStringContainsString('小时后', $result);
- $this->assertStringContainsString('text-primary', $result);
- }
- /**
- * 测试无效时间格式
- */
- public function testFormatRelativeTimeWithInvalidFormat()
- {
- [$controller, $method] = $this->getController();
- $result = $method->invoke($controller, 'invalid-date-format');
- $this->assertStringContainsString('时间格式错误', $result);
- $this->assertStringContainsString('text-muted', $result);
- }
- /**
- * 测试边界情况 - 正好1分钟
- */
- public function testFormatRelativeTimeExactlyOneMinute()
- {
- [$controller, $method] = $this->getController();
- $futureTime = Carbon::now()->addMinutes(1);
- $result = $method->invoke($controller, $futureTime);
- $this->assertStringContainsString('分钟后', $result);
- $this->assertStringContainsString('text-info', $result);
- }
- /**
- * 测试边界情况 - 正好1小时
- */
- public function testFormatRelativeTimeExactlyOneHour()
- {
- [$controller, $method] = $this->getController();
- $futureTime = Carbon::now()->addHours(1);
- $result = $method->invoke($controller, $futureTime);
- $this->assertStringContainsString('小时后', $result);
- $this->assertStringContainsString('text-primary', $result);
- }
- /**
- * 测试边界情况 - 正好1天
- */
- public function testFormatRelativeTimeExactlyOneDay()
- {
- [$controller, $method] = $this->getController();
- $futureTime = Carbon::now()->addDays(1);
- $result = $method->invoke($controller, $futureTime);
- $this->assertStringContainsString('天后', $result);
- $this->assertStringContainsString('text-secondary', $result);
- }
- }
|