Browse Source

fix(targeting): 'Unable to see target' for DOOR_TREASURE target type

The message was due to incorrect logic when checking target conditions.
Added test coverage for this target type.
Noe Caratini 3 năm trước cách đây
mục cha
commit
3c224f1de8

+ 1 - 1
src/main/java/com/l2jserver/gameserver/model/skills/targets/TargetType.java

@@ -79,7 +79,7 @@ public enum TargetType {
 	DOOR_TREASURE {
 		@Override
 		public L2Object getTarget(Skill skill, L2Character caster, L2Object target) {
-			if ((target == null) || !target.isDoor() || !(target instanceof L2ChestInstance)) {
+			if ((target == null) || (!target.isDoor() && !(target instanceof L2ChestInstance))) {
 				caster.sendPacket(INCORRECT_TARGET);
 				return null;
 			}

+ 59 - 0
src/test/java/com/l2jserver/gameserver/model/skills/targets/TargetTypeTest.java

@@ -0,0 +1,59 @@
+package com.l2jserver.gameserver.model.skills.targets;
+
+import com.l2jserver.gameserver.model.L2Object;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.instance.L2ChestInstance;
+import com.l2jserver.gameserver.model.skills.Skill;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
+public class TargetTypeTest {
+
+    @Mock
+    private Skill skill;
+    @Mock
+    private L2Character caster;
+    @Mock
+    private L2Object target;
+
+    @Test
+    public void doorTreasureShouldReturnNullIfTargetIsNull() {
+        L2Object result = TargetType.DOOR_TREASURE.getTarget(skill, caster, null);
+
+        assertThat(result).isNull();
+    }
+
+    @Test
+    public void doorTreasureShouldReturnNullIfTargetIsNotADoorOrChest() {
+        when(target.isDoor()).thenReturn(false);
+
+        L2Object result = TargetType.DOOR_TREASURE.getTarget(skill, caster, target);
+
+        assertThat(result).isNull();
+    }
+
+    @Test
+    public void doorTreasureShouldReturnTargetIfDoor() {
+        when(target.isDoor()).thenReturn(true);
+
+        L2Object result = TargetType.DOOR_TREASURE.getTarget(skill, caster, target);
+
+        assertThat(result).isSameAs(target);
+    }
+
+    @Test
+    public void doorTreasureShouldReturnTargetIfChest() {
+        target = mock(L2ChestInstance.class);
+
+        L2Object result = TargetType.DOOR_TREASURE.getTarget(skill, caster, target);
+
+        assertThat(result).isSameAs(target);
+    }
+}