'freeze', 'change_type' => 'quantity_decrease', 'reason' => 'trade_order' ] ); // 验证事件属性 $this->assertEquals(1001, $event->userId); $this->assertEquals(2001, $event->itemId); $this->assertNull($event->instanceId); $this->assertEquals(100, $event->oldQuantity); $this->assertEquals(70, $event->newQuantity); $this->assertEquals(-30, $event->changeAmount); // 自动计算 $this->assertEquals(5001, $event->userItemId); $this->assertFalse($event->oldFrozenStatus); $this->assertFalse($event->newFrozenStatus); $this->assertEquals('quantity_decrease', $event->options['change_type']); } /** * 测试冻结物品创建事件 */ public function test_frozen_item_create_event() { // 创建冻结物品创建事件 $event = new ItemQuantityChanged( 1002, // userId 2002, // itemId null, // instanceId 0, // oldQuantity (新创建的物品) 30, // newQuantity 5002, // userItemId null, // oldFrozenStatus (新创建的物品) true, // newFrozenStatus (冻结状态) [ // options 'freeze_action' => 'freeze', 'change_type' => 'frozen_item_create', 'freeze_log_id' => 1001 ] ); // 验证事件属性 $this->assertEquals(1002, $event->userId); $this->assertEquals(2002, $event->itemId); $this->assertEquals(0, $event->oldQuantity); $this->assertEquals(30, $event->newQuantity); $this->assertEquals(30, $event->changeAmount); // 从0增加到30 $this->assertNull($event->oldFrozenStatus); $this->assertTrue($event->newFrozenStatus); $this->assertEquals('frozen_item_create', $event->options['change_type']); } /** * 测试冻结状态变更事件 */ public function test_freeze_status_change_event() { // 创建冻结状态变更事件(全部冻结) $event = new ItemQuantityChanged( 1003, // userId 2003, // itemId null, // instanceId 50, // oldQuantity 50, // newQuantity (数量不变) 5003, // userItemId false, // oldFrozenStatus true, // newFrozenStatus [ // options 'freeze_action' => 'freeze', 'change_type' => 'freeze_status_change', 'freeze_log_id' => 1002 ] ); // 验证事件属性 $this->assertEquals(1003, $event->userId); $this->assertEquals(2003, $event->itemId); $this->assertEquals(50, $event->oldQuantity); $this->assertEquals(50, $event->newQuantity); $this->assertEquals(0, $event->changeAmount); // 数量不变 $this->assertFalse($event->oldFrozenStatus); $this->assertTrue($event->newFrozenStatus); $this->assertEquals('freeze_status_change', $event->options['change_type']); } /** * 测试解冻事件 */ public function test_unfreeze_event() { // 创建解冻事件 $event = new ItemQuantityChanged( 1004, // userId 2004, // itemId null, // instanceId 40, // oldQuantity 40, // newQuantity (数量不变) 5004, // userItemId true, // oldFrozenStatus false, // newFrozenStatus [ // options 'freeze_action' => 'unfreeze', 'original_freeze_log_id' => 1003 ] ); // 验证事件属性 $this->assertEquals(1004, $event->userId); $this->assertEquals(2004, $event->itemId); $this->assertEquals(40, $event->oldQuantity); $this->assertEquals(40, $event->newQuantity); $this->assertEquals(0, $event->changeAmount); // 数量不变 $this->assertTrue($event->oldFrozenStatus); $this->assertFalse($event->newFrozenStatus); $this->assertEquals('unfreeze', $event->options['freeze_action']); } /** * 测试单独属性物品冻结事件 */ public function test_unique_item_freeze_event() { // 创建单独属性物品冻结事件 $event = new ItemQuantityChanged( 1005, // userId 2005, // itemId 3001, // instanceId (单独属性物品有实例ID) 1, // oldQuantity (单独属性物品数量为1) 1, // newQuantity (数量不变) 5005, // userItemId false, // oldFrozenStatus true, // newFrozenStatus [ // options 'freeze_action' => 'freeze', 'freeze_log_id' => 1004 ] ); // 验证事件属性 $this->assertEquals(1005, $event->userId); $this->assertEquals(2005, $event->itemId); $this->assertEquals(3001, $event->instanceId); $this->assertEquals(1, $event->oldQuantity); $this->assertEquals(1, $event->newQuantity); $this->assertEquals(0, $event->changeAmount); // 数量不变 $this->assertFalse($event->oldFrozenStatus); $this->assertTrue($event->newFrozenStatus); } /** * 测试事件的变化量自动计算 */ public function test_change_amount_auto_calculation() { // 测试增加 $increaseEvent = new ItemQuantityChanged(1, 1, null, 10, 15, 1, null, null, []); $this->assertEquals(5, $increaseEvent->changeAmount); // 测试减少 $decreaseEvent = new ItemQuantityChanged(1, 1, null, 20, 12, 1, null, null, []); $this->assertEquals(-8, $decreaseEvent->changeAmount); // 测试不变 $noChangeEvent = new ItemQuantityChanged(1, 1, null, 30, 30, 1, false, true, []); $this->assertEquals(0, $noChangeEvent->changeAmount); } }