From 605a28585fbeb94c0578e7e6d6dbde28b32a56b4 Mon Sep 17 00:00:00 2001 From: Ziggy Date: Sun, 14 Mar 2021 14:07:13 +0100 Subject: [PATCH 1/2] Desired outcome of active_quest can now be flipped and task check is now optional #335 --- build.gradle.kts | 1 + .../requirements/ActiveQuestRequirement.java | 33 ++++-- .../ActiveQuestRequirementParser.java | 5 +- .../ActiveQuestRequirementTest.java | 100 ++++++++++++++++++ .../ActiveQuestRequirementParserTest.java | 56 ++++++++++ 5 files changed, 186 insertions(+), 9 deletions(-) create mode 100644 src/test/java/com/projectswg/holocore/resources/gameplay/conversation/requirements/ActiveQuestRequirementTest.java create mode 100644 src/test/java/com/projectswg/holocore/resources/support/data/server_info/loader/conversation/requirements/ActiveQuestRequirementParserTest.java diff --git a/build.gradle.kts b/build.gradle.kts index 4255db1f5..a6aa53314 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -41,6 +41,7 @@ sourceSets { test { dependencies { implementation(group="junit", name="junit", version="4.12") + implementation(group="org.mockito", name="mockito-core", version="3.8.0") } } create("display") { diff --git a/src/main/java/com/projectswg/holocore/resources/gameplay/conversation/requirements/ActiveQuestRequirement.java b/src/main/java/com/projectswg/holocore/resources/gameplay/conversation/requirements/ActiveQuestRequirement.java index b946422e1..112d567c6 100644 --- a/src/main/java/com/projectswg/holocore/resources/gameplay/conversation/requirements/ActiveQuestRequirement.java +++ b/src/main/java/com/projectswg/holocore/resources/gameplay/conversation/requirements/ActiveQuestRequirement.java @@ -35,11 +35,13 @@ import java.util.Collection; public class ActiveQuestRequirement implements Requirement { private final String questName; - private final int task; + private final boolean active; + private final Integer task; - public ActiveQuestRequirement(String questName, int task) { + public ActiveQuestRequirement(String questName, boolean active, Integer task) { this.questName = questName; this.task = task; + this.active = active; } @Override @@ -47,15 +49,32 @@ public class ActiveQuestRequirement implements Requirement { PlayerObject playerObject = player.getPlayerObject(); if (!playerObject.isQuestInJournal(questName)) { - return false; + return !active; } if (playerObject.isQuestComplete(questName)) { - return false; + return !active; } - Collection questActiveTasks = playerObject.getQuestActiveTasks(questName); - - return questActiveTasks.contains(task); + if (task != null) { + Collection questActiveTasks = playerObject.getQuestActiveTasks(questName); + boolean taskActive = questActiveTasks.contains(task); + + return taskActive == active; + } + + return active; + } + + public String getQuestName() { + return questName; + } + + public Integer getTask() { + return task; + } + + public boolean isActive() { + return active; } } diff --git a/src/main/java/com/projectswg/holocore/resources/support/data/server_info/loader/conversation/requirements/ActiveQuestRequirementParser.java b/src/main/java/com/projectswg/holocore/resources/support/data/server_info/loader/conversation/requirements/ActiveQuestRequirementParser.java index fb64c7284..93a9f8277 100644 --- a/src/main/java/com/projectswg/holocore/resources/support/data/server_info/loader/conversation/requirements/ActiveQuestRequirementParser.java +++ b/src/main/java/com/projectswg/holocore/resources/support/data/server_info/loader/conversation/requirements/ActiveQuestRequirementParser.java @@ -36,8 +36,9 @@ public class ActiveQuestRequirementParser implements RequirementParser args) { String questName = (String) args.get("quest"); - int task = (int) args.get("task"); + boolean active = (Boolean) args.get("active"); + Integer task = (Integer) args.get("task"); - return new ActiveQuestRequirement(questName, task); + return new ActiveQuestRequirement(questName, active, task); } } diff --git a/src/test/java/com/projectswg/holocore/resources/gameplay/conversation/requirements/ActiveQuestRequirementTest.java b/src/test/java/com/projectswg/holocore/resources/gameplay/conversation/requirements/ActiveQuestRequirementTest.java new file mode 100644 index 000000000..c0af92b47 --- /dev/null +++ b/src/test/java/com/projectswg/holocore/resources/gameplay/conversation/requirements/ActiveQuestRequirementTest.java @@ -0,0 +1,100 @@ +package com.projectswg.holocore.resources.gameplay.conversation.requirements; + +import com.projectswg.holocore.resources.support.global.player.Player; +import com.projectswg.holocore.resources.support.objects.swg.player.PlayerObject; +import org.junit.Before; +import org.junit.Test; + +import java.util.Collections; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class ActiveQuestRequirementTest { + + private Player player; + private PlayerObject playerObject; + private String questName; + + @Before + public void setup() { + player = mock(Player.class); + playerObject = mock(PlayerObject.class); + questName = "testquest"; + + when(player.getPlayerObject()).thenReturn(playerObject); + } + + @Test + public void questMissingInJournal() { + Integer task = null; + boolean active = true; + ActiveQuestRequirement requirement = new ActiveQuestRequirement(questName, active, task); + + when(playerObject.isQuestInJournal(questName)).thenReturn(false); + + boolean result = requirement.test(player); + + assertFalse(result); + } + + @Test + public void questComplete() { + Integer task = null; + boolean active = true; + ActiveQuestRequirement requirement = new ActiveQuestRequirement(questName, active, task); + + when(playerObject.isQuestInJournal(questName)).thenReturn(true); + when(playerObject.isQuestComplete(questName)).thenReturn(true); + + boolean result = requirement.test(player); + + assertFalse(result); + } + + @Test + public void taskActive() { + Integer task = 1; + boolean active = true; + ActiveQuestRequirement requirement = new ActiveQuestRequirement(questName, active, task); + + when(playerObject.isQuestInJournal(questName)).thenReturn(true); + when(playerObject.isQuestComplete(questName)).thenReturn(false); + when(playerObject.getQuestActiveTasks(questName)).thenReturn(Collections.singleton(task)); + + boolean result = requirement.test(player); + + assertTrue(result); + } + + @Test + public void taskActiveFlipped() { + Integer task = 1; + boolean active = false; + ActiveQuestRequirement requirement = new ActiveQuestRequirement(questName, active, task); + + when(playerObject.isQuestInJournal(questName)).thenReturn(true); + when(playerObject.isQuestComplete(questName)).thenReturn(false); + when(playerObject.getQuestActiveTasks(questName)).thenReturn(Collections.singleton(task)); + + boolean result = requirement.test(player); + + assertFalse(result); + } + + @Test + public void skipOptionalTaskCheck() { + Integer task = null; + boolean active = true; + ActiveQuestRequirement requirement = new ActiveQuestRequirement(questName, active, task); + + when(playerObject.isQuestInJournal(questName)).thenReturn(true); + when(playerObject.isQuestComplete(questName)).thenReturn(false); + when(playerObject.getQuestActiveTasks(questName)).thenReturn(Collections.singleton(task)); + + boolean result = requirement.test(player); + + assertTrue(result); + } +} \ No newline at end of file diff --git a/src/test/java/com/projectswg/holocore/resources/support/data/server_info/loader/conversation/requirements/ActiveQuestRequirementParserTest.java b/src/test/java/com/projectswg/holocore/resources/support/data/server_info/loader/conversation/requirements/ActiveQuestRequirementParserTest.java new file mode 100644 index 000000000..6a5cc61b4 --- /dev/null +++ b/src/test/java/com/projectswg/holocore/resources/support/data/server_info/loader/conversation/requirements/ActiveQuestRequirementParserTest.java @@ -0,0 +1,56 @@ +package com.projectswg.holocore.resources.support.data.server_info.loader.conversation.requirements; + +import com.projectswg.holocore.resources.gameplay.conversation.requirements.ActiveQuestRequirement; +import org.junit.Before; +import org.junit.Test; + +import java.util.Map; + +import static org.junit.Assert.*; + +public class ActiveQuestRequirementParserTest { + + private ActiveQuestRequirementParser parser; + + @Before + public void setup() { + parser = new ActiveQuestRequirementParser(); + } + + @Test + public void testAllParametersSet() { + String expectedQuestName = "testquest"; + Integer expectedTask = 1234; + boolean expectedActive = true; + + Map args = Map.of( + "quest", expectedQuestName, + "task", expectedTask, + "active", expectedActive + ); + + ActiveQuestRequirement requirement = parser.parse(args); + + assertEquals(expectedQuestName, requirement.getQuestName()); + assertEquals(expectedTask, requirement.getTask()); + assertEquals(expectedActive, requirement.isActive()); + } + + @Test + public void testTaskOptional() { + String expectedQuestName = "testquest"; + Integer expectedTask = null; + boolean expectedActive = true; + + Map args = Map.of( + "quest", expectedQuestName, + "active", expectedActive + ); + + ActiveQuestRequirement requirement = parser.parse(args); + + assertEquals(expectedQuestName, requirement.getQuestName()); + assertEquals(expectedTask, requirement.getTask()); + assertEquals(expectedActive, requirement.isActive()); + } +} \ No newline at end of file From 855b281aac1977157c3488462c064f994f1c5d9c Mon Sep 17 00:00:00 2001 From: Ziggy Date: Sun, 14 Mar 2021 17:53:16 +0100 Subject: [PATCH 2/2] active_quest task arg can now be read #335 --- .../requirements/ActiveQuestRequirementParser.java | 13 +++++++++++-- .../ActiveQuestRequirementParserTest.java | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/projectswg/holocore/resources/support/data/server_info/loader/conversation/requirements/ActiveQuestRequirementParser.java b/src/main/java/com/projectswg/holocore/resources/support/data/server_info/loader/conversation/requirements/ActiveQuestRequirementParser.java index 93a9f8277..761364fda 100644 --- a/src/main/java/com/projectswg/holocore/resources/support/data/server_info/loader/conversation/requirements/ActiveQuestRequirementParser.java +++ b/src/main/java/com/projectswg/holocore/resources/support/data/server_info/loader/conversation/requirements/ActiveQuestRequirementParser.java @@ -37,8 +37,17 @@ public class ActiveQuestRequirementParser implements RequirementParser args) { String questName = (String) args.get("quest"); boolean active = (Boolean) args.get("active"); - Integer task = (Integer) args.get("task"); + Long task = (Long) args.get("task"); - return new ActiveQuestRequirement(questName, active, task); + return new ActiveQuestRequirement(questName, active, getTaskValue(task)); + } + + private Integer getTaskValue(Long task) { + if (task == null) { + // The parameter is optional + return null; + } + + return task.intValue(); } } diff --git a/src/test/java/com/projectswg/holocore/resources/support/data/server_info/loader/conversation/requirements/ActiveQuestRequirementParserTest.java b/src/test/java/com/projectswg/holocore/resources/support/data/server_info/loader/conversation/requirements/ActiveQuestRequirementParserTest.java index 6a5cc61b4..14c9ab30a 100644 --- a/src/test/java/com/projectswg/holocore/resources/support/data/server_info/loader/conversation/requirements/ActiveQuestRequirementParserTest.java +++ b/src/test/java/com/projectswg/holocore/resources/support/data/server_info/loader/conversation/requirements/ActiveQuestRequirementParserTest.java @@ -25,7 +25,7 @@ public class ActiveQuestRequirementParserTest { Map args = Map.of( "quest", expectedQuestName, - "task", expectedTask, + "task", Long.valueOf(expectedTask), "active", expectedActive );